Stability | experimental |
---|---|

Maintainer | Alberto Ruiz <aruiz@um.es> |

Safe Haskell | Safe-Infered |

A simple implementation of Geometric Algebra.

The Num instance provides the geometric product, and the Fractional instance provides the inverse of multivectors.

This module provides a simple Euclidean embedding.

- data Multivector
- coords :: Multivector -> [(Double, [Int])]
- scalar :: Double -> Multivector
- vector :: [Double] -> Multivector
- e :: Int -> Multivector
- (/\) :: Multivector -> Multivector -> Multivector
- (-|) :: Multivector -> Multivector -> Multivector
- (\/) :: Multivector -> Multivector -> Multivector
- rever :: Multivector -> Multivector
- full :: Int -> Multivector
- rotor :: Int -> Double -> Multivector -> Multivector
- apply :: (Int -> Multivector) -> Multivector -> Multivector
- grade :: Int -> Multivector -> Multivector
- maxGrade :: Multivector -> Int
- maxDim :: Multivector -> Int
- fromTensor :: Tensor Double -> Multivector

# Documentation

coords :: Multivector -> [(Double, [Int])]Source

scalar :: Double -> MultivectorSource

Creates a scalar multivector.

vector :: [Double] -> MultivectorSource

Creates a grade 1 multivector of from a list of coordinates.

e :: Int -> MultivectorSource

The k-th basis element.

(/\) :: Multivector -> Multivector -> MultivectorSource

The exterior (outer) product.

(-|) :: Multivector -> Multivector -> MultivectorSource

The contractive inner product.

(\/) :: Multivector -> Multivector -> MultivectorSource

Intersection of subspaces.

rever :: Multivector -> MultivectorSource

The reversion operator.

full :: Int -> MultivectorSource

The full space of the given dimension. This is the leviCivita simbol, and the basis of the pseudoscalar.

:: Int | dimension of the space |

-> Double | angle |

-> Multivector | axis |

-> Multivector | result |

The rotor operator, used in a sandwich product.

apply :: (Int -> Multivector) -> Multivector -> MultivectorSource

Apply a linear transformation, expressed as the image of the element i-th of the basis.

(This is a monadic bind!)

grade :: Int -> Multivector -> MultivectorSource

maxGrade :: Multivector -> IntSource

maxDim :: Multivector -> IntSource

fromTensor :: Tensor Double -> MultivectorSource

Extract a multivector representation from a full antisymmetric tensor.

(We do not check that the tensor is actually antisymmetric.)