Module

Data.Sparse.Matrix

Package
purescript-sparse-matrices
Repository
Ebmtranceboy/purescript-sparse-matrices

#Matrix Source

newtype Matrix a

Representation of a matrix without storage of the zero coefficients.

> -- Working with Sparse Matrices
> import Data.Sparse.Matrix
> -- Define a matrix with sum of terms (see Data.Sparse.Polynomial)
> a = Matrix {height:3, width:2, coefficients: 5.0^2^0+7.0^0^1}
> a
 0.0 7.0
 0.0 0.0
 5.0 0.0

> -- Modify all the non-zero elements with the functor
> b = (_ + 2.0) <$> a
> b
 0.0 9.0
 0.0 0.0
 7.0 0.0

> -- Set a specific element
> c = 2.0^1^0 ~ b
> c
 0.0 9.0
 2.0 0.0
 7.0 0.0

> -- Inspect a specific location
> c??[1,0]
2.0

> -- transpose, multiply
> d = a * transpose c
> d
 63.0 0.0 0.0
 0.0 0.0 0.0
 0.0 10.0 35.0

> -- Weight a specific element
> e = 0.5^0^0 ~* d
> e
 31.5 0.0 0.0
 0.0 0.0 0.0
 0.0 10.0 35.0


> -- Increment a specific element
> f = 4.0^1^1 ~+ e
> f
 31.5 0.0 0.0
 0.0 4.0 0.0
 0.0 10.0 35.0

> -- Identity, subtraction
> g = f - eye 3
> g
 30.5 0.0 0.0
 0.0 3.0 0.0
 0.0 10.0 34.0

> -- Vectors are just column matrices
> v = Matrix {height:3, width:1, coefficients: 1.0^0^0+2.0^1^0+3.0^2^0}
> v
 1.0
 2.0
 3.0

> -- Solve the linear system
> luSolve g v
 0.03278688524590164
 0.6666666666666666
 -0.1078431372549019

Constructors

Instances

#Square Source

type Square a = Matrix a

#Vector Source

type Vector a = Matrix a

#determinant Source

determinant :: forall a. Eq a => Semiring a => Ring a => EuclideanRing a => Square a -> a

Determinant of a square matrix

#extract Source

extract :: forall a. Eq a => Semiring a => Matrix a -> Array Int -> a

Coefficient extraction

#eye Source

eye :: forall a. Eq a => Semiring a => Int -> Matrix a

Identity matrix

#height Source

height :: forall a. Matrix a -> Int

#increment Source

increment :: forall a. Eq a => Semiring a => Ring a => Poly2 a -> Matrix a -> Matrix a

Element increment

#internalMap Source

internalMap :: forall a. Polynomial a -> Map Int a

Returns the polynomial internal structure

#lu Source

lu :: forall a. Eq a => Semiring a => Ring a => EuclideanRing a => Square a -> { l :: Square a, u :: Square a }

Returns the 2 square matrices L and U such that

  • LU = A where A is a square matrix
  • L is triangular inferior with unitary diagonal elements
  • U is triangular superior

#luSolve Source

luSolve :: forall a. Eq a => Semiring a => Ring a => EuclideanRing a => Square a -> Matrix a -> Matrix a

Solves the system Ax=B for x, for A square inversible and any B

#monoPol Source

monoPol :: forall a. a -> Int -> Polynomial a

Imported from Data.Sparse.Polynomial

#parseMonom Source

parseMonom :: forall a. Eq a => Semiring a => Poly2 a -> Maybe { i :: Int, j :: Int, v :: a }

#replace Source

replace :: forall a. Eq a => Semiring a => Ring a => Poly2 a -> Matrix a -> Matrix a

Element replacement

#scale Source

scale :: forall a. Eq a => Semiring a => Ring a => EuclideanRing a => Poly2 a -> Matrix a -> Matrix a

Element weighting

#transpose Source

transpose :: forall a. Eq a => Semiring a => Ring a => Matrix a -> Matrix a

Matrix transposition

#width Source

width :: forall a. Matrix a -> Int

#zeros Source

zeros :: forall a. Eq a => Semiring a => Int -> Int -> Matrix a

Zero matrix

#(??) Source

Operator alias for Data.Sparse.Matrix.extract (left-associative / precedence 8)

Coefficient extraction infix notation

#(^) Source

Operator alias for Data.Sparse.Matrix.monoPol (left-associative / precedence 8)

#(~) Source

Operator alias for Data.Sparse.Matrix.replace (non-associative / precedence 7)

Element replacement infix notation

#(~*) Source

Operator alias for Data.Sparse.Matrix.scale (non-associative / precedence 7)

Element weighting infix notation

#(~+) Source

Operator alias for Data.Sparse.Matrix.increment (non-associative / precedence 7)

Element increment infix notation