]> gitweb.michael.orlitzky.com - numerical-analysis.git/commitdiff
Fix implementation of Linear.Matrix.construct.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 2 Feb 2014 04:16:01 +0000 (23:16 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 2 Feb 2014 04:16:22 +0000 (23:16 -0500)
src/Linear/Matrix.hs

index d166e44367e626b9d87979a4b0e9ab7b2b24e7d9..c48f722265b19e3bd195ce5dc16e3ab44162d137 100644 (file)
@@ -25,6 +25,7 @@ import Data.Vector.Fixed (
   N5,
   S,
   Z,
+  generate,
   mk1,
   mk2,
   mk3,
@@ -198,8 +199,6 @@ symmetric m =
 --   entries in the matrix. The i,j entry of the resulting matrix will
 --   have the value returned by lambda i j.
 --
---   TODO: Don't cheat with fromList.
---
 --   Examples:
 --
 --   >>> let lambda i j = i + j
@@ -208,13 +207,11 @@ symmetric m =
 --
 construct :: forall m n a. (Arity m, Arity n)
           => (Int -> Int -> a) -> Mat m n a
-construct lambda = Mat rows
+construct lambda = Mat $ generate make_row
   where
-    -- The arity trick is used in Data.Vector.Fixed.length.
-    imax = (arity (undefined :: m)) - 1
-    jmax = (arity (undefined :: n)) - 1
-    row' i = V.fromList [ lambda i j | j <- [0..jmax] ]
-    rows = V.fromList [ row' i | i <- [0..imax] ]
+    make_row :: Int -> Vec n a
+    make_row i = generate (lambda i)
+
 
 
 -- | Given a positive-definite matrix @m@, computes the