summaryrefslogtreecommitdiff
path: root/lib/Numeric
diff options
context:
space:
mode:
authorAlberto Ruiz <aruiz@um.es>2012-03-14 12:57:36 +0100
committerAlberto Ruiz <aruiz@um.es>2012-03-14 12:57:36 +0100
commita53bfb617e739627e133c13db42059ec71949160 (patch)
tree958bf448785f8bd93fd8a8384916f6f7b950a51b /lib/Numeric
parent69b0f9c46f09dc9fc5c25e706efb8a7da51d2480 (diff)
<\> admits multiple right-hand sides
Diffstat (limited to 'lib/Numeric')
-rw-r--r--lib/Numeric/Container.hs16
-rw-r--r--lib/Numeric/LinearAlgebra/Real.hs31
2 files changed, 20 insertions, 27 deletions
diff --git a/lib/Numeric/Container.hs b/lib/Numeric/Container.hs
index eded19c..661e5b4 100644
--- a/lib/Numeric/Container.hs
+++ b/lib/Numeric/Container.hs
@@ -36,7 +36,7 @@ module Numeric.Container (
36 -- * Matrix product 36 -- * Matrix product
37 Product(..), 37 Product(..),
38 optimiseMult, 38 optimiseMult,
39 mXm,mXv,vXm,(<.>),Mul(..),(<\>), 39 mXm,mXv,vXm,(<.>),Mul(..),LSDiv(..),
40 outer, kronecker, 40 outer, kronecker,
41 -- * Random numbers 41 -- * Random numbers
42 RandDist(..), 42 RandDist(..),
@@ -120,9 +120,15 @@ instance Mul Vector Matrix Vector where
120 120
121-------------------------------------------------------- 121--------------------------------------------------------
122 122
123-- | least squares solution of a linear system, similar to the \\ operator of Matlab\/Octave (based on linearSolveSVD). 123class LSDiv b c | b -> c, c->b where
124(<\>) :: (Field a) => Matrix a -> Vector a -> Vector a 124 infixl 7 <\>
125infixl 7 <\> 125 -- | least squares solution of a linear system, similar to the \\ operator of Matlab\/Octave (based on linearSolveSVD)
126m <\> v = flatten (linearSolveSVD m (reshape 1 v)) 126 (<\>) :: Field t => Matrix t -> b t -> c t
127
128instance LSDiv Vector Vector where
129 m <\> v = flatten (linearSolveSVD m (reshape 1 v))
130
131instance LSDiv Matrix Matrix where
132 (<\>) = linearSolveSVD
127 133
128-------------------------------------------------------- 134--------------------------------------------------------
diff --git a/lib/Numeric/LinearAlgebra/Real.hs b/lib/Numeric/LinearAlgebra/Real.hs
index 6cba045..08a218c 100644
--- a/lib/Numeric/LinearAlgebra/Real.hs
+++ b/lib/Numeric/LinearAlgebra/Real.hs
@@ -13,7 +13,7 @@ Additional functions for real arrays.
13----------------------------------------------------------------------------- 13-----------------------------------------------------------------------------
14 14
15module Numeric.LinearAlgebra.Real( 15module Numeric.LinearAlgebra.Real(
16 (<>), (*>), (<*), (<\>), (\>), 16 (<>), (<\>),
17 vector, 17 vector,
18 linspace, 18 linspace,
19 eye, 19 eye,
@@ -22,7 +22,8 @@ module Numeric.LinearAlgebra.Real(
22 row, 22 row,
23 col, 23 col,
24 (#),(&), (//), blocks, 24 (#),(&), (//), blocks,
25 rand, randn 25 rand, randn,
26 module Numeric.LinearAlgebra
26) where 27) where
27 28
28import Numeric.LinearAlgebra hiding ((<>), (<\>), linspace) 29import Numeric.LinearAlgebra hiding ((<>), (<\>), linspace)
@@ -34,30 +35,16 @@ linspace = LA.linspace
34 35
35 36
36infixl 7 <> 37infixl 7 <>
37-- | Matrix product ('multiply') 38-- | Matrix product
38(<>) :: Field t => Matrix t -> Matrix t -> Matrix t 39(<>) ::Mul a b c => a Double -> b Double -> c Double
39(<>) = multiply 40(<>) = (LA.<>)
40 41
41infixl 7 *>
42-- | matrix x vector
43(*>) :: Field t => Matrix t -> Vector t -> Vector t
44m *> v = flatten $ m <> (asColumn v)
45 42
46infixl 7 <*
47-- | vector x matrix
48(<*) :: Field t => Vector t -> Matrix t -> Vector t
49v <* m = flatten $ (asRow v) <> m
50
51
52-- | Least squares solution of a linear system for several right-hand sides, similar to the \\ operator of Matlab\/Octave. (\<\\\>) = 'linearSolveSVD'.
53(<\>) :: (Field a) => Matrix a -> Matrix a -> Matrix a
54infixl 7 <\> 43infixl 7 <\>
55(<\>) = linearSolveSVD 44-- | Least squares solution of a linear system
45(<\>) ::LSDiv b c => Matrix Double -> b Double -> c Double
46(<\>) = (LA.<\>)
56 47
57-- | Least squares solution of a linear system for a single right-hand side. See '(\<\\\>)'.
58(\>) :: (Field a) => Matrix a -> Vector a -> Vector a
59infixl 7 \>
60m \> v = flatten (m <\> reshape 1 v)
61 48
62-- | Pseudorandom matrix with uniform elements between 0 and 1. 49-- | Pseudorandom matrix with uniform elements between 0 and 1.
63randm :: RandDist 50randm :: RandDist