fpnla-examples-0.1: src/FPNLA/Operations/LAPACK/Strategies/POTRF/HMatrixBindSeq.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
module FPNLA.Operations.LAPACK.Strategies.POTRF.HMatrixBindSeq (
) where
import qualified Data.Packed.Matrix as HM
import FPNLA.Matrix (MatrixVector,
cantCols_m,
cantRows_m,
elem_m,
generate_m,
transpose_m)
import FPNLA.Operations.LAPACK (POTRF (potrf))
import FPNLA.Operations.LAPACK.Strategies.DataTypes (HMatrixBindSeq)
import FPNLA.Operations.Parameters (Elt, blasResultM,
unTriangT)
import Numeric.LinearAlgebra.Algorithms
instance (Field e, Elt e, MatrixVector m v e) => POTRF HMatrixBindSeq m v e where
potrf _ pmA = blasResultM . fromHMatrix . chol . toHMatrix $ mA
where mA = snd $ unTriangT pmA
fromHMatrix m = transpose_m $ generate_m (HM.rows m) (HM.cols m) (\i j -> m HM.@@> (i, j))
toHMatrix m = HM.buildMatrix (cantRows_m m) (cantCols_m m) (\(i, j)-> elem_m i j m)