qlinear: Typesafe library for linear algebra

[ bsd3, library, math ] [ Propose Tags ]

Please see the README on GitHub at https://github.com/JuniorGarbageCollector/QLinear


[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.0.1, 0.1.2.0
Dependencies base (>=4.13.0 && <4.15), haskell-src-exts (>=1.23.1 && <1.24), haskell-src-meta (>=0.8.5 && <0.9), linear (>=1.21.1 && <1.22), parsec (>=3.1.13 && <3.2), split (>=0.2.3 && <0.3), template-haskell (>=2.15.0 && <2.16) [details]
License BSD-3-Clause
Author JuniorGarbageCollector
Maintainer GooseDB@yandex.ru
Category Math
Home page https://github.com/JuniorGarbageCollector/QLinear#readme
Bug tracker https://github.com/JuniorGarbageCollector/QLinear/issues
Source repo head: git clone https://github.com/JuniorGarbageCollector/QLinear
Uploaded by JuniorGarbageCollector at 2020-08-12T15:09:32Z
Distributions NixOS:0.1.2.0
Downloads 97 total (1 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for qlinear-0.1.2.0

[back to package description]

QLinear

QLinear is type safe library for linear algebra based on "macro-constructors"

Constructors:

  • matrix

    [matrix| a b ; c d |] builds matrix 2x2 [ [a, b], [c, d] ]

    Example:

    [matrix| 1 2; 3 4 |] ~+~ [matrix| 2 3; 4 5 |] == [matrix| 3 5; 7 9 |] 
    

    Also you can't, for example, add two matrix with different size.

    [matrix| 1 2; 3 4 |] ~+~ [matrix| 1 2 3; 4 5 6; 7 8 9 |] -- will not be compiled
    
    • vector

      [vector| a b c d |] builds matrix 4x1 [ [a], [b], [c], [d] ]

  • operator

    [operator| (x, y) => (y, x) |] builds matrix 2x2 of operator [ [0, 1], [1, 0] ] that swaps coodrinates
    [operator| (x, y) => (2 * x, y) |] builds matrix 2x2 of operator [ [2, 0], [0, 1] ] that doubles x coordinate

    Example:

    [operator| (x, y) => (3 * y, x / 2) |] ~*~ [vector| 2 8 |] == [vector| 24 1 |]
    

Syntax:

  • matrix: val11 val12 .. val1n; val21 val22 .. val2n; ..; valm1 valm2 .. valmn
  • vector: val1 val2 .. valn
  • operator: (var1, var2, .., varn) => (exp1, exp2, .., expn)
    where
    • val is number literal, variable or any Haskell expression between ( and )
    • var is Haskell variable
    • exp is any Haskell expression

Also there are basic operations as determinant, transposition, etc.