From fde36f1224d4b87a32019bd9519d0aba4315792b Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Fri, 10 Apr 2015 09:59:43 +0200 Subject: conj trans in right singular vectors fo complex matrices, adapt pinvTol and nullspaceSVD --- packages/base/src/Numeric/LinearAlgebra/Algorithms.hs | 13 +++++++++---- packages/base/src/Numeric/LinearAlgebra/LAPACK.hs | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) (limited to 'packages') diff --git a/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs b/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs index a113d48..0e085c1 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs @@ -228,7 +228,9 @@ fromList [35.18264833189422,1.4769076999800903,1.089145439970417e-15] -} svd :: Field t => Matrix t -> (Matrix t, Vector Double, Matrix t) -svd = {-# SCC "svd" #-} svd' +svd = {-# SCC "svd" #-} g . svd' + where + g (u,s,v) = (u,s,tr v) {- | A version of 'svd' which returns only the @min (rows m) (cols m)@ singular vectors of @m@. @@ -272,7 +274,10 @@ fromList [35.18264833189422,1.4769076999800903,1.089145439970417e-15] -} thinSVD :: Field t => Matrix t -> (Matrix t, Vector Double, Matrix t) -thinSVD = {-# SCC "thinSVD" #-} thinSVD' +thinSVD = {-# SCC "thinSVD" #-} g . thinSVD' + where + g (u,s,v) = (u,s,tr v) + -- | Singular values only. singularValues :: Field t => Matrix t -> Vector Double @@ -587,7 +592,7 @@ m = (3><3) [ 1, 0, 0 -} pinvTol :: Field t => Double -> Matrix t -> Matrix t -pinvTol t m = conj v' `mXm` diag s' `mXm` ctrans u' where +pinvTol t m = v' `mXm` diag s' `mXm` ctrans u' where (u,s,v) = thinSVD m sl@(g:_) = toList s s' = real . fromList . map rec $ sl @@ -649,7 +654,7 @@ nullspaceSVD hint a (s,v) = vs where k = case hint of Right t -> t _ -> rankSVD tol a s - vs = conj (dropColumns k v) + vs = dropColumns k v -- | The nullspace of a matrix. See also 'nullspaceSVD'. diff --git a/packages/base/src/Numeric/LinearAlgebra/LAPACK.hs b/packages/base/src/Numeric/LinearAlgebra/LAPACK.hs index e088fdc..d96e14f 100644 --- a/packages/base/src/Numeric/LinearAlgebra/LAPACK.hs +++ b/packages/base/src/Numeric/LinearAlgebra/LAPACK.hs @@ -115,7 +115,7 @@ svdAux f st x = unsafePerformIO $ do s <- createVector (min r c) v <- createMatrix ColumnMajor c c app4 f mat x mat u vec s mat v st - return (u,s,trans v) + return (u,s,v) where r = rows x c = cols x @@ -141,7 +141,7 @@ thinSVDAux f st x = unsafePerformIO $ do s <- createVector q v <- createMatrix ColumnMajor q c app4 f mat x mat u vec s mat v st - return (u,s,trans v) + return (u,s,v) where r = rows x c = cols x q = min r c @@ -185,7 +185,7 @@ rightSVAux f st x = unsafePerformIO $ do s <- createVector q v <- createMatrix ColumnMajor c c app3 g mat x vec s mat v st - return (s,trans v) + return (s,v) where r = rows x c = cols x q = min r c -- cgit v1.2.3