Copyright | (c) Andrew Lelechenko 2014-2015 |
---|---|
License | GPL-3 |
Maintainer | andrew.lelechenko@gmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | Safe |
Language | Haskell2010 |
Provides types and functions for matrices and vectors of order 3. Can be used instead of Data.Matrix to reduce overhead and simplify code.
- data Matrix3 t = Matrix3 {}
- fromList :: [t] -> Matrix3 t
- toList :: Foldable t => forall a. t a -> [a]
- det :: Num t => Matrix3 t -> t
- multCol :: Num t => Matrix3 t -> (t, t, t) -> (t, t, t)
- normalize :: Integral t => Matrix3 t -> Matrix3 t
- makarovMult :: Num t => Matrix3 t -> Matrix3 t -> Matrix3 t
- ladermanMult :: Num t => Matrix3 t -> Matrix3 t -> Matrix3 t
Documentation
Matrix of order 3. Instances of Num
and Fractional
are given in terms of the multiplicative group of matrices,
not the additive one. E. g.,
toList 1 == [1,0,0,0,1,0,0,0,1] toList 1 /= [1,1,1,1,1,1,1,1,1]
Functor Matrix3 Source # | |
Foldable Matrix3 Source # | |
Eq t => Eq (Matrix3 t) Source # | |
(Fractional t, Ord t) => Fractional (Matrix3 t) Source # | |
(Num t, Ord t) => Num (Matrix3 t) Source # | |
Show t => Show (Matrix3 t) Source # | |
Generic (Matrix3 t) Source # | |
NFData t => NFData (Matrix3 t) Source # | |
Pretty t => Pretty (Matrix3 t) Source # | |
type Rep (Matrix3 t) Source # | |
fromList :: [t] -> Matrix3 t Source #
Convert a list of 9 elements into Matrix3
. Reverse conversion can be done by toList
from Data.Foldable.
multCol :: Num t => Matrix3 t -> (t, t, t) -> (t, t, t) Source #
Multiplicate a matrix by a vector (considered as a column).
normalize :: Integral t => Matrix3 t -> Matrix3 t Source #
Divide all elements of the matrix by their greatest common divisor. This is useful for matrices of projective transformations to reduce the magnitude of computations.
makarovMult :: Num t => Matrix3 t -> Matrix3 t -> Matrix3 t Source #
Multiplicate matrices under assumption that multiplication of elements is commutative. Requires 22 multiplications and 66 additions. It becomes faster than usual multiplication (which requires 27 multiplications and 18 additions), when matrix's elements are large (several hundred digits) integers.
An algorithm follows O. M. Makarov. An algorithm for multiplication of 3 × 3 matrices. Zh. Vychisl. Mat. i Mat. Fiz., 26(2):293–294, 320, 1986.
We were able to reduce the number of additions from 105 to 66 by sofisticated choice of intermediate variables.
ladermanMult :: Num t => Matrix3 t -> Matrix3 t -> Matrix3 t Source #
Multiplicate matrices by 23 multiplications and 68 additions. It becomes faster than usual multiplication (which requires 27 multiplications and 18 additions), when matrix's elements are large (several hundred digits) integers.
An algorithm follows J. Laderman. A noncommutative algorithm for multiplying 3 × 3 matrices using 23 multiplications. Bull. Amer. Math. Soc., 82:126–128, 1976.
We were able to reduce the number of additions from 98 to 68 by sofisticated choice of intermediate variables.