summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoridontgetoutmuch <dominic@steinitz.org>2018-12-02 11:41:18 +0000
committerGitHub <noreply@github.com>2018-12-02 11:41:18 +0000
commitc4b80ef9951b533d6bbbb34df8109f3290546296 (patch)
tree7e1cf379a31fe3f83ae1ce5a3b1feaaad11223fa
parent480c4db1585ed122dfc491bb15421565966dad66 (diff)
parentf4124fa6209cbf8290fed2be51cec8464bf7f1b9 (diff)
Merge pull request #286 from maksbotan/fix-#282
Fix #282
-rw-r--r--packages/base/src/Internal/LAPACK.hs4
-rw-r--r--packages/tests/src/Numeric/LinearAlgebra/Tests.hs24
2 files changed, 27 insertions, 1 deletions
diff --git a/packages/base/src/Internal/LAPACK.hs b/packages/base/src/Internal/LAPACK.hs
index ff55688..27d1f95 100644
--- a/packages/base/src/Internal/LAPACK.hs
+++ b/packages/base/src/Internal/LAPACK.hs
@@ -506,8 +506,10 @@ linearSolveGTAux2 g f st dl d du b
506 | ndl == nd - 1 && 506 | ndl == nd - 1 &&
507 ndu == nd - 1 && 507 ndu == nd - 1 &&
508 nd == r = unsafePerformIO . g $ do 508 nd == r = unsafePerformIO . g $ do
509 dl' <- head . toRows <$> copy ColumnMajor (fromRows [dl])
510 du' <- head . toRows <$> copy ColumnMajor (fromRows [du])
509 s <- copy ColumnMajor b 511 s <- copy ColumnMajor b
510 (dl # d # du #! s) f #| st 512 (dl' # d # du' #! s) f #| st
511 return s 513 return s
512 | otherwise = error $ st ++ " of nonsquare matrix" 514 | otherwise = error $ st ++ " of nonsquare matrix"
513 where 515 where
diff --git a/packages/tests/src/Numeric/LinearAlgebra/Tests.hs b/packages/tests/src/Numeric/LinearAlgebra/Tests.hs
index c0c151a..3c7863f 100644
--- a/packages/tests/src/Numeric/LinearAlgebra/Tests.hs
+++ b/packages/tests/src/Numeric/LinearAlgebra/Tests.hs
@@ -242,6 +242,29 @@ triDiagTest = utest "triDiagTest" (ok1 && ok2) where
242 242
243--------------------------------------------------------------------- 243---------------------------------------------------------------------
244 244
245triDiagRegression = utest "triDiagRegression" ok where
246 minusOnes, twos :: Vector R
247 minusOnes = fromList [-1, -1]
248 twos = fromList [2, 2, 2]
249 k :: Matrix R
250 k = (3><3)
251 [ 2, -1, 0
252 , -1, 2, -1
253 , 0, -1, 2
254 ]
255
256 b :: Matrix R
257 b = (3><1) [10, 10, 10]
258
259 tridiag = triDiagSolve minusOnes twos minusOnes b
260 simple = linearSolve k b
261
262 ok = case simple of
263 Just m -> tridiag |~| m
264 Nothing -> False
265
266---------------------------------------------------------------------
267
245randomTestGaussian = (unSym c) :~3~: unSym (snd (meanCov dat)) 268randomTestGaussian = (unSym c) :~3~: unSym (snd (meanCov dat))
246 where 269 where
247 a = (3><3) [1,2,3, 270 a = (3><3) [1,2,3,
@@ -830,6 +853,7 @@ runTests n = do
830 , mbCholTest 853 , mbCholTest
831 , triTest 854 , triTest
832 , triDiagTest 855 , triDiagTest
856 , triDiagRegression
833 , utest "offset" offsetTest 857 , utest "offset" offsetTest
834 , normsVTest 858 , normsVTest
835 , normsMTest 859 , normsMTest