Safe Haskell | Safe |
---|---|

Language | Haskell98 |

## Synopsis

- leastSquares :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> Array i a -> Array j a
- decompose :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> ([Rotation i a], Upper i j a)
- solve :: (Ix i, Ix j, Fractional a) => ([Rotation i a], Upper i j a) -> Array i a -> Array j a
- det :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> a
- detAbs :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> a
- data Rotation i a
- rotateVector :: (Ix i, Num a) => Rotation i a -> Array i a -> Array i a
- data Upper i j a
- solveUpper :: (Ix i, Ix j, Fractional a) => Upper i j a -> Array i a -> Array j a
- detUpper :: (Ix i, Ix j, Fractional a) => Upper i j a -> a

# Documentation

leastSquares :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> Array i a -> Array j a Source #

Solve a sparse overconstrained linear problem, i.e. minimize `||Ax-b||`

.
`A`

must have dimensions `m x n`

with `m>=n`

and it must have full-rank.
None of these conditions is checked.

The decomposition routine is pretty simple. It does not try to minimize fill-up by a clever ordering of rotations. However, for banded matrices it will work as expected.

solve :: (Ix i, Ix j, Fractional a) => ([Rotation i a], Upper i j a) -> Array i a -> Array j a Source #

det :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> a Source #

Only sensible for square matrices, but the function does not check whether the matrix is square.

detAbs :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> a Source #

Absolute value of the determinant. This is also sound for non-square matrices.

solveUpper :: (Ix i, Ix j, Fractional a) => Upper i j a -> Array i a -> Array j a Source #

Assumes that `Upper`

matrix is at least as high as wide
and that it has full rank.