diff options
Diffstat (limited to 'packages/base')
-rw-r--r-- | packages/base/CHANGELOG | 12 | ||||
-rw-r--r-- | packages/base/hmatrix.cabal | 6 | ||||
-rw-r--r-- | packages/base/src/Internal/Algorithms.hs | 6 | ||||
-rw-r--r-- | packages/base/src/Internal/Container.hs | 2 | ||||
-rw-r--r-- | packages/base/src/Internal/Element.hs | 4 | ||||
-rw-r--r-- | packages/base/src/Internal/Vector.hs | 2 | ||||
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra.hs | 13 | ||||
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra/Data.hs | 21 | ||||
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra/HMatrix.hs | 6 | ||||
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra/Static.hs | 4 |
10 files changed, 51 insertions, 25 deletions
diff --git a/packages/base/CHANGELOG b/packages/base/CHANGELOG index c3e118c..0336a28 100644 --- a/packages/base/CHANGELOG +++ b/packages/base/CHANGELOG | |||
@@ -1,21 +1,25 @@ | |||
1 | 0.17.0.0 | 1 | 0.17.0.0 |
2 | -------- | 2 | -------- |
3 | 3 | ||
4 | * improved matrix extraction using vectors of indexes (??) | 4 | * improved matrix extraction (??) and rectangular matrix slices without data copy |
5 | 5 | ||
6 | * basic support of Int32 and Int64 elements | 6 | * basic support of Int32 and Int64 elements |
7 | 7 | ||
8 | * remap, more general cond | 8 | * remap, more general cond, sortIndex |
9 | 9 | ||
10 | * experimental support of type safe modular arithmetic, including linear | 10 | * experimental support of type safe modular arithmetic, including linear |
11 | systems and lu factorization | 11 | systems and lu factorization |
12 | 12 | ||
13 | * elementary row operations in ST monad | 13 | * elementary row operations and inplace matrix slice products in the ST monad |
14 | 14 | ||
15 | * old compatibility modules removed | 15 | * Improved development tools. |
16 | |||
17 | * old compatibility modules removed, simpler organization of internal modules | ||
16 | 18 | ||
17 | * unitary, pairwiseD2, tr' | 19 | * unitary, pairwiseD2, tr' |
18 | 20 | ||
21 | * ldlPacked, ldlSolve | ||
22 | |||
19 | 0.16.1.0 | 23 | 0.16.1.0 |
20 | -------- | 24 | -------- |
21 | 25 | ||
diff --git a/packages/base/hmatrix.cabal b/packages/base/hmatrix.cabal index f725341..7b25349 100644 --- a/packages/base/hmatrix.cabal +++ b/packages/base/hmatrix.cabal | |||
@@ -7,7 +7,11 @@ Maintainer: Alberto Ruiz | |||
7 | Stability: provisional | 7 | Stability: provisional |
8 | Homepage: https://github.com/albertoruiz/hmatrix | 8 | Homepage: https://github.com/albertoruiz/hmatrix |
9 | Synopsis: Numeric Linear Algebra | 9 | Synopsis: Numeric Linear Algebra |
10 | Description: Linear algebra based on BLAS and LAPACK. | 10 | Description: Linear systems, matrix decompositions, and other numerical computations based on BLAS and LAPACK. |
11 | . | ||
12 | The standard interface is provided by the module "Numeric.LinearAlgebra". | ||
13 | . | ||
14 | A safer interface with statically checked dimensions is provided by "Numeric.LinearAlgebra.Static". | ||
11 | . | 15 | . |
12 | Code examples: <http://dis.um.es/~alberto/hmatrix/hmatrix.html> | 16 | Code examples: <http://dis.um.es/~alberto/hmatrix/hmatrix.html> |
13 | 17 | ||
diff --git a/packages/base/src/Internal/Algorithms.hs b/packages/base/src/Internal/Algorithms.hs index c8b2d3e..99c90aa 100644 --- a/packages/base/src/Internal/Algorithms.hs +++ b/packages/base/src/Internal/Algorithms.hs | |||
@@ -470,14 +470,14 @@ rq m = {-# SCC "rq" #-} (r,q) where | |||
470 | 470 | ||
471 | -- | Hessenberg factorization. | 471 | -- | Hessenberg factorization. |
472 | -- | 472 | -- |
473 | -- If @(p,h) = hess m@ then @m == p \<> h \<> ctrans p@, where p is unitary | 473 | -- If @(p,h) = hess m@ then @m == p \<> h \<> tr p@, where p is unitary |
474 | -- and h is in upper Hessenberg form (it has zero entries below the first subdiagonal). | 474 | -- and h is in upper Hessenberg form (it has zero entries below the first subdiagonal). |
475 | hess :: Field t => Matrix t -> (Matrix t, Matrix t) | 475 | hess :: Field t => Matrix t -> (Matrix t, Matrix t) |
476 | hess = hess' | 476 | hess = hess' |
477 | 477 | ||
478 | -- | Schur factorization. | 478 | -- | Schur factorization. |
479 | -- | 479 | -- |
480 | -- If @(u,s) = schur m@ then @m == u \<> s \<> ctrans u@, where u is unitary | 480 | -- If @(u,s) = schur m@ then @m == u \<> s \<> tr u@, where u is unitary |
481 | -- and s is a Shur matrix. A complex Schur matrix is upper triangular. A real Schur matrix is | 481 | -- and s is a Shur matrix. A complex Schur matrix is upper triangular. A real Schur matrix is |
482 | -- upper triangular in 2x2 blocks. | 482 | -- upper triangular in 2x2 blocks. |
483 | -- | 483 | -- |
@@ -497,7 +497,7 @@ cholSH = {-# SCC "cholSH" #-} cholSH' | |||
497 | 497 | ||
498 | -- | Cholesky factorization of a positive definite hermitian or symmetric matrix. | 498 | -- | Cholesky factorization of a positive definite hermitian or symmetric matrix. |
499 | -- | 499 | -- |
500 | -- If @c = chol m@ then @c@ is upper triangular and @m == ctrans c \<> c@. | 500 | -- If @c = chol m@ then @c@ is upper triangular and @m == tr c \<> c@. |
501 | chol :: Field t => Matrix t -> Matrix t | 501 | chol :: Field t => Matrix t -> Matrix t |
502 | chol m | exactHermitian m = cholSH m | 502 | chol m | exactHermitian m = cholSH m |
503 | | otherwise = error "chol requires positive definite complex hermitian or real symmetric matrix" | 503 | | otherwise = error "chol requires positive definite complex hermitian or real symmetric matrix" |
diff --git a/packages/base/src/Internal/Container.hs b/packages/base/src/Internal/Container.hs index 8926fac..307c6a8 100644 --- a/packages/base/src/Internal/Container.hs +++ b/packages/base/src/Internal/Container.hs | |||
@@ -72,7 +72,7 @@ infixr 8 <.> | |||
72 | 72 | ||
73 | 73 | ||
74 | 74 | ||
75 | {- | infix synonym for 'app' | 75 | {- | dense matrix-vector product |
76 | 76 | ||
77 | >>> let m = (2><3) [1..] | 77 | >>> let m = (2><3) [1..] |
78 | >>> m | 78 | >>> m |
diff --git a/packages/base/src/Internal/Element.hs b/packages/base/src/Internal/Element.hs index 6d86f3d..a459678 100644 --- a/packages/base/src/Internal/Element.hs +++ b/packages/base/src/Internal/Element.hs | |||
@@ -325,9 +325,9 @@ takeDiag m = fromList [flatten m @> (k*cols m+k) | k <- [0 .. min (rows m) (cols | |||
325 | 325 | ||
326 | ------------------------------------------------------------ | 326 | ------------------------------------------------------------ |
327 | 327 | ||
328 | {- | create a general matrix | 328 | {- | Create a matrix from a list of elements |
329 | 329 | ||
330 | >>> (2><3) [2, 4, 7+2*𝑖, -3, 11, 0] | 330 | >>> (2><3) [2, 4, 7+2*iC, -3, 11, 0] |
331 | (2><3) | 331 | (2><3) |
332 | [ 2.0 :+ 0.0, 4.0 :+ 0.0, 7.0 :+ 2.0 | 332 | [ 2.0 :+ 0.0, 4.0 :+ 0.0, 7.0 :+ 2.0 |
333 | , (-3.0) :+ (-0.0), 11.0 :+ 0.0, 0.0 :+ 0.0 ] | 333 | , (-3.0) :+ (-0.0), 11.0 :+ 0.0, 0.0 :+ 0.0 ] |
diff --git a/packages/base/src/Internal/Vector.hs b/packages/base/src/Internal/Vector.hs index 29b6797..de4e670 100644 --- a/packages/base/src/Internal/Vector.hs +++ b/packages/base/src/Internal/Vector.hs | |||
@@ -127,7 +127,7 @@ n |> l | |||
127 | l' = take n l | 127 | l' = take n l |
128 | 128 | ||
129 | 129 | ||
130 | -- | Create a vector of indexes, useful for matrix extraction using '??' | 130 | -- | Create a vector of indexes, useful for matrix extraction using '(??)' |
131 | idxs :: [Int] -> Vector I | 131 | idxs :: [Int] -> Vector I |
132 | idxs js = fromList (map fromIntegral js) :: Vector I | 132 | idxs js = fromList (map fromIntegral js) :: Vector I |
133 | 133 | ||
diff --git a/packages/base/src/Numeric/LinearAlgebra.hs b/packages/base/src/Numeric/LinearAlgebra.hs index dd4cc67..9cab635 100644 --- a/packages/base/src/Numeric/LinearAlgebra.hs +++ b/packages/base/src/Numeric/LinearAlgebra.hs | |||
@@ -8,11 +8,16 @@ License : BSD3 | |||
8 | Maintainer : Alberto Ruiz | 8 | Maintainer : Alberto Ruiz |
9 | Stability : provisional | 9 | Stability : provisional |
10 | 10 | ||
11 | |||
11 | -} | 12 | -} |
12 | ----------------------------------------------------------------------------- | 13 | ----------------------------------------------------------------------------- |
13 | module Numeric.LinearAlgebra ( | 14 | module Numeric.LinearAlgebra ( |
14 | 15 | ||
15 | -- * Basic types and data processing | 16 | -- * Basic Types and data manipulation |
17 | -- | This package works with 2D ('Matrix') and 1D ('Vector') | ||
18 | -- arrays of real ('R') or complex ('C') double precision numbers. | ||
19 | -- Single precision and machine integers are also supported for | ||
20 | -- basic arithmetic and data manipulation. | ||
16 | module Numeric.LinearAlgebra.Data, | 21 | module Numeric.LinearAlgebra.Data, |
17 | 22 | ||
18 | -- * Numeric classes | 23 | -- * Numeric classes |
@@ -51,9 +56,9 @@ module Numeric.LinearAlgebra ( | |||
51 | -- ** dot | 56 | -- ** dot |
52 | dot, (<.>), | 57 | dot, (<.>), |
53 | -- ** matrix-vector | 58 | -- ** matrix-vector |
54 | app, (#>), (<#), (!#>), | 59 | (#>), (<#), (!#>), |
55 | -- ** matrix-matrix | 60 | -- ** matrix-matrix |
56 | mul, (<>), | 61 | (<>), |
57 | -- | The matrix product is also implemented in the "Data.Monoid" instance, where | 62 | -- | The matrix product is also implemented in the "Data.Monoid" instance, where |
58 | -- single-element matrices (created from numeric literals or using 'scalar') | 63 | -- single-element matrices (created from numeric literals or using 'scalar') |
59 | -- are used for scaling. | 64 | -- are used for scaling. |
@@ -172,7 +177,7 @@ import Internal.Sparse((!#>)) | |||
172 | import Internal.CG | 177 | import Internal.CG |
173 | import Internal.Conversion | 178 | import Internal.Conversion |
174 | 179 | ||
175 | {- | infix synonym of 'mul' | 180 | {- | dense matrix product |
176 | 181 | ||
177 | >>> let a = (3><5) [1..] | 182 | >>> let a = (3><5) [1..] |
178 | >>> a | 183 | >>> a |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Data.hs b/packages/base/src/Numeric/LinearAlgebra/Data.hs index d2843c2..a389aac 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Data.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Data.hs | |||
@@ -8,21 +8,29 @@ License : BSD3 | |||
8 | Maintainer : Alberto Ruiz | 8 | Maintainer : Alberto Ruiz |
9 | Stability : provisional | 9 | Stability : provisional |
10 | 10 | ||
11 | Basic data processing. | 11 | This module provides functions for creation and manipulation of vectors and matrices, IO, and other utilities. |
12 | 12 | ||
13 | -} | 13 | -} |
14 | -------------------------------------------------------------------------------- | 14 | -------------------------------------------------------------------------------- |
15 | 15 | ||
16 | module Numeric.LinearAlgebra.Data( | 16 | module Numeric.LinearAlgebra.Data( |
17 | 17 | ||
18 | -- * Elements | ||
19 | R,C,I,Z,type(./.), | ||
20 | |||
18 | -- * Vector | 21 | -- * Vector |
19 | -- | 1D arrays are storable vectors from the vector package. There is no distinction | 22 | {- | 1D arrays are storable vectors directly reexported from the vector package. |
20 | -- between row and column vectors. | 23 | -} |
21 | 24 | ||
22 | fromList, toList, (|>), vector, range, idxs, | 25 | fromList, toList, (|>), vector, range, idxs, |
23 | 26 | ||
24 | -- * Matrix | 27 | -- * Matrix |
25 | 28 | ||
29 | {- | The main data type of hmatrix is a 2D dense array defined on top of | ||
30 | a storable vector. The internal representation is suitable for direct | ||
31 | interface with standard numeric libraries. | ||
32 | -} | ||
33 | |||
26 | (><), matrix, tr, tr', | 34 | (><), matrix, tr, tr', |
27 | 35 | ||
28 | -- * Dimensions | 36 | -- * Dimensions |
@@ -56,8 +64,9 @@ module Numeric.LinearAlgebra.Data( | |||
56 | -- * Matrix extraction | 64 | -- * Matrix extraction |
57 | Extractor(..), (??), | 65 | Extractor(..), (??), |
58 | 66 | ||
59 | takeRows, dropRows, takeColumns, dropColumns, | 67 | (?), (¿), fliprl, flipud, |
60 | subMatrix, (?), (¿), fliprl, flipud, | 68 | |
69 | subMatrix, takeRows, dropRows, takeColumns, dropColumns, | ||
61 | 70 | ||
62 | remap, | 71 | remap, |
63 | 72 | ||
@@ -92,7 +101,7 @@ module Numeric.LinearAlgebra.Data( | |||
92 | separable, | 101 | separable, |
93 | fromArray2D, | 102 | fromArray2D, |
94 | module Data.Complex, | 103 | module Data.Complex, |
95 | R,C,I,Z,Mod, type(./.), | 104 | Mod, |
96 | Vector, Matrix, GMatrix, nRows, nCols | 105 | Vector, Matrix, GMatrix, nRows, nCols |
97 | 106 | ||
98 | ) where | 107 | ) where |
diff --git a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs index 8adaaaf..bac1c0c 100644 --- a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs +++ b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs | |||
@@ -13,7 +13,7 @@ compatibility with previous version, to be removed | |||
13 | 13 | ||
14 | module Numeric.LinearAlgebra.HMatrix ( | 14 | module Numeric.LinearAlgebra.HMatrix ( |
15 | module Numeric.LinearAlgebra, | 15 | module Numeric.LinearAlgebra, |
16 | (¦),(——),ℝ,ℂ,(<·>) | 16 | (¦),(——),ℝ,ℂ,(<·>),app,mul |
17 | ) where | 17 | ) where |
18 | 18 | ||
19 | import Numeric.LinearAlgebra | 19 | import Numeric.LinearAlgebra |
@@ -23,3 +23,7 @@ infixr 8 <·> | |||
23 | (<·>) :: Numeric t => Vector t -> Vector t -> t | 23 | (<·>) :: Numeric t => Vector t -> Vector t -> t |
24 | (<·>) = dot | 24 | (<·>) = dot |
25 | 25 | ||
26 | app m v = m #> v | ||
27 | |||
28 | mul a b = a <> b | ||
29 | |||
diff --git a/packages/base/src/Numeric/LinearAlgebra/Static.hs b/packages/base/src/Numeric/LinearAlgebra/Static.hs index d0a790d..0dab0e6 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Static.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Static.hs | |||
@@ -22,7 +22,7 @@ Stability : experimental | |||
22 | 22 | ||
23 | Experimental interface with statically checked dimensions. | 23 | Experimental interface with statically checked dimensions. |
24 | 24 | ||
25 | This module is under active development and the interface is subject to changes. | 25 | See code examples at http://dis.um.es/~alberto/hmatrix/static.html. |
26 | 26 | ||
27 | -} | 27 | -} |
28 | 28 | ||
@@ -65,7 +65,7 @@ import Numeric.LinearAlgebra hiding ( | |||
65 | row,col,vector,matrix,linspace,toRows,toColumns, | 65 | row,col,vector,matrix,linspace,toRows,toColumns, |
66 | (<\>),fromList,takeDiag,svd,eig,eigSH,eigSH', | 66 | (<\>),fromList,takeDiag,svd,eig,eigSH,eigSH', |
67 | eigenvalues,eigenvaluesSH,eigenvaluesSH',build, | 67 | eigenvalues,eigenvaluesSH,eigenvaluesSH',build, |
68 | qr,size,app,mul,dot,chol,range,R,C) | 68 | qr,size,dot,chol,range,R,C) |
69 | import qualified Numeric.LinearAlgebra as LA | 69 | import qualified Numeric.LinearAlgebra as LA |
70 | import Data.Proxy(Proxy) | 70 | import Data.Proxy(Proxy) |
71 | import Internal.Static | 71 | import Internal.Static |