From 500f5fca244dadab494655aa73d7183df1c87c50 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Sat, 23 Feb 2008 19:35:51 +0000 Subject: working on tests --- lib/Numeric/LinearAlgebra/Tests/Properties.hs | 70 ++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'lib/Numeric/LinearAlgebra/Tests/Properties.hs') diff --git a/lib/Numeric/LinearAlgebra/Tests/Properties.hs b/lib/Numeric/LinearAlgebra/Tests/Properties.hs index 351615b..0317469 100644 --- a/lib/Numeric/LinearAlgebra/Tests/Properties.hs +++ b/lib/Numeric/LinearAlgebra/Tests/Properties.hs @@ -19,6 +19,7 @@ where import Numeric.LinearAlgebra import Numeric.LinearAlgebra.Tests.Instances(Sq(..),Her(..),Rot(..)) +import Test.QuickCheck -- relative error dist :: (Normed t, Num t) => t -> t -> Double @@ -53,7 +54,74 @@ degenerate m = rank m < min (rows m) (cols m) wellCond m = rcond m > 1/100 +positiveDefinite m = minimum (toList e) > 0 + where (e,v) = eigSH m + +upperTriang m = rows m == 1 || down == z + where down = fromList $ concat $ zipWith drop [1..] (toLists (ctrans m)) + z = constant 0 (dim down) + +upperHessenberg m = rows m < 3 || down == z + where down = fromList $ concat $ zipWith drop [2..] (toLists (ctrans m)) + z = constant 0 (dim down) + +zeros (r,c) = reshape c (constant 0 (r*c)) + +ones (r,c) = zeros (r,c) + 1 + ----------------------------------------------------- -luTest m = m |~| p <> l <> u && det p == s +luProp m = m |~| p <> l <> u && det p == s where (l,u,p,s) = lu m + +invProp m = m <> inv m |~| ident (rows m) + +pinvProp m = m <> p <> m |~| m + && p <> m <> p |~| p + && hermitian (m<>p) + && hermitian (p<>m) + where p = pinv m + +detProp m = s d1 |~| s d2 + where d1 = det m + d2 = det' m * det q + det' m = product $ toList $ takeDiag r + (q,r) = qr m + s x = fromList [x] + +nullspaceProp m = null nl `trivial` (null nl || m <> n |~| zeros (r,c)) + where nl = nullspacePrec 1 m + n = fromColumns nl + r = rows m + c = cols m - rank m + +svdProp1 m = u <> real d <> trans v |~| m + && unitary u && unitary v + where (u,d,v) = full svd m + +svdProp2 m = (m |~| 0) `trivial` ((m |~| 0) || u <> real (diag s) <> trans v |~| m) + where (u,s,v) = economy svd m + +eigProp m = complex m <> v |~| v <> diag s + where (s, v) = eig m + +eigSHProp m = m <> v |~| v <> real (diag s) + && unitary v + && m |~| v <> real (diag s) <> ctrans v + where (s, v) = eigSH m + +qrProp m = q <> r |~| m && unitary q && upperTriang r + where (q,r) = qr m + +hessProp m = m |~| p <> h <> ctrans p && unitary p && upperHessenberg h + where (p,h) = hess m + +schurProp1 m = m |~| u <> s <> ctrans u && unitary u && upperTriang s + where (u,s) = schur m + +schurProp2 m = m |~| u <> s <> ctrans u && unitary u && upperHessenberg s -- fixme + where (u,s) = schur m + +cholProp m = m |~| ctrans c <> c && upperTriang c + where c = chol m + pos = positiveDefinite m -- cgit v1.2.3