lapack-0.3.0.1: Numerical Linear Algebra using LAPACK

Numeric.LAPACK.Linear.LowerUpper

Synopsis

# Documentation

type LowerUpper vert horiz height width = Matrix (LU vert horiz height width)Source

type Tall height width = LowerUpper Big Small height widthSource

type Wide height width = LowerUpper Small Big height widthSource

Constructors

 NonTransposed Transposed

Instances

 Bounded Transposition Enum Transposition Eq Transposition Show Transposition Monoid Transposition Semigroup Transposition

Constructors

 NonConjugated Conjugated

Instances

 Bounded Conjugation Enum Conjugation Eq Conjugation Show Conjugation Monoid Conjugation Semigroup Conjugation

data Inversion Source

Constructors

 NonInverted Inverted

Instances

 Bounded Inversion Enum Inversion Eq Inversion Show Inversion Monoid Inversion Semigroup Inversion

mapExtent :: (C vertA, C horizA) => (C vertB, C horizB) => Map vertA horizA vertB horizB height width -> LowerUpper vertA horizA height width a -> LowerUpper vertB horizB height width aSource

fromMatrix :: (C vert, C horiz, C height, C width, Floating a) => Full vert horiz height width a -> LowerUpper vert horiz height width aSource

`LowerUpper.fromMatrix a` computes the LU decomposition of matrix `a` with row pivotisation.

You can reconstruct `a` from `lu` depending on whether `a` is tall or wide.

``` LU.multiplyP NonInverted lu \$ LU.extractL lu ##*# LU.tallExtractU lu
LU.multiplyP NonInverted lu \$ LU.wideExtractL lu #*## LU.extractU lu
```

toMatrix :: (C vert, C horiz, C height, Eq height, C width, Eq width, Floating a) => LowerUpper vert horiz height width a -> Full vert horiz height width aSource

solve :: (C vert, C horiz, Eq height, C height, C width, Floating a) => Square height a -> Full vert horiz height width a -> Full vert horiz height width aSource

multiplyFull :: (C vert, C horiz, C height, Eq height, C width, C fuse, Eq fuse, Floating a) => LowerUpper vert horiz height fuse a -> Full vert horiz fuse width a -> Full vert horiz height width aSource

determinant :: (C sh, Floating a) => Square sh a -> aSource

Caution: `LU.determinant . LU.fromMatrix` will fail for singular matrices.

extractP :: (C vert, C horiz, C height, C width) => Inversion -> LowerUpper vert horiz height width a -> Permutation height aSource

multiplyP :: (C vertA, C horizA, C vertB, C horizB, Eq height, C height, C widthA, C widthB, Floating a) => Inversion -> LowerUpper vertA horizA height widthA a -> Full vertB horizB height widthB a -> Full vertB horizB height widthB aSource

extractL :: (C vert, C horiz, C height, C width, Floating a) => LowerUpper vert horiz height width a -> Full vert horiz height width aSource

wideExtractL :: (C horiz, C height, C width, Floating a) => LowerUpper Small horiz height width a -> UnitLower height aSource

wideMultiplyL :: (C horizA, C vert, C horiz, C height, Eq height, C widthA, C widthB, Floating a) => Transposition -> LowerUpper Small horizA height widthA a -> Full vert horiz height widthB a -> Full vert horiz height widthB aSource

`wideMultiplyL transposed lu a` multiplies the square part of `lu` containing the lower triangular matrix with `a`.

``` wideMultiplyL NonTransposed lu a == wideExtractL lu #*## a
wideMultiplyL Transposed lu a == Tri.transpose (wideExtractL lu) #*## a
```

wideSolveL :: (C horizA, C vert, C horiz, C height, Eq height, C width, C nrhs, Floating a) => Transposition -> Conjugation -> LowerUpper Small horizA height width a -> Full vert horiz height nrhs a -> Full vert horiz height nrhs aSource

extractU :: (C vert, C horiz, C height, C width, Floating a) => LowerUpper vert horiz height width a -> Full vert horiz height width aSource

tallExtractU :: (C vert, C height, C width, Floating a) => LowerUpper vert Small height width a -> Upper width aSource

tallMultiplyU :: (C vertA, C vert, C horiz, C height, Eq height, C heightA, C widthB, Floating a) => Transposition -> LowerUpper vertA Small heightA height a -> Full vert horiz height widthB a -> Full vert horiz height widthB aSource

`tallMultiplyU transposed lu a` multiplies the square part of `lu` containing the upper triangular matrix with `a`.

``` tallMultiplyU NonTransposed lu a == tallExtractU lu #*## a
tallMultiplyU Transposed lu a == Tri.transpose (tallExtractU lu) #*## a
```

tallSolveU :: (C vertA, C vert, C horiz, C height, C width, Eq width, C nrhs, Floating a) => Transposition -> Conjugation -> LowerUpper vertA Small height width a -> Full vert horiz width nrhs a -> Full vert horiz width nrhs aSource

caseTallWide :: (C vert, C horiz, C height, C width) => LowerUpper vert horiz height width a -> Either (Tall height width a) (Wide height width a)Source