You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
904 B
Haskell
36 lines
904 B
Haskell
1 year ago
|
module Main where
|
||
|
|
||
|
import Numeric.LinearAlgebra as LA
|
||
|
import Data.Complex
|
||
|
import Graphics.EasyPlot
|
||
|
|
||
|
gen x y | x == y = -2
|
||
|
| abs (x - y) == 1 = 1
|
||
|
| otherwise = 0
|
||
|
|
||
|
a n = build (n,n) gen :: Matrix Double
|
||
|
|
||
|
-- Нормы
|
||
|
norm1 = maximum . map (sum . map abs) . toLists
|
||
|
norm2 = norm1 . tr
|
||
|
norm3 m = sqrt $ maximum $ map magnitude $ toList $ eigenvalues $ m LA.<> (tr m)
|
||
|
|
||
|
mu norm m = norm m * (norm $ inv m)
|
||
|
|
||
|
collectDots norm 1 = [(0, mu norm (a 1))]
|
||
|
collectDots norm n = (fromIntegral n, mu norm (a n)) : collectDots norm (n - 1)
|
||
|
|
||
|
main :: IO ()
|
||
|
main = do
|
||
|
let res1 = collectDots norm1 6
|
||
|
plot X11 $ Data2D [Title "norm1", Style Lines] [] res1
|
||
|
print res1
|
||
|
|
||
|
let res2 = collectDots norm2 6
|
||
|
plot X11 $ Data2D [Title "norm2", Style Lines] [] res2
|
||
|
print res2
|
||
|
|
||
|
let res3 = collectDots norm3 6
|
||
|
plot X11 $ Data2D [Title "norm3", Style Lines] [] res3
|
||
|
print res3
|