diff options
Diffstat (limited to 'lib/Numeric')
-rw-r--r-- | lib/Numeric/GSL/Differentiation.hs | 2 | ||||
-rw-r--r-- | lib/Numeric/GSL/Matrix.hs | 24 | ||||
-rw-r--r-- | lib/Numeric/GSL/Minimization.hs | 27 | ||||
-rw-r--r-- | lib/Numeric/GSL/Special.hs | 2 | ||||
-rw-r--r-- | lib/Numeric/LinearAlgebra.hs | 2 | ||||
-rw-r--r-- | lib/Numeric/LinearAlgebra/Algorithms.hs | 29 | ||||
-rw-r--r-- | lib/Numeric/LinearAlgebra/LAPACK.hs | 3 | ||||
-rw-r--r-- | lib/Numeric/LinearAlgebra/Linear.hs | 2 |
8 files changed, 45 insertions, 46 deletions
diff --git a/lib/Numeric/GSL/Differentiation.hs b/lib/Numeric/GSL/Differentiation.hs index 09236bd..071704a 100644 --- a/lib/Numeric/GSL/Differentiation.hs +++ b/lib/Numeric/GSL/Differentiation.hs | |||
@@ -34,7 +34,7 @@ derivGen :: | |||
34 | derivGen c h f x = unsafePerformIO $ do | 34 | derivGen c h f x = unsafePerformIO $ do |
35 | r <- malloc | 35 | r <- malloc |
36 | e <- malloc | 36 | e <- malloc |
37 | fp <- mkfun (\x _ -> f x) | 37 | fp <- mkfun (\y _ -> f y) |
38 | c_deriv c fp x h r e // check "deriv" | 38 | c_deriv c fp x h r e // check "deriv" |
39 | vr <- peek r | 39 | vr <- peek r |
40 | ve <- peek e | 40 | ve <- peek e |
diff --git a/lib/Numeric/GSL/Matrix.hs b/lib/Numeric/GSL/Matrix.hs index 07d4660..d51728e 100644 --- a/lib/Numeric/GSL/Matrix.hs +++ b/lib/Numeric/GSL/Matrix.hs | |||
@@ -17,13 +17,13 @@ module Numeric.GSL.Matrix( | |||
17 | eigSg, eigHg, | 17 | eigSg, eigHg, |
18 | svdg, | 18 | svdg, |
19 | qr, qrPacked, unpackQR, | 19 | qr, qrPacked, unpackQR, |
20 | cholR, -- cholC, | 20 | cholR, cholC, |
21 | luSolveR, luSolveC, | 21 | luSolveR, luSolveC, |
22 | luR, luC | 22 | luR, luC |
23 | ) where | 23 | ) where |
24 | 24 | ||
25 | import Data.Packed.Internal | 25 | import Data.Packed.Internal |
26 | import Data.Packed.Matrix(fromLists,ident,takeDiag) | 26 | import Data.Packed.Matrix(ident) |
27 | import Numeric.GSL.Vector | 27 | import Numeric.GSL.Vector |
28 | import Foreign | 28 | import Foreign |
29 | import Complex | 29 | import Complex |
@@ -44,7 +44,7 @@ import Complex | |||
44 | 44 | ||
45 | -} | 45 | -} |
46 | eigSg :: Matrix Double -> (Vector Double, Matrix Double) | 46 | eigSg :: Matrix Double -> (Vector Double, Matrix Double) |
47 | eigSg = eigSg . cmat | 47 | eigSg = eigSg' . cmat |
48 | 48 | ||
49 | eigSg' m | 49 | eigSg' m |
50 | | r == 1 = (fromList [cdat m `at` 0], singleton 1) | 50 | | r == 1 = (fromList [cdat m `at` 0], singleton 1) |
@@ -159,24 +159,24 @@ qrPacked :: Matrix Double -> (Matrix Double, Vector Double) | |||
159 | qrPacked = qrPacked' . cmat | 159 | qrPacked = qrPacked' . cmat |
160 | 160 | ||
161 | qrPacked' x = unsafePerformIO $ do | 161 | qrPacked' x = unsafePerformIO $ do |
162 | qr <- createMatrix RowMajor r c | 162 | qrp <- createMatrix RowMajor r c |
163 | tau <- createVector (min r c) | 163 | tau <- createVector (min r c) |
164 | app3 c_qrPacked mat x mat qr vec tau "qrUnpacked" | 164 | app3 c_qrPacked mat x mat qrp vec tau "qrUnpacked" |
165 | return (qr,tau) | 165 | return (qrp,tau) |
166 | where r = rows x | 166 | where r = rows x |
167 | c = cols x | 167 | c = cols x |
168 | foreign import ccall "gsl-aux.h QRpacked" c_qrPacked :: TMMV | 168 | foreign import ccall "gsl-aux.h QRpacked" c_qrPacked :: TMMV |
169 | 169 | ||
170 | unpackQR :: (Matrix Double, Vector Double) -> (Matrix Double, Matrix Double) | 170 | unpackQR :: (Matrix Double, Vector Double) -> (Matrix Double, Matrix Double) |
171 | unpackQR (qr,tau) = unpackQR' (cmat qr, tau) | 171 | unpackQR (qrp,tau) = unpackQR' (cmat qrp, tau) |
172 | 172 | ||
173 | unpackQR' (qr,tau) = unsafePerformIO $ do | 173 | unpackQR' (qrp,tau) = unsafePerformIO $ do |
174 | q <- createMatrix RowMajor r r | 174 | q <- createMatrix RowMajor r r |
175 | res <- createMatrix RowMajor r c | 175 | res <- createMatrix RowMajor r c |
176 | app4 c_qrUnpack mat qr vec tau mat q mat res "qrUnpack" | 176 | app4 c_qrUnpack mat qrp vec tau mat q mat res "qrUnpack" |
177 | return (q,res) | 177 | return (q,res) |
178 | where r = rows qr | 178 | where r = rows qrp |
179 | c = cols qr | 179 | c = cols qrp |
180 | foreign import ccall "gsl-aux.h QRunpack" c_qrUnpack :: TMVMM | 180 | foreign import ccall "gsl-aux.h QRunpack" c_qrUnpack :: TMVMM |
181 | 181 | ||
182 | 182 | ||
@@ -259,7 +259,6 @@ luRaux' x = unsafePerformIO $ do | |||
259 | app2 c_luRaux mat x vec res "luRaux" | 259 | app2 c_luRaux mat x vec res "luRaux" |
260 | return res | 260 | return res |
261 | where r = rows x | 261 | where r = rows x |
262 | c = cols x | ||
263 | foreign import ccall "gsl-aux.h luRaux" c_luRaux :: TMV | 262 | foreign import ccall "gsl-aux.h luRaux" c_luRaux :: TMV |
264 | 263 | ||
265 | {- | lu decomposition of complex matrix (packed as a vector including l, u, the permutation and sign) | 264 | {- | lu decomposition of complex matrix (packed as a vector including l, u, the permutation and sign) |
@@ -272,7 +271,6 @@ luCaux' x = unsafePerformIO $ do | |||
272 | app2 c_luCaux mat x vec res "luCaux" | 271 | app2 c_luCaux mat x vec res "luCaux" |
273 | return res | 272 | return res |
274 | where r = rows x | 273 | where r = rows x |
275 | c = cols x | ||
276 | foreign import ccall "gsl-aux.h luCaux" c_luCaux :: TCMCV | 274 | foreign import ccall "gsl-aux.h luCaux" c_luCaux :: TCMCV |
277 | 275 | ||
278 | {- | The LU decomposition of a square matrix. Is based on /gsl_linalg_LU_decomp/ and /gsl_linalg_complex_LU_decomp/ as described in <http://www.gnu.org/software/Numeric.GSL/manual/Numeric.GSL-ref_13.html#SEC223>. | 276 | {- | The LU decomposition of a square matrix. Is based on /gsl_linalg_LU_decomp/ and /gsl_linalg_complex_LU_decomp/ as described in <http://www.gnu.org/software/Numeric.GSL/manual/Numeric.GSL-ref_13.html#SEC223>. |
diff --git a/lib/Numeric/GSL/Minimization.hs b/lib/Numeric/GSL/Minimization.hs index 235a88f..98c0ca9 100644 --- a/lib/Numeric/GSL/Minimization.hs +++ b/lib/Numeric/GSL/Minimization.hs | |||
@@ -24,7 +24,6 @@ module Numeric.GSL.Minimization ( | |||
24 | import Data.Packed.Internal | 24 | import Data.Packed.Internal |
25 | import Data.Packed.Matrix | 25 | import Data.Packed.Matrix |
26 | import Foreign | 26 | import Foreign |
27 | import Complex | ||
28 | 27 | ||
29 | ------------------------------------------------------------------------- | 28 | ------------------------------------------------------------------------- |
30 | 29 | ||
@@ -84,9 +83,9 @@ minimizeNMSimplex f xi sz tol maxit = unsafePerformIO $ do | |||
84 | szv = fromList sz | 83 | szv = fromList sz |
85 | n = dim xiv | 84 | n = dim xiv |
86 | fp <- mkVecfun (iv (f.toList)) | 85 | fp <- mkVecfun (iv (f.toList)) |
87 | rawpath <- ww2 withVector xiv withVector szv $ \xiv szv -> | 86 | rawpath <- ww2 withVector xiv withVector szv $ \xiv' szv' -> |
88 | createMIO maxit (n+3) | 87 | createMIO maxit (n+3) |
89 | (c_minimizeNMSimplex fp tol maxit // xiv // szv) | 88 | (c_minimizeNMSimplex fp tol maxit // xiv' // szv') |
90 | "minimizeNMSimplex" | 89 | "minimizeNMSimplex" |
91 | let it = round (rawpath @@> (maxit-1,0)) | 90 | let it = round (rawpath @@> (maxit-1,0)) |
92 | path = takeRows it rawpath | 91 | path = takeRows it rawpath |
@@ -150,9 +149,9 @@ minimizeConjugateGradient istep minimpar tol maxit f df xi = unsafePerformIO $ d | |||
150 | df' = (fromList . df . toList) | 149 | df' = (fromList . df . toList) |
151 | fp <- mkVecfun (iv f') | 150 | fp <- mkVecfun (iv f') |
152 | dfp <- mkVecVecfun (aux_vTov df') | 151 | dfp <- mkVecVecfun (aux_vTov df') |
153 | rawpath <- withVector xiv $ \xiv -> | 152 | rawpath <- withVector xiv $ \xiv' -> |
154 | createMIO maxit (n+2) | 153 | createMIO maxit (n+2) |
155 | (c_minimizeConjugateGradient fp dfp istep minimpar tol maxit // xiv) | 154 | (c_minimizeConjugateGradient fp dfp istep minimpar tol maxit // xiv') |
156 | "minimizeDerivV" | 155 | "minimizeDerivV" |
157 | let it = round (rawpath @@> (maxit-1,0)) | 156 | let it = round (rawpath @@> (maxit-1,0)) |
158 | path = takeRows it rawpath | 157 | path = takeRows it rawpath |
@@ -171,8 +170,8 @@ foreign import ccall "gsl-aux.h minimizeWithDeriv" | |||
171 | --------------------------------------------------------------------- | 170 | --------------------------------------------------------------------- |
172 | iv :: (Vector Double -> Double) -> (Int -> Ptr Double -> Double) | 171 | iv :: (Vector Double -> Double) -> (Int -> Ptr Double -> Double) |
173 | iv f n p = f (createV n copy "iv") where | 172 | iv f n p = f (createV n copy "iv") where |
174 | copy n q = do | 173 | copy n' q = do |
175 | copyArray q p n | 174 | copyArray q p n' |
176 | return 0 | 175 | return 0 |
177 | 176 | ||
178 | -- | conversion of Haskell functions into function pointers that can be used in the C side | 177 | -- | conversion of Haskell functions into function pointers that can be used in the C side |
@@ -187,12 +186,12 @@ foreign import ccall "wrapper" | |||
187 | 186 | ||
188 | aux_vTov :: (Vector Double -> Vector Double) -> (Int -> Ptr Double -> Ptr Double -> IO()) | 187 | aux_vTov :: (Vector Double -> Vector Double) -> (Int -> Ptr Double -> Ptr Double -> IO()) |
189 | aux_vTov f n p r = g where | 188 | aux_vTov f n p r = g where |
190 | v@V {fptr = pr} = f x | 189 | V {fptr = pr} = f x |
191 | x = createV n copy "aux_vTov" | 190 | x = createV n copy "aux_vTov" |
192 | copy n q = do | 191 | copy n' q = do |
193 | copyArray q p n | 192 | copyArray q p n' |
194 | return 0 | 193 | return 0 |
195 | g = withForeignPtr pr $ \p -> copyArray r p n | 194 | g = withForeignPtr pr $ \p' -> copyArray r p' n |
196 | 195 | ||
197 | -------------------------------------------------------------------- | 196 | -------------------------------------------------------------------- |
198 | 197 | ||
@@ -202,6 +201,6 @@ createV n fun msg = unsafePerformIO $ do | |||
202 | return r | 201 | return r |
203 | 202 | ||
204 | createMIO r c fun msg = do | 203 | createMIO r c fun msg = do |
205 | r <- createMatrix RowMajor r c | 204 | res <- createMatrix RowMajor r c |
206 | app1 fun mat r msg | 205 | app1 fun mat res msg |
207 | return r | 206 | return res |
diff --git a/lib/Numeric/GSL/Special.hs b/lib/Numeric/GSL/Special.hs index b6cea2b..3fd2ac2 100644 --- a/lib/Numeric/GSL/Special.hs +++ b/lib/Numeric/GSL/Special.hs | |||
@@ -44,8 +44,6 @@ module Numeric.GSL.Special ( | |||
44 | ) | 44 | ) |
45 | where | 45 | where |
46 | 46 | ||
47 | import Foreign | ||
48 | import Numeric.GSL.Special.Internal | ||
49 | import Numeric.GSL.Special.Airy | 47 | import Numeric.GSL.Special.Airy |
50 | import Numeric.GSL.Special.Bessel | 48 | import Numeric.GSL.Special.Bessel |
51 | import Numeric.GSL.Special.Clausen | 49 | import Numeric.GSL.Special.Clausen |
diff --git a/lib/Numeric/LinearAlgebra.hs b/lib/Numeric/LinearAlgebra.hs index f3190a2..c14d4e4 100644 --- a/lib/Numeric/LinearAlgebra.hs +++ b/lib/Numeric/LinearAlgebra.hs | |||
@@ -23,5 +23,5 @@ module Numeric.LinearAlgebra ( | |||
23 | import Data.Packed | 23 | import Data.Packed |
24 | import Numeric.LinearAlgebra.Linear | 24 | import Numeric.LinearAlgebra.Linear |
25 | import Numeric.LinearAlgebra.Algorithms | 25 | import Numeric.LinearAlgebra.Algorithms |
26 | import Numeric.LinearAlgebra.Instances | 26 | import Numeric.LinearAlgebra.Instances() |
27 | import Numeric.LinearAlgebra.Interface | 27 | import Numeric.LinearAlgebra.Interface |
diff --git a/lib/Numeric/LinearAlgebra/Algorithms.hs b/lib/Numeric/LinearAlgebra/Algorithms.hs index fd16973..069d9a3 100644 --- a/lib/Numeric/LinearAlgebra/Algorithms.hs +++ b/lib/Numeric/LinearAlgebra/Algorithms.hs | |||
@@ -165,8 +165,8 @@ pinv m = linearSolveSVD m (ident (rows m)) | |||
165 | -- If @(u,d,v) = full svd m@ then @m == u \<> d \<> trans v@. | 165 | -- If @(u,d,v) = full svd m@ then @m == u \<> d \<> trans v@. |
166 | full :: Element t | 166 | full :: Element t |
167 | => (Matrix t -> (Matrix t, Vector Double, Matrix t)) -> Matrix t -> (Matrix t, Matrix Double, Matrix t) | 167 | => (Matrix t -> (Matrix t, Vector Double, Matrix t)) -> Matrix t -> (Matrix t, Matrix Double, Matrix t) |
168 | full svd m = (u, d ,v) where | 168 | full svd' m = (u, d ,v) where |
169 | (u,s,v) = svd m | 169 | (u,s,v) = svd' m |
170 | d = diagRect s r c | 170 | d = diagRect s r c |
171 | r = rows m | 171 | r = rows m |
172 | c = cols m | 172 | c = cols m |
@@ -176,12 +176,12 @@ full svd m = (u, d ,v) where | |||
176 | -- If @(u,s,v) = economy svd m@ then @m == u \<> diag s \<> trans v@. | 176 | -- If @(u,s,v) = economy svd m@ then @m == u \<> diag s \<> trans v@. |
177 | economy :: Element t | 177 | economy :: Element t |
178 | => (Matrix t -> (Matrix t, Vector Double, Matrix t)) -> Matrix t -> (Matrix t, Vector Double, Matrix t) | 178 | => (Matrix t -> (Matrix t, Vector Double, Matrix t)) -> Matrix t -> (Matrix t, Vector Double, Matrix t) |
179 | economy svd m = (u', subVector 0 d s, v') where | 179 | economy svd' m = (u', subVector 0 d s, v') where |
180 | (u,s,v) = svd m | 180 | (u,s,v) = svd' m |
181 | sl@(g:_) = toList s | 181 | sl@(g:_) = toList s |
182 | s' = fromList . filter (>tol) $ sl | 182 | s' = fromList . filter (>tol) $ sl |
183 | t = 1 | 183 | t = 1 |
184 | tol = (fromIntegral (max (rows m) (cols m)) * g * t * eps) | 184 | tol = (fromIntegral (max r c) * g * t * eps) |
185 | r = rows m | 185 | r = rows m |
186 | c = cols m | 186 | c = cols m |
187 | d = dim s' | 187 | d = dim s' |
@@ -273,8 +273,8 @@ nullspacePrec t m = ns where | |||
273 | (_,s,v) = svd m | 273 | (_,s,v) = svd m |
274 | sl@(g:_) = toList s | 274 | sl@(g:_) = toList s |
275 | tol = (fromIntegral (max (rows m) (cols m)) * g * t * eps) | 275 | tol = (fromIntegral (max (rows m) (cols m)) * g * t * eps) |
276 | rank = length (filter (> g*tol) sl) | 276 | rank' = length (filter (> g*tol) sl) |
277 | ns = drop rank $ toRows $ ctrans v | 277 | ns = drop rank' $ toRows $ ctrans v |
278 | 278 | ||
279 | -- | The nullspace of a matrix, assumed to be one-dimensional, with default tolerance (shortcut for @last . nullspacePrec 1@). | 279 | -- | The nullspace of a matrix, assumed to be one-dimensional, with default tolerance (shortcut for @last . nullspacePrec 1@). |
280 | nullVector :: Field t => Matrix t -> Vector t | 280 | nullVector :: Field t => Matrix t -> Vector t |
@@ -306,7 +306,7 @@ pinvTol t m = v' `mXm` diag s' `mXm` trans u' where | |||
306 | sl@(g:_) = toList s | 306 | sl@(g:_) = toList s |
307 | s' = fromList . map rec $ sl | 307 | s' = fromList . map rec $ sl |
308 | rec x = if x < g*tol then 1 else 1/x | 308 | rec x = if x < g*tol then 1 else 1/x |
309 | tol = (fromIntegral (max (rows m) (cols m)) * g * t * eps) | 309 | tol = (fromIntegral (max r c) * g * t * eps) |
310 | r = rows m | 310 | r = rows m |
311 | c = cols m | 311 | c = cols m |
312 | d = dim s | 312 | d = dim s |
@@ -368,10 +368,12 @@ rank :: Field t => Matrix t -> Int | |||
368 | rank m | pnorm PNorm1 m < eps = 0 | 368 | rank m | pnorm PNorm1 m < eps = 0 |
369 | | otherwise = dim s where (_,s,_) = economy svd m | 369 | | otherwise = dim s where (_,s,_) = economy svd m |
370 | 370 | ||
371 | {- | ||
371 | expm' m = case diagonalize (complex m) of | 372 | expm' m = case diagonalize (complex m) of |
372 | Just (l,v) -> v `mXm` diag (exp l) `mXm` inv v | 373 | Just (l,v) -> v `mXm` diag (exp l) `mXm` inv v |
373 | Nothing -> error "Sorry, expm not yet implemented for non-diagonalizable matrices" | 374 | Nothing -> error "Sorry, expm not yet implemented for non-diagonalizable matrices" |
374 | where exp = vectorMapC Exp | 375 | where exp = vectorMapC Exp |
376 | -} | ||
375 | 377 | ||
376 | diagonalize m = if rank v == n | 378 | diagonalize m = if rank v == n |
377 | then Just (l,v) | 379 | then Just (l,v) |
@@ -406,7 +408,7 @@ geps delta = head [ k | (k,g) <- epslist, g<delta] | |||
406 | expGolub m = iterate msq f !! j | 408 | expGolub m = iterate msq f !! j |
407 | where j = max 0 $ floor $ log2 $ pnorm Infinity m | 409 | where j = max 0 $ floor $ log2 $ pnorm Infinity m |
408 | log2 x = log x / log 2 | 410 | log2 x = log x / log 2 |
409 | a = m */ fromIntegral (2^j) | 411 | a = m */ fromIntegral ((2::Int)^j) |
410 | q = geps eps -- 7 steps | 412 | q = geps eps -- 7 steps |
411 | eye = ident (rows m) | 413 | eye = ident (rows m) |
412 | work (k,c,x,n,d) = (k',c',x',n',d') | 414 | work (k,c,x,n,d) = (k',c',x',n',d') |
@@ -415,9 +417,9 @@ expGolub m = iterate msq f !! j | |||
415 | x' = a <> x | 417 | x' = a <> x |
416 | n' = n |+| (c' .* x') | 418 | n' = n |+| (c' .* x') |
417 | d' = d |+| (((-1)^k * c') .* x') | 419 | d' = d |+| (((-1)^k * c') .* x') |
418 | (_,_,_,n,d) = iterate work (1,1,eye,eye,eye) !! q | 420 | (_,_,_,nf,df) = iterate work (1,1,eye,eye,eye) !! q |
419 | f = linearSolve d n | 421 | f = linearSolve df nf |
420 | msq m = m <> m | 422 | msq x = x <> x |
421 | 423 | ||
422 | (<>) = multiply | 424 | (<>) = multiply |
423 | v */ x = scale (recip x) v | 425 | v */ x = scale (recip x) v |
@@ -446,9 +448,10 @@ It only works with invertible matrices that have a real solution. For diagonaliz | |||
446 | sqrtm :: Field t => Matrix t -> Matrix t | 448 | sqrtm :: Field t => Matrix t -> Matrix t |
447 | sqrtm = sqrtmInv | 449 | sqrtm = sqrtmInv |
448 | 450 | ||
449 | sqrtmInv a = fst $ fixedPoint $ iterate f (a, ident (rows a)) | 451 | sqrtmInv x = fst $ fixedPoint $ iterate f (x, ident (rows x)) |
450 | where fixedPoint (a:b:rest) | pnorm PNorm1 (fst a |-| fst b) < eps = a | 452 | where fixedPoint (a:b:rest) | pnorm PNorm1 (fst a |-| fst b) < eps = a |
451 | | otherwise = fixedPoint (b:rest) | 453 | | otherwise = fixedPoint (b:rest) |
454 | fixedPoint _ = error "fixedpoint with impossible inputs" | ||
452 | f (y,z) = (0.5 .* (y |+| inv z), | 455 | f (y,z) = (0.5 .* (y |+| inv z), |
453 | 0.5 .* (inv y |+| z)) | 456 | 0.5 .* (inv y |+| z)) |
454 | (.*) = scale | 457 | (.*) = scale |
diff --git a/lib/Numeric/LinearAlgebra/LAPACK.hs b/lib/Numeric/LinearAlgebra/LAPACK.hs index 936cb19..cacad87 100644 --- a/lib/Numeric/LinearAlgebra/LAPACK.hs +++ b/lib/Numeric/LinearAlgebra/LAPACK.hs | |||
@@ -120,11 +120,12 @@ eigRaux m | |||
120 | where r = rows m | 120 | where r = rows m |
121 | 121 | ||
122 | fixeig [] _ = [] | 122 | fixeig [] _ = [] |
123 | fixeig [r] [v] = [comp v] | 123 | fixeig [_] [v] = [comp v] |
124 | fixeig ((r1:+i1):(r2:+i2):r) (v1:v2:vs) | 124 | fixeig ((r1:+i1):(r2:+i2):r) (v1:v2:vs) |
125 | | r1 == r2 && i1 == (-i2) = toComplex (v1,v2) : toComplex (v1,scale (-1) v2) : fixeig r vs | 125 | | r1 == r2 && i1 == (-i2) = toComplex (v1,v2) : toComplex (v1,scale (-1) v2) : fixeig r vs |
126 | | otherwise = comp v1 : fixeig ((r2:+i2):r) (v2:vs) | 126 | | otherwise = comp v1 : fixeig ((r2:+i2):r) (v2:vs) |
127 | where scale = vectorMapValR Scale | 127 | where scale = vectorMapValR Scale |
128 | fixeig _ _ = error "fixeig with impossible inputs" | ||
128 | 129 | ||
129 | ----------------------------------------------------------------------------- | 130 | ----------------------------------------------------------------------------- |
130 | 131 | ||
diff --git a/lib/Numeric/LinearAlgebra/Linear.hs b/lib/Numeric/LinearAlgebra/Linear.hs index 3403591..a39df50 100644 --- a/lib/Numeric/LinearAlgebra/Linear.hs +++ b/lib/Numeric/LinearAlgebra/Linear.hs | |||
@@ -20,7 +20,7 @@ module Numeric.LinearAlgebra.Linear ( | |||
20 | ) where | 20 | ) where |
21 | 21 | ||
22 | 22 | ||
23 | import Data.Packed.Internal(multiply,at,partit) | 23 | import Data.Packed.Internal(multiply,partit) |
24 | import Data.Packed | 24 | import Data.Packed |
25 | import Numeric.GSL.Vector | 25 | import Numeric.GSL.Vector |
26 | import Complex | 26 | import Complex |