levmar-0.2: LevMar/Utils.hs
module LevMar.Utils
( LinearConstraints
, noLinearConstraints
, Matrix
, CovarMatrix
, convertLinearConstraints
, convertResult
) where
import qualified LevMar.Intermediate as LMA_I
import TypeLevelNat ( Nat, Z )
import SizedList ( SizedList, toList, unsafeFromList )
-- | Linear constraints consisting of a constraints matrix, /kxn/ and
-- a right hand constraints vector, /kx1/ where /n/ is the number of
-- parameters and /k/ is the number of constraints.
type LinearConstraints k n r = (Matrix k n r, SizedList k r)
-- |Value to denote the absense of any linear constraints over the
-- parameters of the model function. Use this instead of 'Nothing'
-- because the type parameter which contains the number of constraints
-- can't be inferred.
noLinearConstraints :: Nat n => Maybe (LinearConstraints Z n r)
noLinearConstraints = Nothing
-- | A /nxm/ matrix is a sized list of /n/ sized lists of length /m/.
type Matrix n m r = SizedList n (SizedList m r)
-- | Covariance matrix corresponding to LS solution.
type CovarMatrix n r = Matrix n n r
convertLinearConstraints :: (Nat k, Nat n) => LinearConstraints k n r -> LMA_I.LinearConstraints r
convertLinearConstraints (cMat, rhcVec) = ( map toList $ toList cMat
, toList rhcVec
)
convertResult :: (Nat n)
=> ([r], LMA_I.Info r, LMA_I.CovarMatrix r)
-> (SizedList n r, LMA_I.Info r, CovarMatrix n r)
convertResult (psResult, info, covar) = ( unsafeFromList psResult
, info
, unsafeFromList $ map unsafeFromList covar
)