From: Michael Orlitzky Date: Sun, 2 Feb 2014 04:16:01 +0000 (-0500) Subject: Fix implementation of Linear.Matrix.construct. X-Git-Url: http://gitweb.michael.orlitzky.com/?p=numerical-analysis.git;a=commitdiff_plain;h=504257320e56784b914ff69e8efb22d6191e3372 Fix implementation of Linear.Matrix.construct. --- diff --git a/src/Linear/Matrix.hs b/src/Linear/Matrix.hs index d166e44..c48f722 100644 --- a/src/Linear/Matrix.hs +++ b/src/Linear/Matrix.hs @@ -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