diff options
author | Alberto Ruiz <aruiz@um.es> | 2015-07-16 20:16:59 +0200 |
---|---|---|
committer | Alberto Ruiz <aruiz@um.es> | 2015-07-16 20:16:59 +0200 |
commit | a273fdb74b04db6d57d5c9b15e676d83357e71fd (patch) | |
tree | 99189532f2a37129a7ec3696f681ff3fd3314950 /packages/tests/src/Numeric/LinearAlgebra/Tests | |
parent | d9c99a670a393fb232641183623a7fa5921ccff2 (diff) |
Her, LU, LDL, Linear, Additive
Diffstat (limited to 'packages/tests/src/Numeric/LinearAlgebra/Tests')
-rw-r--r-- | packages/tests/src/Numeric/LinearAlgebra/Tests/Instances.hs | 18 | ||||
-rw-r--r-- | packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs | 12 |
2 files changed, 16 insertions, 14 deletions
diff --git a/packages/tests/src/Numeric/LinearAlgebra/Tests/Instances.hs b/packages/tests/src/Numeric/LinearAlgebra/Tests/Instances.hs index 7c54535..4704989 100644 --- a/packages/tests/src/Numeric/LinearAlgebra/Tests/Instances.hs +++ b/packages/tests/src/Numeric/LinearAlgebra/Tests/Instances.hs | |||
@@ -14,7 +14,7 @@ Arbitrary instances for vectors, matrices. | |||
14 | module Numeric.LinearAlgebra.Tests.Instances( | 14 | module Numeric.LinearAlgebra.Tests.Instances( |
15 | Sq(..), rSq,cSq, | 15 | Sq(..), rSq,cSq, |
16 | Rot(..), rRot,cRot, | 16 | Rot(..), rRot,cRot, |
17 | Her(..), rHer,cHer, | 17 | rHer,cHer, |
18 | WC(..), rWC,cWC, | 18 | WC(..), rWC,cWC, |
19 | SqWC(..), rSqWC, cSqWC, rSymWC, cSymWC, | 19 | SqWC(..), rSqWC, cSqWC, rSymWC, cSymWC, |
20 | PosDef(..), rPosDef, cPosDef, | 20 | PosDef(..), rPosDef, cPosDef, |
@@ -81,12 +81,12 @@ instance (Field a, Arbitrary a) => Arbitrary (Rot a) where | |||
81 | 81 | ||
82 | 82 | ||
83 | -- a complex hermitian or real symmetric matrix | 83 | -- a complex hermitian or real symmetric matrix |
84 | newtype (Her a) = Her (Matrix a) deriving Show | 84 | --newtype (Her a) = Her (Matrix a) deriving Show |
85 | instance (Field a, Arbitrary a, Num (Vector a)) => Arbitrary (Her a) where | 85 | instance (Field a, Arbitrary a, Num (Vector a)) => Arbitrary (Her a) where |
86 | arbitrary = do | 86 | arbitrary = do |
87 | Sq m <- arbitrary | 87 | Sq m <- arbitrary |
88 | let m' = m/2 | 88 | let m' = m/2 |
89 | return $ Her (m' + tr m') | 89 | return $ sym m' |
90 | 90 | ||
91 | 91 | ||
92 | class (Field a, Arbitrary a, Element (RealOf a), Random (RealOf a)) => ArbitraryField a | 92 | class (Field a, Arbitrary a, Element (RealOf a), Random (RealOf a)) => ArbitraryField a |
@@ -125,9 +125,9 @@ newtype (PosDef a) = PosDef (Matrix a) deriving Show | |||
125 | instance (Numeric a, ArbitraryField a, Num (Vector a)) | 125 | instance (Numeric a, ArbitraryField a, Num (Vector a)) |
126 | => Arbitrary (PosDef a) where | 126 | => Arbitrary (PosDef a) where |
127 | arbitrary = do | 127 | arbitrary = do |
128 | Her m <- arbitrary | 128 | m <- arbitrary |
129 | let (_,v) = eigSH m | 129 | let (_,v) = eigSH m |
130 | n = rows m | 130 | n = rows (her m) |
131 | l <- replicateM n (choose (0,100)) | 131 | l <- replicateM n (choose (0,100)) |
132 | let s = diag (fromList l) | 132 | let s = diag (fromList l) |
133 | p = v <> real s <> tr v | 133 | p = v <> real s <> tr v |
@@ -161,8 +161,8 @@ fM m = m :: FM | |||
161 | zM m = m :: ZM | 161 | zM m = m :: ZM |
162 | 162 | ||
163 | 163 | ||
164 | rHer (Her m) = m :: RM | 164 | rHer m = her m :: RM |
165 | cHer (Her m) = m :: CM | 165 | cHer m = her m :: CM |
166 | 166 | ||
167 | rRot (Rot m) = m :: RM | 167 | rRot (Rot m) = m :: RM |
168 | cRot (Rot m) = m :: CM | 168 | cRot (Rot m) = m :: CM |
@@ -176,8 +176,8 @@ cWC (WC m) = m :: CM | |||
176 | rSqWC (SqWC m) = m :: RM | 176 | rSqWC (SqWC m) = m :: RM |
177 | cSqWC (SqWC m) = m :: CM | 177 | cSqWC (SqWC m) = m :: CM |
178 | 178 | ||
179 | rSymWC (SqWC m) = m + tr m :: RM | 179 | rSymWC (SqWC m) = sym m :: Her R |
180 | cSymWC (SqWC m) = m + tr m :: CM | 180 | cSymWC (SqWC m) = sym m :: Her C |
181 | 181 | ||
182 | rPosDef (PosDef m) = m :: RM | 182 | rPosDef (PosDef m) = m :: RM |
183 | cPosDef (PosDef m) = m :: CM | 183 | cPosDef (PosDef m) = m :: CM |
diff --git a/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs b/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs index 207a303..2ac3588 100644 --- a/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs +++ b/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs | |||
@@ -39,7 +39,7 @@ module Numeric.LinearAlgebra.Tests.Properties ( | |||
39 | expmDiagProp, | 39 | expmDiagProp, |
40 | multProp1, multProp2, | 40 | multProp1, multProp2, |
41 | subProp, | 41 | subProp, |
42 | linearSolveProp, linearSolveProp2 | 42 | linearSolveProp, linearSolvePropH, linearSolveProp2 |
43 | ) where | 43 | ) where |
44 | 44 | ||
45 | import Numeric.LinearAlgebra.HMatrix hiding (Testable,unitary) | 45 | import Numeric.LinearAlgebra.HMatrix hiding (Testable,unitary) |
@@ -209,11 +209,11 @@ eigProp m = complex m <> v |~| v <> diag s | |||
209 | eigSHProp m = m <> v |~| v <> real (diag s) | 209 | eigSHProp m = m <> v |~| v <> real (diag s) |
210 | && unitary v | 210 | && unitary v |
211 | && m |~| v <> real (diag s) <> tr v | 211 | && m |~| v <> real (diag s) <> tr v |
212 | where (s, v) = eigSH m | 212 | where (s, v) = eigSH' m |
213 | 213 | ||
214 | eigProp2 m = fst (eig m) |~| eigenvalues m | 214 | eigProp2 m = fst (eig m) |~| eigenvalues m |
215 | 215 | ||
216 | eigSHProp2 m = fst (eigSH m) |~| eigenvaluesSH m | 216 | eigSHProp2 m = fst (eigSH' m) |~| eigenvaluesSH' m |
217 | 217 | ||
218 | ------------------------------------------------------------------ | 218 | ------------------------------------------------------------------ |
219 | 219 | ||
@@ -246,9 +246,9 @@ schurProp2 m = m |~| u <> s <> tr u && unitary u && upperHessenberg s -- fixme | |||
246 | where (u,s) = schur m | 246 | where (u,s) = schur m |
247 | 247 | ||
248 | cholProp m = m |~| tr c <> c && upperTriang c | 248 | cholProp m = m |~| tr c <> c && upperTriang c |
249 | where c = chol m | 249 | where c = chol (trustSym m) |
250 | 250 | ||
251 | exactProp m = chol m == chol (m+0) | 251 | exactProp m = chol (trustSym m) == chol (trustSym (m+0)) |
252 | 252 | ||
253 | expmDiagProp m = expm (logm m) :~ 7 ~: complex m | 253 | expmDiagProp m = expm (logm m) :~ 7 ~: complex m |
254 | where logm = matFunc log | 254 | where logm = matFunc log |
@@ -263,6 +263,8 @@ multProp2 p (a,b) = (tr (a <> b)) :~p~: (tr b <> tr a) | |||
263 | 263 | ||
264 | linearSolveProp f m = f m m |~| ident (rows m) | 264 | linearSolveProp f m = f m m |~| ident (rows m) |
265 | 265 | ||
266 | linearSolvePropH f m = f m (her m) |~| ident (rows (her m)) | ||
267 | |||
266 | linearSolveProp2 f (a,x) = not wc `trivial` (not wc || a <> f a b |~| b) | 268 | linearSolveProp2 f (a,x) = not wc `trivial` (not wc || a <> f a b |~| b) |
267 | where q = min (rows a) (cols a) | 269 | where q = min (rows a) (cols a) |
268 | b = a <> x | 270 | b = a <> x |