logo back up home forward   further reading more topics »

Maths - Inverse

Can we use the same trick that we used with complex numbers, that is multiply top and bottom of equation by the conjugate, which will convert the denominator into a scalar making the division possible.

Terminology:

  input result (1/input)
scalar a.e e
vector a.e1 , a.e2 , a.e3 e1 , e2 , e3
bivector a.e12 , a.e31 , a.e23 e12 , e31 , e23
trivector a.e123 e123

Since I'm not yet sure how to calculate the inverse of a multivector, I'll first try an easier problem, how to calculate the inverse of parts of a multivector (scalar, vector, bivector and trivector).

inverse of scalar

e-1 = 1/a.e

inverse of vector

(e1 + e2 + e3 )-1

use conjugate (-e1 - e2 - e3 )

so multiplying a vector by its conjugate gives:

(e1 + e2 + e3 ) (-e1 -e2 -e3 ) = -e12 -e22 -e32

so (e1 + e2 + e3 )-1 = (-e1 - e2 - e3 )/(-e12 -e22 -e32)

e1 = a.e1/(a.e12 +a.e22 +a.e32)
e2 = a.e2/(a.e12 +a.e22 +a.e32)
e3 = a.e3/(a.e12 +a.e22 +a.e32)

inverse of bivector

(e12 + e31 + e23)-1

use conjugate (-e12 - e31 - e23)

so multiplying a bivector by its conjugate gives:

(e12 + e31 + e23) (-e12 - e31 - e23) = e122 + e312 + e232

so (e12 + e31 + e23)-1 = (-e12 - e31 - e23)/(e122 + e312 + e232)

e12 = - a.e12/(a.e12 +a.e22 +a.e32)
e31 = - a.e31/(a.e12 +a.e22 +a.e32)
e23 = - a.e23/(a.e12 +a.e22 +a.e32)

inverse of trivector

e123-1 = a.e123 / (a.e123 * a.e123) = -1/a.e123

inverse of multivector

If it follows the pattern then it would be:

(e1 + e2 + e3 + e12 + e31 + e23 + e123)-1 = (e -e1 -e2 -e3 - e12 - e31 - e23 + a.e123)/(e2 - ex2 - ey2 - ez2 + e122 + e312 + e232 - e1232)

but is it? this would make the conjugate e -e1 -e2 -e3 - e12 - e31 - e23 + a.e123

so if we multiply a multivector by this possible conjugate we get:

(a.e1 + a.e2 + a.e3 + a.e12 + a.e31 + a.e23 + a.e123)(a.e -a.e1 -a.e2 -a.e3 - a.e12 - a.e31 - a.e23 + a.e123)

which gives:

e = a.e2 - a.e12 - a.e22 - a.e32 + a.e122 + a.e312 + a.e232 - a.e1232
e123 = 2*a.e * a.e123 - 2*a.e1 *a.e23 -2*a.e2*a.e31 - 2*a.e3*a.e12

so due to this extra e123 term this will only work if:

a.e * a.e123 = a.e1 *a.e23 + a.e2*a.e31 + a.e3*a.e12

which would make the extra term zero.

Although not necessary to calculate the inverse, the calculation would be a lot simpler if:

1 = a.e2 - a.e12 - a.e22 - a.e32 + a.e122 + a.e312 + a.e232 - a.e1232

so if,

a.e * a.e123 = a.e1 *a.e23 + a.e2*a.e31 + a.e3*a.e12

and

1 = a.e2 - a.e12 - a.e22 - a.e32 + a.e122 + a.e312 + a.e232 - a.e1232

then,

(e1 + e2 + e3 + e12 + e31 + e23 + e123)-1 = e -e1 -e2 -e3 - e12 - e31 - e23 + a.e123

Derivations

In order to establish the conditions for A A† = 1 then I will try multiplying out each term for the 3D case, this is a brute force approach, can anyone think of a better approach?. A A† gives the following result:

e = -a.e * a.e123 - a.e1 * a.e23 - a.e2 * a.e31 - a.e3 * a.e12 - a.e12 * a.e3 - a.e31 * a.e2 - a.e23 * a.e1 - a.e123 * a.e
e1 = -a.e1 * a.e123 - a.e * a.e23 + a.e12 * a.e31 - a.e31 * a.e12 + a.e2 * a.e3 - a.e3 * a.e2 - a.e123 * a.e1 - a.e23 * a.e
e2 = -a.e2 * a.e123 - a.e12 * a.e23 - a.e * a.e31 + a.e23 * a.e12 - a.e1 * a.e3 - a.e123 * a.e2 + a.e3 * a.e1 - a.e31 * a.e
e3 = -a.e3 * a.e123 + a.e31 * a.e23 - a.e23 * a.e31 - a.e * a.e12 - a.e123 * a.e3 + a.e1 * a.e2 - a.e2 * a.e1 - a.e12 * a.e
e12 = -a.e12 * a.e123 - a.e2 * a.e23 + a.e1 * a.e31 - a.e123 * a.e12 + a.e * a.e3 + a.e23 * a.e2 - a.e31 * a.e1 + a.e3 * a.e
e31 = -a.e31 * a.e123 + a.e3 * a.e23 - a.e123 * a.e31 - a.e1 * a.e12 - a.e23 * a.e3 + a.e * a.e2 + a.e12 * a.e1 + a.e2 * a.e
e23 = -a.e23 * a.e123 - a.e123 * a.e23 - a.e3 * a.e31 + a.e2 * a.e12 + a.e31 * a.e3 - a.e12 * a.e2 + a.e * a.e1 + a.e1 * a.e
e123 = -a.e123 * a.e123 - a.e23 * a.e23 - a.e31 * a.e31 - a.e12 * a.e12 + a.e3 * a.e3 + a.e2 * a.e2 + a.e1 * a.e1 + a.e * a.e

canceling out positive and negative terms and adding equal terms gives:

e = -2*a.e * a.e123 -2* a.e1 * a.e23 -2* a.e2 * a.e31 -2* a.e3 * a.e12        
e1 = -2*a.e1 * a.e123 -2* a.e * a.e23            
e2 = -2*a.e2 * a.e123 -2* a.e * a.e31            
e3 = -2*a.e3 * a.e123 - 2*a.e * a.e12            
e12 = -2*a.e12 * a.e123 + 2*a.e * a.e3            
e31 = -2*a.e31 * a.e123 +2* a.e * a.e2            
e23 = -2*a.e23 * a.e123 + 2*a.e * a.e1            
e123 = -a.e1232 - a.e232 - a.e312 - a.e122 + a.e32 + a.e22 + a.e12 + a.e2

setting these terms to equal a scalar value of 1 (all other components = 0) and rearranging these terms gives:

We have 8 unknowns and 8 equations, so if they are all independent we should be able to solve, however I suspect they are not independent. For instance if we take the 2nd and 7th equation:

we get:

a.e123/a.e = - a.e23 / a.e1 = a.e1 / a.e23

so

- a.e232= a.e12

which is true for both:

a.e23= a.e1
and a.e23= -a.e1

Can anyone see a way to simplify these equations, please let me know here.

One condition that might satisfy simplify things is if:

This would then reduce us to 4 variables and then this type of 3D multivector would then have the same properties as quaternions and so would be equivalent to quaternions.

Does anyone know if there are any other restrictions we could put on 3D multivectors which would make them invertible but don't just reduce to quaternions?


metadata block
see also:

 

Correspondence about this page

Book Shop - Further reading.

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.

cover 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.

Commercial Software Shop

Where I can, I have put links to Amazon for commercial software, not directly related to the software project, but related to the subject being discussed, click on the appropriate country flag to get more details of the software or to buy it from them.

cover Mathmatica

Can you help?

Please send me any improvements to here. I would appreciate ideas to make the pages more useful including error correction, ideas for new pages, improvements to wording. It helps if you quote the full URL of the page.

 

Terminology and Notation

Specific to this page here:

 

program

I am working on a project which uses these principles, if you would like to help me with this you are welcome to join in, here:

http://sourceforge.net/projects/mjbworld/

This site may have errors. Don't use for critical systems.

Copyright (c) 1998-2008 Martin John Baker - All rights reserved.