linear-vect-0.1.1.0: A low-dimensional linear algebra library, operating on the Num typeclass

Safe HaskellNone
LanguageHaskell2010

Linear.Class

Description

class declarations

Synopsis

Documentation

class AbelianGroup g where Source

Methods

(&+) :: g -> g -> g infixl 6 Source

(&-) :: g -> g -> g infixl 6 Source

neg :: g -> g Source

zero :: g Source

Instances

Num a => AbelianGroup (V4 a) 
Num a => AbelianGroup (V3 a) 
Num a => AbelianGroup (V2 a) 
Num a => AbelianGroup (M4 a) 
Num a => AbelianGroup (M3 a) 
Num a => AbelianGroup (M2 a) 

vecSum :: AbelianGroup g => [g] -> g Source

class MultSemiGroup r where Source

Methods

(.*.) :: r -> r -> r infixl 7 Source

one :: r Source

class (AbelianGroup r, MultSemiGroup r) => Ring r Source

Instances

Num a => Ring (M4 a) 
Fractional a => Ring (M3 a) 
Fractional a => Ring (M2 a) 

class LeftModule r m where Source

Minimal complete definition

lmul

Methods

lmul :: r -> m -> m Source

(*.) :: r -> m -> m infixr 7 Source

Instances

Num a => LeftModule (M4 a) (V4 a) 
Num a => LeftModule (M3 a) (V3 a) 
Num a => LeftModule (M2 a) (V2 a) 

class RightModule m r | m -> r, r -> m where Source

Minimal complete definition

rmul

Methods

rmul :: m -> r -> m Source

(.*) :: m -> r -> m infixl 7 Source

Instances

Num a => RightModule (V4 a) (M4 a) 
Fractional a => RightModule (V3 a) (M3 a) 
Fractional a => RightModule (V2 a) (M2 a) 

class AbelianGroup (v a) => Vector a v where Source

Minimal complete definition

mapVec, scalarMul

Methods

mapVec :: (a -> a) -> v a -> v a Source

scalarMul :: a -> v a -> v a Source

(*&) :: a -> v a -> v a infixr 7 Source

(&*) :: v a -> a -> v a infixl 7 Source

Instances

Num a => Vector a V4 
Num a => Vector a V3 
Num a => Vector a V2 
Num a => Vector a M4 
Num a => Vector a M3 
Num a => Vector a M2 

class Num a => DotProd a v where Source

Minimal complete definition

(&.)

Methods

(&.) :: v a -> v a -> a infix 7 Source

dotprod :: v a -> v a -> a Source

normsqr :: v a -> a Source

lensqr :: v a -> a Source

Instances

class (Floating a, DotProd a v) => Norm a v where Source

Minimal complete definition

Nothing

Methods

norm :: v a -> a Source

vlen :: v a -> a Source

Instances

Floating a => Norm a V4 
Floating a => Norm a V3 
Floating a => Norm a V2 
Floating a => Norm a Normal4 
Floating a => Norm a Normal3 
Floating a => Norm a Normal2 

class CrossProd v where Source

Cross product

Minimal complete definition

crossprod

Methods

crossprod :: v -> v -> v Source

(&^) :: v -> v -> v infix 7 Source

Instances

Floating a => CrossProd (Normal3 a) 
Num a => CrossProd (V3 a) 

normalize :: (Vector a v, Norm a v) => v a -> v a Source

distance :: (Vector a v, Norm a v) => v a -> v a -> a Source

angle :: (Vector a v, Norm a v) => v a -> v a -> a Source

the angle between two vectors

angle' :: (Floating a, Vector a v, UnitVector a v u, DotProd a v) => u a -> u a -> a Source

the angle between two unit vectors

class (Vector a v, Norm a v) => UnitVector a v u | u -> v, v -> u where Source

Minimal complete definition

mkNormal, toNormalUnsafe, fromNormal

Methods

mkNormal Source

Arguments

:: v a 
-> u a

normalizes the input

toNormalUnsafe Source

Arguments

:: v a 
-> u a

does not normalize the input!

fromNormal :: u a -> v a Source

fromNormalRadius :: a -> u a -> v a Source

class Pointwise v where Source

Pointwise multiplication

Minimal complete definition

pointwise

Methods

pointwise :: v -> v -> v Source

(&!) :: v -> v -> v infix 7 Source

Instances

Num a => Pointwise (V4 a) 
Num a => Pointwise (V3 a) 
Num a => Pointwise (V2 a) 
Num a => Pointwise (M4 a) 
Num a => Pointwise (M3 a) 
Num a => Pointwise (M2 a) 

class Extend a u v where Source

conversion between vectors (and matrices) of different dimensions

Methods

extendZero Source

Arguments

:: u a 
-> v a

example: extendZero (V2 5 6) = V4 5 6 0 0

extendWith Source

Arguments

:: a 
-> u a 
-> v a

example: extendWith 1 (V2 5 6) = V4 5 6 1 1

trim Source

Arguments

:: v a 
-> u a

example: trim (V4 5 6 7 8) = V2 5 6

Instances

Num a => Extend a V3 V4 
Num a => Extend a V2 V4 
Num a => Extend a V2 V3 
Num a => Extend a M3 M4 
Num a => Extend a M2 M4 
Num a => Extend a M2 M3 

class Dimension a where Source

Methods

dim :: a -> Int Source

Instances

Num a => Dimension (Normal4 a) 
Num a => Dimension (Normal3 a) 
Num a => Dimension (Normal2 a) 
Num a => Dimension (V4 a) 
Num a => Dimension (V3 a) 
Num a => Dimension (V2 a) 
Num a => Dimension (Ortho4 a) 
Num a => Dimension (Ortho3 a) 
Num a => Dimension (Ortho2 a) 
Num a => Dimension (M4 a) 
Num a => Dimension (M3 a) 
Num a => Dimension (M2 a) 

class Transpose m n | m -> n, n -> m where Source

Methods

transpose :: m -> n Source

Instances

Transpose (Proj4 a) (Proj4 a) 
Transpose (Proj3 a) (Proj3 a) 
Transpose (Ortho4 a) (Ortho4 a) 
Transpose (Ortho3 a) (Ortho3 a) 
Transpose (Ortho2 a) (Ortho2 a) 
Transpose (M4x3 a) (M3x4 a) 
Transpose (M4x2 a) (M2x4 a) 
Transpose (M3x4 a) (M4x3 a) 
Transpose (M3x2 a) (M2x3 a) 
Transpose (M2x4 a) (M4x2 a) 
Transpose (M2x3 a) (M3x2 a) 
Transpose (M4 a) (M4 a) 
Transpose (M3 a) (M3 a) 
Transpose (M2 a) (M2 a) 

class Tensor t v | t -> v where Source

Outer product (could be unified with Diagonal?)

Methods

outer :: v -> v -> t Source

Instances

Num a => Tensor (M4 a) (V4 a) 
Num a => Tensor (M3 a) (V3 a) 
Num a => Tensor (M2 a) (V2 a) 

class Diagonal s t | t -> s where Source

makes a diagonal matrix from a vector

Methods

diag :: s -> t Source

Instances

Num a => Diagonal (V4 a) (M4 a) 
Num a => Diagonal (V3 a) (M3 a) 
Num a => Diagonal (V2 a) (M2 a) 

class Determinant a m where Source

Methods

det :: m -> a Source

Instances

Num a => Determinant a (M4 a) 
Num a => Determinant a (M3 a) 
Num a => Determinant a (M2 a) 
Num a => Determinant a (Ortho2 a) 
Num a => Determinant a (Ortho3 a) 
Num a => Determinant a (Ortho4 a) 
Num a => Determinant a (V2 a, V2 a) 
Num a => Determinant a (V3 a, V3 a, V3 a) 

class SquareMatrix (m a) => Orthogonal a m o | m -> o, o -> m where Source

Methods

fromOrtho :: o a -> m a Source

toOrthoUnsafe :: m a -> o a Source

class (Vector a v, Orthogonal a n o, Diagonal (v a) (n a)) => Projective a v n o m p | m -> p, p -> m, p -> o, o -> p, p -> n, n -> p, p -> v, v -> p, n -> o, n -> v, v -> n where Source

"Projective" matrices have the following form: the top left corner is an any matrix, the bottom right corner is 1, and the top-right column is zero. These describe the affine orthogonal transformation of the space one dimension less.

Methods

fromProjective :: p a -> m a Source

toProjectiveUnsafe :: m a -> p a Source

orthogonal :: o a -> p a Source

linear :: n a -> p a Source

translation :: v a -> p a Source

scaling :: v a -> p a Source

class (AbelianGroup m, SquareMatrix m) => MatrixNorms a m where Source

Minimal complete definition

frobeniusNorm

Methods

frobeniusNorm Source

Arguments

:: m 
-> a

the frobenius norm (= euclidean norm in the space of matrices)

matrixDistance Source

Arguments

:: m 
-> m 
-> a

euclidean distance in the space of matrices

operatorNorm Source

Arguments

:: m 
-> a

(euclidean) operator norm (not implemented yet)

Instances

Floating a => MatrixNorms a (M4 a) 
Floating a => MatrixNorms a (M3 a) 
Floating a => MatrixNorms a (M2 a) 

project :: (Fractional a, Vector a v, DotProd a v) => v a -> v a -> v a Source

project' :: (Vector a v, UnitVector a v u, Norm a v) => v a -> u a -> v a Source

Projects the first vector down to the hyperplane orthogonal to the second (unit) vector

projectUnsafe :: (Vector a v, DotProd a v) => v a -> v a -> v a Source

Direction (second argument) is assumed to be a unit vector!

flipNormal :: UnitVector a v n => n a -> n a Source

Since unit vectors are not a group, we need a separate function.

householder :: (Vector a v, UnitVector a v u, SquareMatrix (m a), Vector a m, Tensor (m a) (v a)) => u a -> m a Source

Householder matrix, see http://en.wikipedia.org/wiki/Householder_transformation. In plain words, it is the reflection to the hyperplane orthogonal to the input vector.

householderOrtho :: (Vector a v, UnitVector a v u, SquareMatrix (m a), Vector a m, Tensor (m a) (v a), Orthogonal a m o) => u a -> o a Source