Portability | requires multi-parameter type classes |
---|---|

Stability | provisional |

Maintainer | numericprelude@henning-thielemann.de |

Safe Haskell | Safe-Infered |

Routines and abstractions for Matrices and basic linear algebra over fields or rings.

We stick to simple Int indices. Although advanced indices would be nice e.g. for matrices with sub-matrices, this is not easily implemented since arrays do only support a lower and an upper bound but no additional parameters.

ToDo: - Matrix inverse, determinant

- data T a
- type Dimension = Int
- format :: Show a => T a -> String
- transpose :: T a -> T a
- rows :: T a -> [[a]]
- columns :: T a -> [[a]]
- index :: T a -> Dimension -> Dimension -> a
- fromRows :: Dimension -> Dimension -> [[a]] -> T a
- fromColumns :: Dimension -> Dimension -> [[a]] -> T a
- fromList :: Dimension -> Dimension -> [a] -> T a
- dimension :: T a -> (Dimension, Dimension)
- numRows :: T a -> Dimension
- numColumns :: T a -> Dimension
- zipWith :: (a -> b -> c) -> T a -> T b -> T c
- zero :: C a => Dimension -> Dimension -> T a
- one :: C a => Dimension -> T a
- diagonal :: C a => [a] -> T a
- scale :: C a => a -> T a -> T a
- random :: (RandomGen g, Random a) => Dimension -> Dimension -> g -> (T a, g)
- randomR :: (RandomGen g, Random a) => Dimension -> Dimension -> (a, a) -> g -> (T a, g)

# Documentation

A matrix is a twodimensional array, indexed by integers.

Transposition of matrices is just transposition in the sense of Data.List.

fromColumns :: Dimension -> Dimension -> [[a]] -> T aSource

numColumns :: T a -> DimensionSource