# Maths - Inverse Program

There are a number of open source programs that can work with Grassmann and Clifford Algebra. I have used Axiom, how to install Axiom here.

First we setup a completely general 3D basis:

 a b c d e f g h i

(I have put user input in red):

 ```(1) -> )library GRAS GrassmannAlgebra is now explicitly exposed in frame frame1 GrassmannAlgebra will be automatically loaded when needed from /home/martin/GRAS.NRLIB/GRAS (1) -> Eu := GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (1) GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) Type: Domain```

First we square a general vector :

 ```(2) -> m:Eu := multivector[0,x,y,0,z,0,0,0] (2) x e + y e + z e 1 2 3 Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (3) -> m*m 2 2 2 (3) i z + ((h + f)y + (g + c)x)z + e y + (d + b)x y + a x Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) ```

This gives a scalar value equal to:

 x y z
 a b c d e f g h i
 x y z

now we will try squaring bivectors:

 ```4) -> bivector:Eu := multivector[0,0,0,x,0,y,z,0] (4) x e e + y e e + z e e 1 2 1 3 2 3 Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (5) -> bivector*bivector (5) 2 (- e i + f h)z + (((- e - a)i + f h + c g)y + (- e i + f h - a e + b d)x)z + 2 2 (- a i + c g)y + (- a i + c g - a e + b d)x y + (- a e + b d)x + 2 ((d - b)x z + (d - b)x y + (d - b)x )e e 1 2 + 2 ((g - c)y z + (g - c)y + (g - c)x y)e e 1 3 + 2 ((h - f)z + ((h - f)y + (h - f)x)z)e e 2 3 Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (6) -> ```

 x y z
 - a e + b d - a e + b d - a e + b d - a i + c g - a i + c g - a i + c g - e i + f h - e i + f h - e i + f h
 x y z

now we will try multipy even terms by cojugate:

 ```(6) -> bivector:Eu := multivector[w,0,0,x,0,y,z,0] (6) w + x e e + y e e + z e e 1 2 1 3 2 3 Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (7) -> conj:Eu := multivector[w,0,0,-x,0,-y,-z,0] (7) w - x e e - y e e - z e e 1 2 1 3 2 3 Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (8) -> bivector*conj (8) 2 (e i - f h)z + (((e + a)i - f h - c g)y + (e i - f h + a e - b d)x)z + 2 2 2 (a i - c g)y + (a i - c g + a e - b d)x y + (a e - b d)x + w + 2 ((- d + b)x z + (- d + b)x y + (- d + b)x )e e 1 2 + 2 ((- g + c)y z + (- g + c)y + (- g + c)x y)e e 1 3 + 2 ((- h + f)z + ((- h + f)y + (- h + f)x)z)e e 2 3 Type: GrassmannAlgebra(3,Expression(Fraction(Integer)),[[a,b,c],[d,e,f],[g,h,i]]) (9) -> ```

y

Where I can, I have put links to Amazon for books that are relevant to the subject, click on the appropriate country flag to get more details of the book or to buy it from them.

 Clifford Algebra to Geometric Calculus: A Unified Language for Mathematics and Physics (Fundamental Theories of Physics). This book is intended for mathematicians and physicists rather than programmers, it is very theoretical. It covers the algebra and calculus of multivectors of any dimension and is not specific to 3D modelling.