HLinear is a Haskell implementation of the PLE decomposition of matrices over division rings. It writes an arbitrary matrix as a product of a permutation matrix, a lower triangular matrix with diagonal entries 1, and an echelon matrix.
- Install stack.
- Install git.
- Install flint.
- Create a working directory for HLinear and its dependencies:
mkdir hlinear-all; cd hlinear-all
- Get natural-test:
git clone https://github.com/martinra/natural-test.git
- Get vector-test:
git clone https://github.com/martinra/vector-test.git
- Get algebraic-structures:
git clone https://github.com/martinra/algebraic-structures.git
- Get hflint:
git clone https://github.com/martinra/hflint.git
- Get HLinear:
git clone https://github.com/martinra/hlinear.git
- Build HLinear:
cd hlinear stack build
- Test HLinear:
The log file with the test results can be found at .stack-work/logs/hlinear-0.0.1-test.log
- Run a simple benchmark:
The log file with the benchmark results can be found at .stack-work/logs/hlinear-0.0.1-bench.log
How to use
This is just a sketchy illustration of how to interact with HLinear from Haskell. For details and code you can immediately start adapting to your needs, see HLinear-example.
(...various imports...) main :: IO () main = do let m = M.fromListsUnsafe [[1,2,3],[4,5,6]] :: Matrix FMPQ hk = D.unPLEDecomposition $ FU.pleDecompositionFoldUnfold m e = Hk.echelonForm hk em = EF.toMatrix e putStrLn "echelon form:" print em
echelon form: [ 1/1 2/1 3/1 ] [ 0/1 1/1 2/1 ]
GPLv3, see LICENSE.