import Data.Vector.Fixed (
(!),
- N1,
- N2,
- N3,
- N4,
- N5,
- S,
- Z,
generate,
mk1,
mk2,
zipWith )
import Data.Vector.Fixed.Cont ( Arity, arity )
import Linear.Vector ( Vec, delete, element_sum )
+import Naturals ( N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, S, Z )
import Normed ( Normed(..) )
import NumericPrelude hiding ( (*), abs )
type Col3 a = Col N3 a
type Col4 a = Col N4 a
type Col5 a = Col N5 a
-
--- We need a big column for Gaussian quadrature.
-type N10 = S (S (S (S (S N5))))
-type Col10 a = Col N10 a
+type Col6 a = Col N6 a
+type Col7 a = Col N7 a
+type Col8 a = Col N8 a
+type Col9 a = Col N9 a
+type Col10 a = Col N10 a -- We need a big column for Gaussian quadrature.
instance (Eq a) => Eq (Mat m n a) where
-- >>> is_upper_triangular r
-- True
--
--- >>> import Naturals ( N7 )
-- >>> let k1 = [6, -3, 0, 0, 0, 0, 0] :: [Double]
-- >>> let k2 = [-3, 10.5, -7.5, 0, 0, 0, 0] :: [Double]
-- >>> let k3 = [0, -7.5, 12.5, 0, 0, 0, 0] :: [Double]
x *> (Mat rows) = Mat $ V.map (V.map (NP.* x)) rows
-instance (Algebraic.C a,
+instance (Absolute.C a,
+ Algebraic.C a,
ToRational.C a,
Arity m)
- => Normed (Mat (S m) N1 a) where
- -- | Generic p-norms for vectors in R^n that are represented as nx1
+ => Normed (Col (S m) a) where
+ -- | Generic p-norms for vectors in R^n that are represented as n-by-1
-- matrices.
--
-- Examples:
-- >>> norm_p 2 v1
-- 5.0
--
+ -- >>> let v1 = vec2d (-1,1) :: Col2 Double
+ -- >>> norm_p 1 v1 :: Double
+ -- 2.0
+ --
norm_p p (Mat rows) =
- (root p') $ sum [fromRational' (toRational x)^p' | x <- xs]
+ (root p') $ sum [fromRational' (toRational $ abs x)^p' | x <- xs]
where
p' = toInteger p
xs = concat $ V.toList $ V.map V.toList rows
vec5d :: (a,a,a,a,a) -> Col5 a
vec5d (v,w,x,y,z) = Mat (mk5 (mk1 v) (mk1 w) (mk1 x) (mk1 y) (mk1 z))
+
-- Since we commandeered multiplication, we need to create 1x1
-- matrices in order to multiply things.
scalar :: a -> Mat1 a
-- >>> zip2 m1 m2
-- (((1,1),(2,1)),((3,1),(4,1)))
--
-zip2 :: (Arity m, Arity n) => Mat m n a -> Mat m n a -> Mat m n (a,a)
+zip2 :: (Arity m, Arity n) => Mat m n a -> Mat m n b -> Mat m n (a,b)
zip2 m1 m2 =
construct lambda
where