Numeric.GSL.Matrix
 Portability portable (uses FFI) Stability provisional Maintainer Alberto Ruiz
Description
A few linear algebra computations based on the Numeric.GSL (http://www.gnu.org/software/Numeric.GSL).
Synopsis
 eigSg :: Matrix Double -> (Vector Double, Matrix Double) eigHg :: Matrix (Complex Double) -> (Vector Double, Matrix (Complex Double)) svdg :: Matrix Double -> (Matrix Double, Vector Double, Matrix Double) qr :: Matrix Double -> (Matrix Double, Matrix Double) qrPacked :: Matrix Double -> (Matrix Double, Vector Double) unpackQR :: (Matrix Double, Vector Double) -> (Matrix Double, Matrix Double) cholR :: Matrix Double -> Matrix Double cholC :: Matrix (Complex Double) -> Matrix (Complex Double) luSolveR :: Matrix Double -> Matrix Double -> Matrix Double luSolveC :: Matrix (Complex Double) -> Matrix (Complex Double) -> Matrix (Complex Double) luR :: Matrix Double -> (Matrix Double, Matrix Double, [Int], Double) luC :: Matrix (Complex Double) -> (Matrix (Complex Double), Matrix (Complex Double), [Int], Complex Double)
Documentation
 eigSg :: Matrix Double -> (Vector Double, Matrix Double) Source

eigendecomposition of a real symmetric matrix using gsl_eigen_symmv.

``` > let (l,v) = eigS \$ 'fromLists' [[1,2],[2,1]]
> l
3.000 -1.000

> v
0.707 -0.707
0.707  0.707

> v <> diag l <> trans v
1.000 2.000
2.000 1.000
```
 eigHg :: Matrix (Complex Double) -> (Vector Double, Matrix (Complex Double)) Source

eigendecomposition of a complex hermitian matrix using gsl_eigen_hermv

``` > let (l,v) = eigH \$ 'fromLists' [[1,2+i],[2-i,3]]

> l
4.449 -0.449

> v
-0.544          0.839
(-0.751,0.375) (-0.487,0.243)

> v <> diag l <> (conjTrans) v
1.000 (2.000,1.000)
(2.000,-1.000)         3.000
```
 svdg :: Matrix Double -> (Matrix Double, Vector Double, Matrix Double) Source

Singular value decomposition of a real matrix, using gsl_linalg_SV_decomp_mod:

```> let (u,s,v) = svdg \$ fromLists [[1,2,3],[-4,1,7]]
\
> u
0.310 -0.951
0.951  0.310
\
> s
8.497 2.792
\
> v
-0.411 -0.785
0.185 -0.570
0.893 -0.243
\
> u <> diag s <> trans v
1. 2. 3.
-4. 1. 7.```
 qr :: Matrix Double -> (Matrix Double, Matrix Double) Source

QR decomposition of a real matrix using gsl_linalg_QR_decomp and gsl_linalg_QR_unpack.

```> let (q,r) = qr \$ fromLists [[1,3,5,7],[2,0,-2,4]]
\
> q
-0.447 -0.894
-0.894  0.447
\
> r
-2.236 -1.342 -0.447 -6.708
0. -2.683 -5.367 -4.472
\
> q <> r
1.000 3.000  5.000 7.000
2.000    0. -2.000 4.000```
 qrPacked :: Matrix Double -> (Matrix Double, Vector Double) Source
 unpackQR :: (Matrix Double, Vector Double) -> (Matrix Double, Matrix Double) Source
 cholR :: Matrix Double -> Matrix Double Source

Cholesky decomposition of a symmetric positive definite real matrix using gsl_linalg_cholesky_decomp.

```> chol \$ (2><2) [1,2,
2,9::Double]
(2><2)
[ 1.0,              0.0
, 2.0, 2.23606797749979 ]```
 cholC :: Matrix (Complex Double) -> Matrix (Complex Double) Source
 luSolveR :: Matrix Double -> Matrix Double -> Matrix Double Source
 luSolveC :: Matrix (Complex Double) -> Matrix (Complex Double) -> Matrix (Complex Double) Source
 luR :: Matrix Double -> (Matrix Double, Matrix Double, [Int], Double) Source

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.

```> let m = fromLists [[1,2,-3],[2+3*i,-7,0],[1,-i,2*i]]
> let (l,u,p,s) = luR m```

L is the lower triangular:

```> l
1.            0.  0.
0.154-0.231i            1.  0.
0.154-0.231i  0.624-0.522i  1.```

U is the upper triangular:

```> u
2.+3.i           -7.            0.
0.  3.077-1.615i           -3.
0.            0.  1.873+0.433i```

p is a permutation:

```> p
[1,0,2]```

L * U obtains a permuted version of the original matrix:

```> extractRows p m
2.+3.i   -7.   0.
1.    2.  -3.
1.  -1.i  2.i

> l <> u
2.+3.i   -7.   0.
1.    2.  -3.
1.  -1.i  2.i```

s is the sign of the permutation, required to obtain sign of the determinant:

```> s * product (toList \$ takeDiag u)
(-18.0) :+ (-16.000000000000004)
> LinearAlgebra.Algorithms.det m
(-18.0) :+ (-16.000000000000004)```
 luC :: Matrix (Complex Double) -> (Matrix (Complex Double), Matrix (Complex Double), [Int], Complex Double) Source
Complex version of luR.