diff options
Diffstat (limited to 'packages/base/src/Numeric/LinearAlgebra/HMatrix.hs')
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra/HMatrix.hs | 228 |
1 files changed, 5 insertions, 223 deletions
diff --git a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs index 677f9ee..8e67eb4 100644 --- a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs +++ b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs | |||
@@ -1,4 +1,4 @@ | |||
1 | ----------------------------------------------------------------------------- | 1 | -------------------------------------------------------------------------------- |
2 | {- | | 2 | {- | |
3 | Module : Numeric.LinearAlgebra.HMatrix | 3 | Module : Numeric.LinearAlgebra.HMatrix |
4 | Copyright : (c) Alberto Ruiz 2006-14 | 4 | Copyright : (c) Alberto Ruiz 2006-14 |
@@ -7,229 +7,11 @@ Maintainer : Alberto Ruiz | |||
7 | Stability : provisional | 7 | Stability : provisional |
8 | 8 | ||
9 | -} | 9 | -} |
10 | ----------------------------------------------------------------------------- | 10 | -------------------------------------------------------------------------------- |
11 | module Numeric.LinearAlgebra.HMatrix ( | ||
12 | |||
13 | -- * Basic types and data processing | ||
14 | module Numeric.LinearAlgebra.Data, | ||
15 | |||
16 | -- * Arithmetic and numeric classes | ||
17 | -- | | ||
18 | -- The standard numeric classes are defined elementwise: | ||
19 | -- | ||
20 | -- >>> vector [1,2,3] * vector [3,0,-2] | ||
21 | -- fromList [3.0,0.0,-6.0] | ||
22 | -- | ||
23 | -- >>> matrix 3 [1..9] * ident 3 | ||
24 | -- (3><3) | ||
25 | -- [ 1.0, 0.0, 0.0 | ||
26 | -- , 0.0, 5.0, 0.0 | ||
27 | -- , 0.0, 0.0, 9.0 ] | ||
28 | -- | ||
29 | -- In arithmetic operations single-element vectors and matrices | ||
30 | -- (created from numeric literals or using 'scalar') automatically | ||
31 | -- expand to match the dimensions of the other operand: | ||
32 | -- | ||
33 | -- >>> 5 + 2*ident 3 :: Matrix Double | ||
34 | -- (3><3) | ||
35 | -- [ 7.0, 5.0, 5.0 | ||
36 | -- , 5.0, 7.0, 5.0 | ||
37 | -- , 5.0, 5.0, 7.0 ] | ||
38 | -- | ||
39 | -- >>> matrix 3 [1..9] + matrix 1 [10,20,30] | ||
40 | -- (3><3) | ||
41 | -- [ 11.0, 12.0, 13.0 | ||
42 | -- , 24.0, 25.0, 26.0 | ||
43 | -- , 37.0, 38.0, 39.0 ] | ||
44 | -- | ||
45 | |||
46 | -- * Products | ||
47 | -- ** dot | ||
48 | dot, (<·>), | ||
49 | -- ** matrix-vector | ||
50 | app, (#>), (!#>), | ||
51 | -- ** matrix-matrix | ||
52 | mul, (<>), | ||
53 | -- | The matrix product is also implemented in the "Data.Monoid" instance, where | ||
54 | -- single-element matrices (created from numeric literals or using 'scalar') | ||
55 | -- are used for scaling. | ||
56 | -- | ||
57 | -- >>> import Data.Monoid as M | ||
58 | -- >>> let m = matrix 3 [1..6] | ||
59 | -- >>> m M.<> 2 M.<> diagl[0.5,1,0] | ||
60 | -- (2><3) | ||
61 | -- [ 1.0, 4.0, 0.0 | ||
62 | -- , 4.0, 10.0, 0.0 ] | ||
63 | -- | ||
64 | -- 'mconcat' uses 'optimiseMult' to get the optimal association order. | ||
65 | |||
66 | |||
67 | -- ** other | ||
68 | outer, kronecker, cross, | ||
69 | scale, | ||
70 | sumElements, prodElements, | ||
71 | |||
72 | -- * Linear Systems | ||
73 | (<\>), | ||
74 | linearSolve, | ||
75 | linearSolveLS, | ||
76 | linearSolveSVD, | ||
77 | luSolve, | ||
78 | cholSolve, | ||
79 | cgSolve, | ||
80 | cgSolve', | ||
81 | |||
82 | -- * Inverse and pseudoinverse | ||
83 | inv, pinv, pinvTol, | ||
84 | |||
85 | -- * Determinant and rank | ||
86 | rcond, rank, | ||
87 | det, invlndet, | ||
88 | |||
89 | -- * Norms | ||
90 | Normed(..), | ||
91 | norm_Frob, norm_nuclear, | ||
92 | |||
93 | -- * Nullspace and range | ||
94 | orth, | ||
95 | nullspace, null1, null1sym, | ||
96 | |||
97 | -- * SVD | ||
98 | svd, | ||
99 | thinSVD, | ||
100 | compactSVD, | ||
101 | singularValues, | ||
102 | leftSV, rightSV, | ||
103 | |||
104 | -- * Eigensystems | ||
105 | eig, eigSH, eigSH', | ||
106 | eigenvalues, eigenvaluesSH, eigenvaluesSH', | ||
107 | geigSH', | ||
108 | |||
109 | -- * QR | ||
110 | qr, rq, qrRaw, qrgr, | ||
111 | |||
112 | -- * Cholesky | ||
113 | chol, cholSH, mbCholSH, | ||
114 | |||
115 | -- * Hessenberg | ||
116 | hess, | ||
117 | |||
118 | -- * Schur | ||
119 | schur, | ||
120 | |||
121 | -- * LU | ||
122 | lu, luPacked, | ||
123 | |||
124 | -- * Matrix functions | ||
125 | expm, | ||
126 | sqrtm, | ||
127 | matFunc, | ||
128 | |||
129 | -- * Correlation and convolution | ||
130 | corr, conv, corrMin, corr2, conv2, | ||
131 | |||
132 | -- * Random arrays | ||
133 | 11 | ||
134 | Seed, RandDist(..), randomVector, rand, randn, gaussianSample, uniformSample, | 12 | module Numeric.LinearAlgebra.HMatrix ( |
135 | 13 | module Numeric.LinearAlgebra | |
136 | -- * Misc | ||
137 | meanCov, rowOuters, peps, relativeError, haussholder, optimiseMult, udot, nullspaceSVD, orthSVD, ranksv, | ||
138 | ℝ,ℂ,iC, | ||
139 | -- * Auxiliary classes | ||
140 | Element, Container, Product, Numeric, LSDiv, | ||
141 | Complexable, RealElement, | ||
142 | RealOf, ComplexOf, SingleOf, DoubleOf, | ||
143 | IndexOf, | ||
144 | Field, | ||
145 | -- Normed, | ||
146 | Transposable, | ||
147 | CGState(..), | ||
148 | Testable(..) | ||
149 | ) where | 14 | ) where |
150 | 15 | ||
151 | import Numeric.LinearAlgebra.Data | 16 | import Numeric.LinearAlgebra |
152 | |||
153 | import Numeric.Matrix() | ||
154 | import Numeric.Vector() | ||
155 | import Data.Packed.Numeric hiding ((<>), mul) | ||
156 | import Numeric.LinearAlgebra.Algorithms hiding (linearSolve,Normed,orth) | ||
157 | import qualified Numeric.LinearAlgebra.Algorithms as A | ||
158 | import Numeric.LinearAlgebra.Util | ||
159 | import Numeric.LinearAlgebra.Random | ||
160 | import Numeric.Sparse((!#>)) | ||
161 | import Numeric.LinearAlgebra.Util.CG | ||
162 | |||
163 | {- | infix synonym of 'mul' | ||
164 | |||
165 | >>> let a = (3><5) [1..] | ||
166 | >>> a | ||
167 | (3><5) | ||
168 | [ 1.0, 2.0, 3.0, 4.0, 5.0 | ||
169 | , 6.0, 7.0, 8.0, 9.0, 10.0 | ||
170 | , 11.0, 12.0, 13.0, 14.0, 15.0 ] | ||
171 | |||
172 | >>> let b = (5><2) [1,3, 0,2, -1,5, 7,7, 6,0] | ||
173 | >>> b | ||
174 | (5><2) | ||
175 | [ 1.0, 3.0 | ||
176 | , 0.0, 2.0 | ||
177 | , -1.0, 5.0 | ||
178 | , 7.0, 7.0 | ||
179 | , 6.0, 0.0 ] | ||
180 | |||
181 | >>> a <> b | ||
182 | (3><2) | ||
183 | [ 56.0, 50.0 | ||
184 | , 121.0, 135.0 | ||
185 | , 186.0, 220.0 ] | ||
186 | |||
187 | -} | ||
188 | (<>) :: Numeric t => Matrix t -> Matrix t -> Matrix t | ||
189 | (<>) = mXm | ||
190 | infixr 8 <> | ||
191 | |||
192 | -- | dense matrix product | ||
193 | mul :: Numeric t => Matrix t -> Matrix t -> Matrix t | ||
194 | mul = mXm | ||
195 | |||
196 | |||
197 | {- | Solve a linear system (for square coefficient matrix and several right-hand sides) using the LU decomposition, returning Nothing for a singular system. For underconstrained or overconstrained systems use 'linearSolveLS' or 'linearSolveSVD'. | ||
198 | |||
199 | @ | ||
200 | a = (2><2) | ||
201 | [ 1.0, 2.0 | ||
202 | , 3.0, 5.0 ] | ||
203 | @ | ||
204 | |||
205 | @ | ||
206 | b = (2><3) | ||
207 | [ 6.0, 1.0, 10.0 | ||
208 | , 15.0, 3.0, 26.0 ] | ||
209 | @ | ||
210 | |||
211 | >>> linearSolve a b | ||
212 | Just (2><3) | ||
213 | [ -1.4802973661668753e-15, 0.9999999999999997, 1.999999999999997 | ||
214 | , 3.000000000000001, 1.6653345369377348e-16, 4.000000000000002 ] | ||
215 | |||
216 | >>> let Just x = it | ||
217 | >>> disp 5 x | ||
218 | 2x3 | ||
219 | -0.00000 1.00000 2.00000 | ||
220 | 3.00000 0.00000 4.00000 | ||
221 | |||
222 | >>> a <> x | ||
223 | (2><3) | ||
224 | [ 6.0, 1.0, 10.0 | ||
225 | , 15.0, 3.0, 26.0 ] | ||
226 | |||
227 | -} | ||
228 | linearSolve m b = A.mbLinearSolve m b | ||
229 | |||
230 | -- | return an orthonormal basis of the null space of a matrix. See also 'nullspaceSVD'. | ||
231 | nullspace m = nullspaceSVD (Left (1*eps)) m (rightSV m) | ||
232 | |||
233 | -- | return an orthonormal basis of the range space of a matrix. See also 'orthSVD'. | ||
234 | orth m = orthSVD (Left (1*eps)) m (leftSV m) | ||
235 | 17 | ||