Maths - clifford / Geometric Algebra - extend cross product

Geometric algebra starts with a vector space spanned by a set of basis vectors e1, e2…. When we take the outer product of any of these bases we get a new basis which cannot be further reduced: e1^ e2. So an 'n' dimensional vector space allows us to generate a 2n dimensional multivector.

So why doesn't the number of dimensions increase to infinity as we do more multiplications? Well there only a fixed number of basis vectors and when we have two parallel basis vectors they cancel out to be replaced with a scalar, for instance e1^ e1 = scalar.

Inner and Outer products

trasitions

In addition to the geometric product there are two more types of multiplication used in Geometric Algebra. These extend and generalise the 'dot' and 'cross' products used in 3D vector algebra.

Inner product by a vector reduces the grade of a multivector. It is related to the dot product.

Outer product by a vector increases the grade of a multivector. It is related to the cross product.

Outer product

We want the outer product to be an extension of the vector cross product:

x = Ay * Bz - By * Az
y = Az * Bx - Bz * Ax
z = Ax * By - Bx * Ay

This gives a bivector which is mutually perpendicular to the vectors being multiplied. But how do we extend this so that we can multiply non-vectors? There are different definitions for the outer product so we need to be careful, if you use other websites or books you may find that they use different definitions. Here is the full 3D Outer multiplication table:

a^b
b.e b.e1 b.e2 b.e3 b.e12 b.e31 b.e23 b.e123
a.e e e1 e2 e3 e12 e31 e23 e123
a.e1 e1 0 e12 -e31 0 0 e123 0
a.e2 e2 -e12 0 e23 0 e123 0 0
a.e3 e3 e31 -e23 0 e123 0 0 0
a.e12 e12 0 0 e123 0 0 0 0
a.e31 e31 0 e123 0 0 0 0 0
a.e23 e23 e123 0 0 0 0 0 0
a.e123 e123 0 0 0 0 0 0 0

This has the following nice properties:

It is relatively easy to derive using the following rules:

By starting with the vector cross product terms we can derive the remaining terms in the table as follows:

e1 ^ e1 = 0
e2 ^ e2 = 0
e3 ^ e3 = 0

because we have chosen to let vectors square to zero as with vector cross product.

e1 ^ e2 = e12
e2 ^ e1 = -e12

e2 ^ e3 = e23
e3 ^ e2 = -e23

e3 ^ e1 = e31
e1 ^ e3 = -e31

As with vector cross product, vectors anticommute, we can also derive this because the vectors will cancel out when a general vector is squared: (a e1 + b e2+ c e3)2 =0.

e1 ^ e12 =0
e1 ^ e31 = 0
e1 ^ e23 = e123
e1 ^ e123 = 0

e2 ^ e12 = 0
e2 ^ e31 = -e2 e13 = e123
e2 ^ e23 = 0
e2 ^ e123 = 0

e3 ^ e12 = -e132= e123
e3 ^ e31 = 0
e3 ^ e23 = 0
e3 ^ e123 = 0

these are derived from the results above using these rules.

e12 ^ e1 = 0
e31 ^ e1 = 0
e23 ^ e1 = -e213= e123
e123 ^ e1 = 0

e12 ^ e2 = 0
e31 ^ e2 = -e132 = e123
e23 ^ e2 = 0
e123 ^ e2 =0

e12 ^ e3 = e123
e31 ^ e3 = 0
e23 ^ e3 = 0
e123 ^ e3 = 0

these are derived from the results above using these rules.

e12 ^ e12 = 0
e12 ^ e31 = 0
e12 ^ e23 =0
e12 ^ e123 = 0

e31 ^ e12 = 0
e31 ^ e31 = 0
e31 ^ e23 = 0
e31 ^ e123 = 0

e23 ^ e12 = 0
e23 ^ e31 = 0
e23 ^ e23 = 0
e23 ^ e123 = 0

these are derived from the results above using these rules.

e123 ^ e12 = 0
e123 ^ e31 = 0
e123 ^ e23 = 0
e123 ^ e123 = 0 e123 e312= -e123 e321= 0

 

Inner product.

We want the outer product to be an extension of the vector dot product:

A • B = Ax * Bx + Ay * By + Az * Bz

This gives a scalar which depends on the angle between the vectors being multiplied, it is zero if the vectors are perpendicular and zero if the vectors are parallel. But how do we extend this so that we can multiply non-vectors? There are different definitions for the inner product so we need to be careful, if you use other websites or books you may find that they use different definitions. Here we will use the 'semi-commutative inner product' which has the following 3D Inner multiplication table:

a•b
b.e b.e1 b.e2 b.e3 b.e12 b.e31 b.e23 b.e123
a.e 0 0 0 0 0 0 0 0
a.e1 0 e 0 0 e2 -e3 0 e23
a.e2 0 0 e 0 -e1 0 e3 e31
a.e3 0 0 0 e 0 e1 -e2 e12
a.e12 0 -e2 e1 0 -e 0 0 -e3
a.e31 0 e3 0 -e1 0 -e 0 -e2
a.e23 0 0 -e3 e2 0 0 -e -e1
a.e123 0 e23 e31 e12 -e3 -e2 -e1 -e

This has the following nice properties:

By starting with the vector cross product terms we can derive the remaining terms in the table as follows:

e1 • e1 = e
e2 • e2 = e
e2 • e2 = e

because we have chosen to let vectors square to zero as with vector cross product.

e1 • e2 = 0
e2 • e1 = 0

e2 • e3 = 0
e3 • e2 = 0

e3 • e1 = 0
e1 • e3 = 0

As with vector cross product vectors anticommute, we can also derive this because the vectors will cancel out when a general vector is squared: (a e1 + b e2+ c e3)2 =a2 + b2+ c2

e1 • e12 =e2
e1 • e31 = -e1 • e13 = -e3
e1 • e23 = 0
e1 • e123 = e23

e2 • e12 = -e2 • e21 = -e1
e2 • e31 = 0
e2 • e23 = e3
e2 • e123 = -e2 • e213 = e31

e3 • e12 = 0
e3 • e31 = e1
e3 • e23 = -e3 • e32 = -e2
e3 • e123 =e3 • e312 = e12

The result of inner multiplying a vector base by a bivector base depends on weather they contain a common base,

if they do, make the bases adjacent then the common base cancels out: e1 • e12 =e2

if they don't the result is zero: e1•(e2^e3)=0

Same thing for inner multiplying by a tri-vector.

e12 • e1 = -e21 • e1 = -e2
e31 • e1 = e3
e23 • e1 = 0
e123 • e1 =e231 • e1 = e23

e12 • e2 = e1
e31 • e2 = 0
e23 • e2 = -e32 • e2 = -e3
e123 • e2 = -e132 • e2 = -e13 =e31

e12 • e3 = 0
e31 • e3 = -e13 • e3 = -e1
e23 • e3 = e2
e123 • e3 = e12

 

e12 • e12 = -e21 • e12 = -e
e12 • e31 = 0
e12 • e23 =0
e12 • e123 = -e3

e31 • e12 = 0
e31 • e31 = -e
e31 • e23 = 0
e31 • e123 = -e2

e23 • e12 = 0
e23 • e31 = 0
e23 • e23 = -e
e23 • e123 = -e1

When multiplying two bivectors, if the bivectors have the same bases then we need to reverse one of them to get adjacent terms together, then we can cancel out terms, so we always get -e.

If the bivectors are different the result will always be zero.

When multiplying a bivector by a trivector we reverse as necessarily to cancel out two of the terms to leave a vector.

e123 • e12 = -e3
e123 • e31 = -e2
e123 • e23 = -e1
e123 • e123 = -e

 

Identities

The following identities relate the inner, outer and geometric products of vectors (grade one multivector) :

a•b = ½ (ab + ba) This is symmetrical (a•b = b•a)
a^b = ½ (ab - ba) This is anti-symmetrical (a^b = - b^a)
a * b = a•b + a^b  

Where:

We can extend this to the multipication of a vector by a general multivector as follows:

a•K = ½ (aK + (-1)k+1Ka)

a^K = ½ (aK + (-1)k Ka)

a*K = a•K + a^K

Where k is the grade of K. The (-1)k factor alternates the sign as follows:

grade k (-1)k (-1)k+1 a•K = ½ (aK + (-1)k+1Ka) a^K = ½ (aK + (-1)k Ka)
0 (scalar) 1 -1 a•K = ½ (aK - Ka) = 0 a^K = ½ (aK + Ka) = aK
1 (vector) -1 1 a•K = ½ (aK + Ka) = aK a^K = ½ (aK - Ka) = 0
2 (bivector) 1 -1 a•K = ½ (aK - Ka) = 0 a^K = ½ (aK + Ka) = aK
3 (trivector) -1 1 a•K = ½ (aK + Ka) = aK a^K = ½ (aK - Ka) = 0

However we have not yet created a general expression for any grade of multivector, for instance a bivector times a bivector, which does not follow the above pattern.

A<2> ^ B<2> = 0

Can anyone help with a more general expression.

Other identities for •

(a^b)•(c^d) = a•(b•(c^d))= b•(c^d)•a from Hestenes (New Foundations of Classical Mechanics) pp47 exercise 2.1

The inner product is not associative: a•(b•c) may not equal (a•b)•c


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.

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

 

flag flag flag flag flag flag New Foundations for Classical Mechanics (Fundamental Theories of Physics). This is very good on the geometric interpretation of this algebra. It has lots of insights into the mechanics of solid bodies. I still cant work out if the position, velocity, etc. of solid bodies can be represented by a 3D multivector or if 4 or 5D multivectors are required to represent translation and rotation.

 

Terminology and Notation

Specific to this page here:

 

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

Copyright (c) 1998-2023 Martin John Baker - All rights reserved - privacy policy.