module Numeric.LAPACK.Matrix.BandedHermitianPositiveDefinite (
solve,
solveDecomposed,
decompose,
determinant,
) where
import qualified Numeric.LAPACK.Matrix.BandedHermitianPositiveDefinite.Linear
as Linear
import qualified Numeric.LAPACK.Matrix.Array.Banded as Banded
import qualified Numeric.LAPACK.Matrix.Array as ArrMatrix
import qualified Numeric.LAPACK.Matrix.Extent as Extent
import Numeric.LAPACK.Matrix.Array (Full)
import Numeric.LAPACK.Scalar (RealOf)
import qualified Numeric.Netlib.Class as Class
import qualified Type.Data.Num.Unary as Unary
import qualified Data.Array.Comfort.Shape as Shape
solve ::
(Unary.Natural offDiag, Shape.C size, Eq size,
Extent.C vert, Extent.C horiz, Shape.C nrhs, Class.Floating a) =>
Banded.Hermitian offDiag size a ->
Full vert horiz size nrhs a -> Full vert horiz size nrhs a
solve = ArrMatrix.lift2 Linear.solve
{- |
> solve a b == solveDecomposed (decompose a) b
> solve (gramian u) b == solveDecomposed u b
-}
solveDecomposed ::
(Unary.Natural offDiag, Shape.C size, Eq size,
Extent.C vert, Extent.C horiz, Shape.C nrhs, Class.Floating a) =>
Banded.Upper offDiag size a ->
Full vert horiz size nrhs a -> Full vert horiz size nrhs a
solveDecomposed = ArrMatrix.lift2 Linear.solveDecomposed
{- |
Cholesky decomposition
-}
decompose ::
(Unary.Natural offDiag, Shape.C size, Class.Floating a) =>
Banded.Hermitian offDiag size a -> Banded.Upper offDiag size a
decompose = ArrMatrix.lift1 Linear.decompose
determinant ::
(Unary.Natural offDiag, Shape.C size, Class.Floating a) =>
Banded.Hermitian offDiag size a -> RealOf a
determinant = Linear.determinant . ArrMatrix.toVector