summaryrefslogtreecommitdiff
path: root/examples/experiments/bigtests.hs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/experiments/bigtests.hs')
-rw-r--r--examples/experiments/bigtests.hs60
1 files changed, 60 insertions, 0 deletions
diff --git a/examples/experiments/bigtests.hs b/examples/experiments/bigtests.hs
new file mode 100644
index 0000000..a3dfad2
--- /dev/null
+++ b/examples/experiments/bigtests.hs
@@ -0,0 +1,60 @@
1module Main where
2
3import Numeric.LinearAlgebra
4import Numeric.LinearAlgebra.Tests
5import System.Random(randomRs,mkStdGen)
6import Test.HUnit hiding (test)
7import System(getArgs)
8
9
10pseudorandomR seed (n,m) = reshape m $ fromList $ take (n*m) $ randomRs (-100,100) $ mkStdGen seed
11
12pseudorandomC seed (n,m) = toComplex (pseudorandomR seed (n,m), pseudorandomR (seed+1) (n,m))
13
14bigmat = m + trans m
15 where m = pseudorandomR 18 (1000,1000) :: Matrix Double
16bigmatc = mc + ctrans mc
17 where mc = pseudorandomC 19 (1000,1000) :: Matrix (Complex Double)
18
19utest str b = TestCase $ assertBool str b
20
21feye n = flipud (ident n) :: Matrix Double
22
23infixl 4 |~|
24a |~| b = dist a b < 10^^(-10)
25
26dist a b = r
27 where norm = pnorm Infinity
28 na = norm a
29 nb = norm b
30 nab = norm (a-b)
31 mx = max na nb
32 mn = min na nb
33 r = if mn < eps
34 then mx
35 else nab/mx
36
37square m = rows m == cols m
38
39unitary m = square m && m <> ctrans m |~| ident (rows m)
40
41eigProp m = complex m <> v |~| v <> diag s
42 where (s, v) = eig m
43
44eigSHProp m = m <> v |~| v <> real (diag s)
45 && unitary v
46 && m |~| v <> real (diag s) <> ctrans v
47 where (s, v) = eigSH m
48
49bigtests = do
50 putStrLn "--------- big matrices -----"
51 runTestTT $ TestList
52 [ utest "eigS" $ eigSHProp bigmat
53 , utest "eigH" $ eigSHProp bigmatc
54 , utest "eigR" $ eigProp bigmat
55 , utest "eigC" $ eigProp bigmatc
56 , utest "det" $ det (feye 1000) == 1 && det (feye 1002) == -1
57 ]
58 return ()
59
60main = bigtests