"Time was when all the parts of the subject were dissevered, when algebra, geometry, and arithmetic either lived apart or kept up cold relations of acquaintance confined to occasional calls upon one another; but that is now at an end; they are drawn together and are constantly becoming more and more intimately related and connected by a thousand fresh ties, and we may confidently look forward to a time when they shall form but one body with one soul." --- J.J. Sylvester, 1869

    This document will not display correctly in Firefox. View in MSIE or Chrome instead.
    This document requires the SYMBOL font (ab). Clarity will be increased if the Arial Font is installed. If some symbols are not displayed correctly (such as uparrow [ ↑ ] or times [×] or half [½] ) , see Browser Issues. Use your browser View|Text Size control to increase the text size if desired. This document is under continuous revision. Feedback appreciated.


    Geometric algebra provides a practical alternative to conventional 3D vector methods which extends far more readily to higher dimensions. It also provides a coordinate independant symbolic geometry (an "algebra of directions") extendable into a geometric calculus of profound relevance to areas as diverse as quantum physics and computer vision.
    The purpose of this work is to provide a concise but comprehensive introduction and broad reference for geometric algebra for those interested in it as a powerful computational and theoretical resource that spans and unifies a diverse range of fields. Fuller more formal mathematical treatments exist elsewhere and this document can serve as a primer for tackling such works. It assumes familiarity with "conventional" 3D constructs such as vectors and matrices and such basic mathematical functions as cos(q) and ex.  Mathmatical notations used are defined in the glossary.

    Multivectors, the "elements" of Geometric Algbera, are a generalisation of traditional vectors that provide a far richer mathematical structure than vectors alone. Many programmers will have encountered particular multivectors before in the form of complex numbers and quaternians and the closest analogy for the generalisation of vectors to multivectors is perhaps complex numbers as a generalisation of real numbers. Regarding real numbers as a special case of the more general "class" or "field" of complex numbers allows logarithms of negative numbers and additional functions such as "complex conjugation". By generalising vectors to a particular subset of multivectors not only can vectors be multiplied and divided by eachother, but we obtain a multitude of useful conjugations and bilinear products and can usefully define logarithmic and trigonometric functions of them. Since particular N+2 dimensional multivectors    can represent arbitary N-dimesional lines, circles, planes, and spheres we can, for example, speak of taking the log of a sphere. Geometric objects become algebra elements ameniable to both purely symbolic and computational (numerical) manipulation.

    The notion of multiplying two 3D vectors together is familiar to programmers as the so called vector cross product a×b being a vector of direction perpendicular to vectors a and b with magnitude |a||b| sin(q) where q is the angle subtended by a and b. However, this only works in 3D. The fundamental essence of geometric algebra is the geometric vector product ab = a.b + aÙb where . is the traditional scalar-valued vector dot product and "2-blade" aÙb is the wedge or outter product described later. Everything else follows from this.   
    This section describes what multivectors are mathematically and lists the many operations and products that can be usefully applied to them in considerable detail. Of necessity some of this material is mathematically intensive and the reader is is encouraged to "skim" rather than absorbing every product, conjugation, normalisation technique and logarithmic computation strategum on their first pass. The "point" of multivectors is what you can do with them, and this is addressed in the later sections once the basics of the symbolic and computational manipulations are covered.

    When first encountering multivectors they can seem bewildering, with a plethora of products and an overload of operators provided for their manipulation. But familiarity breeds respect. Given that multivectors are the "language" of (dynamic) geometry and by implication of nature itself, a half-dozen new symbols does not seem excessive.

    In the Multivectors Programming chapter we describe how to impliment multivectors of both low and high dimension N in C/C++.
    In the Multivectors as Geometric Objects we will see some of the applications of multivectors in the elegant representation and manipulation of N-dimensional spheres, planes, lines and conics.
    In the Multivectors as Transformations we will see how multivectors can also be used to transform, distort, displace, and morph such geometric constructs.
    In Multivector Arcana we cover some more esoteric mathematical aspects of multivectors of less general interest.
    In later sections we cover Multivector Calculus and the uses of multivectors in physics, in particular Relativity and Quantum Mechanics.
    This treatment favours the contractive "computer scientist's" inner product a¿b over the semisymmetric "physicist's" inner product a.b where possible because this is arguably the more fundamental and has certain functional advantages.

Sierpinski (<1K) Multivectors
"And therefore in geometry (which is the only science that it hath pleased God hitherto to bestow on mankind), men begin at settling the significations of their words; which settling of significations, they call definitions, and place them in the beginning of their reckoning." ---  Thomas Hobbes, Leviathan

    Although a notable advantage of geometric algebra is coordinate independance, we will initially take an orthonormal coordinate (basis) based approach here since this is likely to be the most practicable in a programming context.

    Geometric algebra is essentially a set of arithmetical techniques for manipulating N-dimensional vectors and to see how to properly multiply (and divide!) vectors we must first generalise the concept of vectors and scalars.
    Given k linearly independant N-dimensional vectors a1,a2,..,ak from a vector space UN their outer product ak = a1Ùa2...Ùak (not to be confused with the 3D vector "cross" product)  is known as a blade of grade (aka. step or degree) k, or a k-blade. [  We are interested initially in UN=ÂN, the space of real coordinate N-D vectors, but will refer to UN to emphasise applicability to alternate (eg. nonEuclidean) spaces which are of interest to us, particularly with regard to relativistic physics. By "linearly independant" we here mean that no one of the a1,a2,..ak can be expressed as a real-wighted sum of the others ]
    The fundamental rules for Ù are
    Antisymmetry: aÙb = -bÙa ( and so aÙa=0) for any vectors a and b ;
    Linearity: aÙ(b+c) = aÙb + aÙc ; and
    Associativity: aÙ(bÙc) = (aÙb)Ùc.
     A k-blade ak can be thought of as representing an orientated and scaled k-dimensional subspace of UN, one in which all the vectors satisfy aÙak = 0. We say that a1,a2,..,ak are a k-frame for this subspace.
    A linear "weighted additive" combination of k-blades is known as a k-vector. An example 4D 3-vector is ½e1Ùe3Ùe4 + (Ö7)e1Ùe2Ùe3 .
    A 0-vector is a 0-blade is a scalar. We refer to a k-blade as proper if k>=1.
    A 1-vector is a 1-blade is a conventional vector.
    A 2-vector (aka. bivector) is a sum of scaled 2-blades and need not "reduce" to a single 2-blade for N>3.
    2-blades can be considered geometrically as directed areas (ie. a plane and a signed scalar).
     For N£3, any k-vector is a k-blade. This is true only for k<2 when N > 3.
[ Proof :  ae1Ùe3+be3Ùe1+ge1Ùe2 = (e1+(a/g)e3)Ù(ge2-be3) if g¹0, (ae2-be1)Ùe3 else . All 3D 3-vectors are multiples of e1Ùe2Ùe3    .]
    This makes N=3 a fundamentally simpler case than N³4 to the extent that "geometric intuitions" founded in 3D can be actively misleading for N³4.
    Because of this, the reader is here advised to initally consider multivectors as algebraic rather than geometric entitiesto be manipulated symbolicsllyand numerically using grammar rules rather than pertaining to geoemetric constructions.

    Consider the set ÂN (aka. GN and ClN in the literature) of all linear combinations (with real "coefficients" or "wieghtings") of k-vectors for 0£k£N, our 1-vectors being taken from the N-dimensional vector space ÂN. Clearly ÂN Ì ÂN (or, more properly, is represented within ÂN) and infact ÂN has dimension åk=0N NCk = 2k, there being NCk º N! (N-k)!-1 k!-1 distinct k-blades in N-dimensions.

    We refer to the elements of ÂN as multivectors An example Â3 multivector, albeit one unlikely to arise in practice, is 3+e1-4e2e1Ùe2+(Ö7)e2Ùe3 + pe1Ùe2Ùe3 . We can thus think of a general N-D multivector as an arbitary real-weighted combination of 2N distinct basis blades. [  Mathematically, one can take the "blade coefficients" from any field or "number space". It is the utilisation of  - essentially identifying the blade "coefficients" or "coordinates" with "scalars" (0-vectors) - that distinguishes "geometric algebra" from more general Clifford algebras of only passing concern here. If we allow "complex number" blade coeeficients, for example,  we obtain a space CN of dimension 2N+1 . ]
    Multivectors can thus be represented with 2N dimensional 1-vectors, with respect to the "extended basis" generated by a given set of N linearly independant N-D basis 1-vectors e1,e2,...,eN and this tells us how to add and subtract multivectors, but not how to multiply and divide them. For that we will need the "geometric product" and its associated "subproducts".

Conflicting Terminologies
    Some authors such as Pavsik use the term "k-vector" for what we will call a k-blade and "multivector" for our k-vector (ie. a single-graded multivector), adopting the term polyvector for our multivector.
    The term k-vector is sometimes used in the literature to refer to a k-dimensional 1-vector. However it is more common to spell the number so that, for example, four-vector typically denotes a 1-vector in a 4D spacetime; three-vector denotes a 1-vector in Â3 and so on, and we will adopt this convention here.  

Notations and Coordinates
    A general N-D multivector is thus the sum of a scalar, a 1-vector, a 2-vector,..., and an N-vector but we will frequently be interested in pure k-blades or k-vectors and will benefit from a notation that that distinguishes such from general multivectors.  We will use the following fonts to denote geometric algebra elements
FontRepresentsAlso known as
aProper blade
aGeneral multivector
a1-vectorVector, 1-blade
a(N-1)-vectorHyperblade, Pseudovector
a<0;N>-vectorScalar-pseudoscalar pair.

    Given an orthonormal basis (ie. a Cartesian coordinate frame) consisting of N orthonormal N-D 1-vectors {e1,e2,...,eN} for ÂN, we can consider multivectors as elements of Â2N, ie. as 2N-dimensional 1-vectors,
    We use the notation eij..m º eiÙej....Ùem     where i,j,..m are distinct indices. [  If we relax the distinctness restriction in the case of N indices we have eij..m = e12..Neij..m where scalar eij..m is the traditional "alternating tensor" returning ±1 or 0 according as whether ordered set {i,j,..,m } is an even/odd, or not a, permutation of ordered set { 1,2, .. N } ]
    If all 2N coefficients of the basis blades arising from a given orthonormal basis are integers ( eg. 5 + 3e1 - 7e2Ùe3) then we will say the multivector is integer-coefficiented with regard to that basis. If the coeffients are further restricted to { ±1 , 0 } then the resulting 32N "discrete" multivectors are said to be Mantheyian with regard to the basis.

Specific subcomponents
    We will write aij..m or a[ij..m] for the coefficient of eij..m in multivector a. . [  We will seldom have to raise individual components to integer powers and this raised suffix notation has definite advantages ]
    We will refer to the integer ½(2j+2k+...+2m) as the bitwise enumerator for the extended basis blade ejk..m. The ½ arises because we labelled our first frame vector e1 rather than e0. We will denote coordinates or blades indexed by a particular bitwise enumerator n by [.n.] . Thus eg. e[.0.]=1 ; e[.1.]=e1 ; e[.6.]=e23 and so on and in general we have a = åk=02N-1 a[.k.] e[.k.] .
    We will use the notation ak to indicate a k-vector, ak a k-blade, and the notation a<k> to indicate the k-vector component of a general multivector a (with a<k>=0<k>=0 for k>N) . The notation a<i,j,..m>º a<i>+ a<j>+ .. + a<m> will prove useful.
    We say a is pure or k-pure if a<k> = a. By an impure k-vector we mean a multivector having a nonzero k-vector component and possible nonzero j-vector components for j<k.
    If we wish to specify a multivector as having only components of grades 2,3 and 5, for example, we will refer to a <2;3;5>-vector. A <k>-vector is thus a pure k-vector. A <0;1>-vector is sometimes known as a paravector, particularly when N=3.
    We will use the notations a<+> º a<0,2,..,2*[N/2|> to denote the multivector obtained by taking only the even grade components of a, and a<-> º a<1,3,..,2*[N/2|+1> for the odd grade components.  

    The degenerate (zero magnitude) k-blade is denoted by 0k.
    All degenerate blades are considered equivalent ( 0 = 01 = 02 = ....0N = 0 ) , and this zero is the sole equivalence. Note that within a computational context (finite precision arithmetic) we will typically be checking for proximity rather than equivalence with zero. It is often worth keeping track of the "grades" of expected zeros.

    We are freuwently interested in issues such as whether the square of a multivector is a pure scalar but in practice this may mean checking that any residual nonzero coordinates are a "negligable" proportion of the scalar part, which can be problematic if the scalar part is also small.
    We define the sparsity of a multivector with respect to a given basis as the number of zero coefficients (coordinates) in its representation in that basis.

Inverse frames
    Suppose we have a possibly non-orthonormal linearly independant basis of N N-D 1-vectors providing a coordinate frame (ie. a set of axies) E=(e1,e2,...,eN) for UN. We can construct a reciprocal or inverse frame (e1,e2,...,eN) so that ei.ej = 1 when i=j and 0 else where . is the traditional scalar ("dot") product of two 1-vectors.
    If E is orthogonal then provided no ei2=0 we can set ek º ek-2ek . More generally we require ek º (-1)k-1(e1Ù..ek-1Ùek+1Ù...eN) i-1 where i=e12..N , though this may not make much sense to the reader till he is more familiar with Ù and the pseudoscalar i discussed later.
    We define a notation eij..m º eiÙejÙ...em .

    If E is orthogonal (ie. ei.ej=0 for i¹j) then (using the geometric product defined below) we have ekek = 1 (provided ek2¹0) ; but in general ekek has a non-zero 2-blade component because ekÙek ¹ 0 .
    E induces both the coordinate expression x = åi=1N xiei     [ with xi º ei.x ], and the reciprocal coordinate expression x = åi=1N xiei     [ with xi º x.ei ]. ei is the 1-vector geometric multiplier that "seperates"  1-vector x into xi + åj ¹ i xjeiÙej .

    In ÂN : (i) an orthonormal frame is self-inverse ( ei = ei ; xi = xi ) ; (ii) a general frame, expressed as an N×N matrix E with respect to a fixed orthonormal frame F=(f1,f2,...fN) in conventional manner via ( ei = åi=1N Ejifj ) has as its reciprocal frame the frame having matrix (E-1)T = (ET)-1   with respect to F, ie. the inverse transpose matrix.

    Letting Eij º ei¿ej  and Eij º ei¿ej ,  we have xj = åi=1N Eijxi     ;      xj = åi=1N Eijxi .
    The N×N symmetric matrices {Eij} and {Eij} are related by {Eij} = {Eij}-1   where -1 is  the conventional matrix inverse.

Inverse Frame Units
    We discuss the mathematically ticklish issue of inverse frames here because we are discussing coordinate representations.
    If frame vectors are assigned units, e1 having length 5 m say, then e1 must be regarded as having "length" 5-1 m-1 so that e1¿e1 = 1 m0 is dimensionless. Coordinates xi =ei¿x are then unitless while reciprocal coordinates xi = ei¿x have units m2.

Extended inverse frames
    Given an extended basis {e[.i.] : 0£i<2N } we can construct an extended pureblade inverse frame {e[.i.]} which satisfies e[.i.]* e[.j.] º (e[.i.]e[.j.])<0> = 1 when i=j and 0 else .

The Geometric Product
"He who can propery define and divide is to be considered a god." --- Plato

    To make ÂN a linear space we require a "multiplication" with the following properties:
    a(bc) = (ab)c     (associativity)
    a(b+c) = ab + ac ; (b+c)a = ba + ca     (distributivity)
    aa = Sig(a) where Sig(a) is a scalar for all 1-vector a     (contraction).
    Of principle interest here is the contraction Sig(a) = e|a|2. where e (the signature of a) is either ±1 or 0 and |a| is the conventional magnitude ("length") of 1-vector a. A vector is null if a2=0.   
    We write Âp,q,r for a vector space having orthogonal basis {e1,e2,...eN} where N=p+q+r and Sig(ei) = 1 for 1£i£p ; -1 for p<i£p+q ; 0 for p+q<i£N .
    We write Âp,q,r for the associated geometric algebra. We write Âp,q (aka. Clp,q) as an abbreviation for Âp,q,0 and ÂN as an abbreviation for ÂN,0,0 .

    We define the geometric product of any a by a scalar b in the obvious "coordinatewise" commutative manner (ba)[ij..m] =    (ab)[ij..m] º b(a[ij...m]) .
     We define the geometric product of two 1-vectors by ab º a.b + aÙb where a.b is the conventional ÂN (or UN) vector "dot" product. We can then extend this definiton by means of the associativity and contraction rules to higher grade blades and hence (by distributivity) to multivectors generally. The geometric product is noncommutative (ab¹ba in general), but this is actually an assett; the "degree" of noncommutativity of the geometric product of two multivectors being a measure of their orthogonality. A unit multivector is a multivector satisfying (aa)<0>=±1.
    More generally we have ab= a¿b + aÙb where a is a 1-vector and b is a general multivector.
    abc=a¿((b¿c)+bÙc) + aÙ((b¿c)+bÙc) = a¿(bÙc) + a(b¿c) +aÙbÙc)
    abcd= = a¿(b¿(cÙd) + b(c¿d) +bÙcÙd)) + aÙ(b¿(cÙd) + b(c¿d) +bÙcÙd)) = aÙ(b¿(cÙd) + (aÙb)(c¿d) + aÙ(bÙcÙd))

    We can tabulate the geometric product for Â2 with respect to a basis for Â2 derived from an orthonormal basis {e1,e2} for Â2.
ab for Â2
1  e1  e2  e12

[ Proof :  e12e1 = (e1Ùe2)e1 = -(e2Ùe1)e1 = -(e2e1)e1 = -e2(e1e1) = -e2 . Other products likewise.  .]
    We note in passing that the subspace Â2 + consisting of all 2D multivectors having no 1-vector component, ie. the space of multivectors of the form a + be12   is closed under the geometric product and is isomorphic to the complex number space C,  as is Â0,1.

    If e12=1 and e22=-1 then (e1Ùe2)2 = 1 and the even subalgebra Â1,1 + generated by 1 and (e1Ùe2) is isomorphic to the hyperbolic numbers x+yh where h2=1.
      These are less well studied than complex numbers and rarely implimented in code libraries. However it is easy to generalise a complex number class to allow for a plusquare or null i. The hyperbolic number x+yh has inverse (x-yh)(x2-y2)-1 provided x¹±y . Though we can express x+yh in "hyperbolic polar form" r(qh) where r=|x2-y2|½ and q =  tanh-1(xy-1) if |x|<|y| ; or  tanh-1(yx-1) if |y|<|x| , the inverse hyperbolic tangent providing q must be carefully defined since hyperbolic numbers divide naturally into four "regions" or "quadrants" seperated by the lines y=x and y=-x according as to which of |x| and |y| is larger and the sign of the larger coordinate. We will refer to hyperbolic numbers with x>0 and x>|y| as being in the (1)-quadrant since this is the quadrant containing 1. Hyperbolic numbers in this quadrant remain in it when raised to any power or exponentiated.
    We can express ay (1)-quadrant hypercomplex as r(qh) for real r³0 and q Î (-¥,¥) . Whereas the complex polar angle parameter can be restricted to (-p,p] and maps all 2-D directions, the hyperbolic polar angle parameter is unbounded and yet only maps a quarter of the 2-D directions. We cannot recover x and y from r and q, as we can for complex numbers, without also knowing which quadrant we are in. Multiplication with h flips x and y and so corresonds to reflection in x=y , mapping the (1)-quadrant into the (h)-quadrant, the (h)-quadrant into the (-1)-quadrant, and so on.   Computationally, we must specify the quadrant "mapped" by q as well as r and q, which requires an additional two bits.

    We can tabulate the geometric product for Â3 with respect to a basis derived from a standard orthonormal basis {e1,e2,e3} for Â3.
ab for Â3
1  e1  e2  e3   e23 e31 e12  e123
1 1e1e2e3 e23e31e12 e123
e1 e11-e12e31 e123e3-e2 e23
e2 e2e121-e23 -e3e123e1 e31
b e3 e3-e31e231 e2-e1e123 e12
e23 e23e123e3-e2 -1 e12-e31 -e1
e31 e31-e3e123 e1 -e12-1 e23 -e2
e12 e12e2-e1e123  e31-e23-1 -e3
e123 e123 e23 e31 e12 -e1-e2-e3 -1
and similar geometric multiplication tables can be constructed for higher N.
    What is happening here is e[.j.]e[.k.] = ± e[.j  ^  k.] where  ^  denotes bitwise XOR ("exclusive or") and the sign is determined both by how many commutations we have to do to bring the common ei together, and the signatures of the common ei.

    Writing i º e123 º e1Ùe2Ùe3 = e1e2e3 we see from the above table that i commutes with all multivectors and satisfies i2 = -1.
    We also observe that aÙb = i(ab) = (ab)i where ab = (aÙb)e123-1 is the conventional Â3 vector "cross" product and that ia spans the plane normal to a. We also have aÙbÙc = (a.(bc))i.
    We note in passing that the subspace Â3 + consisting of all 3D multivectors having no odd grade component, ie. the space of multivectors of the form a + be23 + ge31 + de12 is closed under the geometric product and is isomorphic to the quaternion space Q, as is Â0,2 . a + bi + gj + dk.

    We further note that a general Â3 multivector can be uniquely expressed as (a + a2) + (b + b2)e123 where a,b are scalars and a2,b2 are pure Â3 bivectors. An alternative biquaternion (aka. complex four-vector aka. Pauli spinor) representation of Â3 sets i=i=e123 , s1=e1 , s2=e2 , s3=e3 (satisfying si sj=eijki sk). The biquaternion (a0+b0i) +(a1+b1i)e1 +(a2+b2i)e2 +(a3+b3i)e3 is equivalent to the Â3 multivector a0 + a1e1+a2e2+a3e3 + b1e23+b2e31+b3e12 + b0e123 . The product of two 3D 1-vectors is usually taken in this context to be ab º a.b + i(a×b) which is equivalent to the Â3 geometric product since i(a×b)=aÙb.

    Given an orthonormal 1-vector basis e1,e2,..,eN we can regard multivectors as complex weighted sums of the 2N basis blades and such a "coordinates form" makes addition and multiplication particularly straightforward. As an example computation consider (1+2e13)(_3e1+4e1234)   = _3e1+4e1234   + 6e13e1 + 8e13e1234   = _3e1+4e1234   + 6e13e1 + 8e13e1234   = _3e1+4e1234   + 6e1e3e1 + 8e1e3e1e2e3e4   = _3e1+4e1234   - 6(e1)2e3 - 8e3(e1)2e2e3e4   = _3e1+4e1234   - 6e3 - 8e3e2e3e4   = _3e1+4e1234   - 6e3 + 8(e3)2e2e4   = _3e1+4e1234   - 6e3 + 8e24 where we have assumed e12=e32=+1.
    The "geometric product" can thus be viewed as a purely computational construct in which we can think of sliding basis 1-vectors across eachother, introducing a sign flip for every basis 1-vector crossed, until another instance of the same base 1-vector is encountered whereupon the two 1-vectors "condense" into their ±1 scalar signature. The grade of the product of an orthonormal basis k-blade with an l-blade from the same basis is thus £k+l.
    Though we constructed our extended basis and defined the geometric product using the outter product Ù, we could have assumed only the traditional scalar vector dot product to define basis orthonormality condition ei.ej = ei dij where dij=1 i=j and 0 else ;   defined the extended basis elemnets by incorporating 1 and unordered pairs, triples, ... ,and N-tuples of the ei into the basis written as eij..m; and finally defined the geometric product of two basis elements eij..meno..r logically in this "index hoping with sign tracking" manner.

    The N-vectors from a given UN are all equivalent apart from magnitude ("scale","volume") and sign ("handedness"). They are accordingly known as pseudoscalars. Conversely a nonzero pseudoscalar "spans" (and can be thought of as representing) UN .
    We will use the font a to denote a blade viewed as a pseudoscalar.   
    Let i º iN be the unit pseudoscalar e12..N for ÂN. i satisifes i 2 = (-1)½(N-1)N and commutes with all multivectors if N is odd. For even N we have iak = (-1)kaki so that i (anti)commutes with (odd)even blades.
    We say a multivector is central if it commutes with all other multivectors. For even N, only scalars are central but for odd N any <0;N>-multivector (scalar plus pseudoscalar) is central.
    An (N-1)-vector is sometimes refered to as a pseudovector but we favour the term hyperblade here.
    Taking the geometric product of a multivector with i maps k-blades to (N-k)-blades and vice versa. In particular it maps scalars to pseudoscalars (and vice versa) and vectors to pseudovectors (and vice versa).
    Note that a k-blade acts as a pseudoscalar when acting upon multivectors wholly contained within the space it spans. The geometric product of a pseudoscalar i with a blade ak contained in the subspace spanned by i spans the subspace of i complimentary (orthogonal) to subspace ak. In particular, the geometric product of any blade with itself is a scalar.
    The signature   of a blade bk, ebk , is the sign of bk2 (or zero if bk2 = 0 in which case the blade is said to be null).


    We define the dual of a multivector a with respect to a pseudoscalar i spanning a space containing a by
    a* º ai-1 = a¿i-1
[  Where ¿ is the contractive inner product defined below. Some authors favour ai, but if i is a unit pseudoscalar the difference is only one of sign. ]
    a* spans the subspace of i "perpendicular" to pureblade a.
    If b is an unmixed (ie. odd or even) multivector, it will either commute or anticommute with i. For odd N, the pseudoscalar commutes with everything and we have (a*)b = a(b*) = (ab)* .
    For even N, i (anti)commutes with (odd) even multivectors and we have (a*)b = a(b#*) = (a(b#))* where # is the grade involution conjugation defined below.

    In the presence of a standard basis for ÂN, computing a* for the unit pseudoscalar i=e123..N is a computationally trivial "shuffling" of coordinates requiring no numeric computations. For the bitwise ordering we have (ai-1)[.i.] = ± a[.(i XOR (2N-1)).] where the actual sign depends upon N and the bitwise parity of i.

    The inverse dual or undual is defined by a-* º a*i2 = ai so that (a-*)* = a.


    Any multivector a defines an algebra _Cent(a) known as the centralizer of a consisting of all multivectors that commute with a.

    For N£4 the squares of bivectors commute with even multivectors while for N=4 the pseudoscalar part of w2 is negated on commutaion with odd multivectors.
    Left multiplication by a bivector ( a ® b2a ) casts scalars into b2. If b2 is a 2-blade It rotates directions within b2 (by b2), while casting directions perpendicular to b2 into trivectors. For N=3, it casts bivectors in b2 to scalars while bivectors normal to b2 are rotated by b2 and the pseudoscalar is cast to 1-vector b2*.
    Right multiplication by a bivector has similar effects. Indeed a 2-blade commutes with all multivectors in its dual space , which is not the case for a 1-vector. Consequently, it is occasionally advantageous to represent 3D 1-vectors by their bivector duals.
    Let b be a multivector having only bivector and scalar components. a¿b = a.b while b¿a = b.a + b0a
    b2×a sends ^(a,b2) to 0 and rotates ¯(a,b2) in b2 by ½p, scaling it by |b2|.
    The operation a ® (ba).a for nonnull b is interesting, casting ¯(a,b) to 0 and ^(a,b) into
|^(a,b)|2b = |aÙb|2(b-2)b = |aÙb~|2b .

Matrix representations
    Multivectors can be represented with matrices (physicists have done so, largely unknowingly, for decades) with the geometric product corresponding to the traditonal matrix product) but matrices are seldom the best way to impliment multivectors  computationally and tend to obscure the underlying geometries. Nonetheless, we will describe some matrix representations here: partly to convince the more skeptical reader that multivectors do actually "exist", and also to provide an alternate model for those who have philosophical difficulties with the concept of adding "different grade" blades to form a composite "entity". Geometric (multivector) algebra becomes the algebra of a particular "form" of matrix, requiring only standard matrix multiply and inversion techniques. Such an approach is computationally profligate, but can sometimes provide alternative insights as well as quick-and-dirty programming applications exploiting existing matrix suites.

Âp.q.r in Â2N×2N
    With regard to a particular extended basis, an N-D multivector a can be expressed as a 2N dimensional real 1-vector. But as a function mapping multivectors to multivectors a(x) = ax , ie.. a transform of 2N-D 1-vectors, a can also be represented as a 2N×2N matrix.
    Taking a=a0+a1e1+a2e2+a12e12 in Âp,q,r with p+q+r=2, for example, we have
        = (a0x0+e+1a1x1+e+2a2x2-e+1e+2a12x12) + (a1x0+a0x1+e+2a12x2-e+2a2x12)e1 + (a2x0+a0x2-e+1a12x1+e+1a1x12)e2 + (a0x12+a1x2-a2x1+a12)e12       
which we can express as
æ a0e+1a1e+2a2-e+1e+2a12 ö æ x0 ö  
ç a1a0e+2a12-a2 ÷ ç x1 ÷
ç a2-e+1a12a0e+1a1 ÷ ç x2 ÷
è a12-a2a1a0 ø è x12 ø

    Note that the leftmost column of the matrix representation of a contains the 1-vector representation of a, and that the matrix is symmetric apart from occasional sign changes determined by both the position in the matrix and the signatures of the basis 1-vectors.
    Note also that the matrix trace (sum of leading diagonal elements) of the matrix representatrion of a is the frame-invariant scalar 2Na0 = 2Na<0> .
    More generally we have a = (a,ae1,ae2,...,ai) reagradablde as 2N column vectors.  
    The geometric product ab corresponds to conventional matrix multiplication of the matrix representations of a and b. Multivector 1 has as its matrix representation the 2N×2N identity matrix.
    If the pseudoscalar is central (all commuting) then we can express each multivector as a 2N-1 complex 1-vector and obtain a C2N-1×2N-1 complex matrix, which requires only half as many reals as a Â2N×2N matrix.

    Far more compact matrix representors for multivectors are typically available. The following are all "maximally compact" in that they require precisely 2N real scalar parameters to hold a general N-D multivector.

Â2 in Â2×2
1= æ 10 ö e1= æ 10 ö e2= æ 01 ö e12= æ 01 ö
è 01 ø è 0-1 ø è 10 ø è -10 ø
satisfy the required e12=e22=1 ; e12=e1e2=-e2e1 .

Â1.1 in Â2×2
1= æ 10 ö e1= æ 01 ö e2= æ 0-1 ö e12= æ 10 ö
è 01 ø è 10 ø è 10 ø è 0-1 ø
satisfy the required e12=1 ; e22=-1 ; e12=e1e2=-e2e1 .

Â3 in C2×2

    Â3 has a "biquaternian" representation with Hermitian 2×2 complex matrices
1=1= æ 10 ö ; e1= s1= æ 01 ö ; e2= s2= æ 0-i ö ; e3= s3= æ 10 ö
è 01 ø è 10 ø è i0 ø è 0-1 ø
which provide the Pauli algebra if we set i=e123=i (so that s1 s2 s3=i s32 = i 1 )
1 s1 s2 s3
b11 s1 s2 s3
s1 s1 1-i s3+i s2
s2 s2+i s3 1-i s1
s3 s3-i s2+i s1 1

Note that siD=- si while 1D=1 , traditional 2×2 matrix adjoint D corresponding to a biquaternian "vector conjugation".

    The si and 1 act as a basis for the full   C2×2 algebra of complex 2×2 matrices since
æ ab ö = ½(a+d)1 + ½(b+c) s1   + ½i(b-c) s2 + ½(a-d) s3
è cd ø

    Each element of the special unitary group SU(2) of all C2×2 unitary (AAºA(A^T)=1) matrices having unit positive determinant can be expressed via U=(½iåj=13 qjej) for three real scalar parameters qj. e1,e2, and e3 are then refered to as the generators of SU(2) so we can view SU(2) geometrically as the space of exponentiated Â3 1-vectors.
    SU(2) is isomorphic to the group SO(3) of all orthogonal (AAT=1) Â3×3 matrices, with U (U)
æ zx-iy ö U-1
è x+iyz ø
equivalent to Ax where x=(x,y,z)_transp, yielding the quaternian representation Â3 + @ SO(3).

Â3.1 in Â4×4
1=1= æ 1000 ö ; e1= æ 1000 ö ; e2= æ 0100 ö ; e3= æ 0010 ö ; e4= æ 00-10 ö
ç 0100 ÷ ç 0-100 ÷ ç 1000 ÷ ç 000-1 ÷ ç 0001 ÷
ç 0010 ÷ ç 00-10 ÷ ç 0001 ÷ ç 1000 ÷ ç 1000 ÷
è 0001 ø è 0001 ø è 0010 ø è 0-100 ø è 0-100 ø
satisfy the required e12=e22= e32=-e42=1 ; eiej=-ejei for i¹j . [ Due to Lounesto.] Note that the 1-vector representors are traceless and have determinant ±1. Transpose negates only e4 and coresponds to geometric Hermitian conjugation.

Â4.1 in C4×4
1= æ 1000 ö    ; e1= æ 000i ö    ; e2= æ 0001 ö ; e3= æ 00i0 ö ;    e4= æ 0010 ö ;    e5= æ -i000 ö    
ç 0100 ÷ ç 00i0 ÷ ç 00-10 ÷ ç 000-i ÷ ç 0001 ÷ ç 0-i00 ÷
ç 0010 ÷ ç 0-i00 ÷ ç 0-100 ÷ ç -i000 ÷ ç 1000 ÷ ç 00i0 ÷
è 0001 ø è -i000 ø è 1000 ø è 0i00 ø è 0100 ø è 000i ø
satisfy the required e12=e22=e32=e42= -e52=1 ; eiej=-ejei  for  i¹j . Once again, the 1-vector representors are traceless and have determinant ±1. Note that e12345 = e1e2e3e4e5 = i corresponds to i1 and with e1234=-ie5 .
    We cannot simply multiply e5 by i to obtain a basis for Â5 because we would then have e1e2e3e4e5=-1 rather than i1. We can only change the basis signatures in pairs, such as by multiplying e1,..,e4 by i to obtain a matrix basis for Â0,5.
    Setting g0=ie5 , g1=-ie1 , g2=-ie2 , g3=-ie3 provides a "Dirac matrix" basis for Â1,3 , inefficient in that it requires 16 complex values to represent a 4D multivector having 16 real coordinates.
    Note that matrix transpose coresponds to negation of e1 and e3 whereas matrix complex conjugation negates e1,e3, and e5 so that reversing matrix Hermitian conjugation AT^ negates only negative signatured e5 and so coresponds to geometric Hermitian conjugation defined below. Negation of the on-lead-diagonal blocks is provided by e5= and negates 1 and e5.

    We can construct matrices having 1 in the first to fourth entries of the first column (and zeroes elsewhere) respectively as

    Ones in only the first, second, third, and fourth entries of the top row are given by the transposes of these, specifically u, ue31 , -ue1245 , and ue2345 respectively.
    Note that we here have e42=+1 , e52=-1.   In our later work on Â4,1 extended Minkowski spacetime we will favour e42=-1 and e52=1.

Â7@Â5.2@C6 in C8×8
    We can form C8×8 e1,e2,..,e5 by taking their C4×4 representaions and replacing every 1 with C2×2 matrix s1 ; every i with i s1 ; and every 0 with 0 . Now form the C8×8 matrix e6 as the symmetric imaginary matrix formed by replacing each 1 in   C4×4 1 with s2 and each 0 with 0 . This anticommutes with the e1,..,e5 as required and squares to 1. Finally we can form e7 of negative signature by replacing the 1 in 1 with -i s3. This anticommutes with the e1,...,e6 and squares to -1.
    Note that plussquare unit 2-blade e67 is represented by 1 with the 1's replaced by -i s2 s3= s1 ; e12345 by 1 with 1's replaced by i s1 ; and e1234567 by i1.

    We can keep repeating this trick to create C16×16 representations of an orthogonal 1-vector basis for Â8.1@Â6,3@...@Â0,7 ; C32×32 representations for Â11@Â9.2@...@Â1,10 ; C64×64 representations for Â12,1@...@Â0,13 and so on.

Other matrix representations
    It can be shown that Â0,4 @ Â4,0 @ Q2×2  ; Â0,6 @ Â8×8  ; Â6,0 @ Q4×4  ; Â7,0 @ Â5,2 @ C8×8 ;    Â0,8 @ Â8,0 @ Â16×16     [ where Q2×2 denotes the space of 2×2 quaternion matrices etc. ] but we do not provide example basies here. More generally, for even p+q, Âp,q is isomorphic to either a real, complex, or quaternion matrix algbera. For odd p+q we sometimes have a sum (ordered pair) of two such matrix algebras.

Adding Blades
    Expressing multivectors in coordinate or matrix forms induces a natural addition of multivectors and provides a potent computational technique, but regarding multivector a as being the real weighted sum of the 2N outter product progency of N elemental "generators" e1,e2,...eN or a particular real matrix risks loosing sight of duality. All the "information" in a blade b is also "encoded" in its dual bi-1 and we might equally naturally regard a as bb +gc + .. where b = b1 + b2i etc. as a sum of "complex"-weighted blades, particularly for odd N when i is central and (when i2=-1) we have Âp,q @ Cp-1,q @ Cp,q-1. Because we can express a in terms of an extended basis we know that any multivector a can be expressed as a complex-weighted sum of 2N-1 blades but it is the minimal number of blades necessasry that best "classifies" the multivector. We define the positive integer spread of a multivector a to be the number of blades in its "irreducible" real weighted summation.   The spreads of 1 and of e13 + e23 = (e1+e2)Ùe3  are 1, for example. However the spread does not fully categorise the "complexity" of a because we don;t know how many blades appear with their duals. We will refer to the Expression of a multivector a suach as bb +gc  of reduced spread 2 in coordinate form "smears" b and c together. The spread and reduced spreads are not apparent.
    Though the addition of multivectors is well defined and frame-independant, it is in many cases of somewhat dubious merit, particularly when adding high glade blades. Though the coordinate approach facilitates and encourages multivector additions and we will do so freely throughout this work, the strict mathmatical purist is nonetheless correct to maintain an element of unease. Informally, multivectors are made for multiplying, not adding.

Sierpinski (<1K) Multivector Products

Restricted products
    Given the geometric product we can define a large variety of partial-geometric or restricted products by evaluating ab and then throwing away (zeroing the "coordinate" of) one or more particular blades. We might zero all the odd blades, for example, but more useful restricted products arise when the blades we zero are determined by the blades we multiply. The outter product is an example, with akÙbl = (akbl)<k+l> . Though all these products can in principle be implimented using a geometric product primative, this is frequently grossly computationally inefficient and we will later see that one should generalise our encoded multivector product to "streamline" the evaluation of the more useful restricted products.
    There are two "outer" products and a plethora of potential "inner" products, most of which have something to commend them. All are restrictions of the geometric product in that their result for two extended basis blades is either the same as that of the geometric product or zero. From a programmer's perspective, the contractive inner product ¿ (defined below) is the most fundamental inner product. The reader should accordingly familiarise himself with ¿ , and also the Hestenes (.) product since it is ubiquitous in much of the literature, often required in this work, and (unlike ¿) is "dual" to the outter product . The other inner produts (·, ë, ¿+) are not used here and seldom seen elsewhere. They may have their place in a particular application, however, and are defined here for completeness.

The outer product
      Given the geometric product, we can fully define the outer or exterior product (aka. wedge product)   by defining
    akÙbl º (akbl)<k+l>     where ak,bl are blades of any grade;
and thence extending over multivectors by insisting on associativity and multilinearity.
    From this definition it follows that:
    aÙb = bÙa = ab ;
    akÙbl = (-1)klblÙak    ;    
    aÙb = ½(ab - ba) º a×b    ;     aÙbk = ½(abk + (-1)kbka) = ½(abk + bk#a)    ;     bkÙa = (-1)kaÙbk
    a1Ùa2Ù...ak = k!-1 åij..meij..m ai aj... am     summing over all k! permutations of {1,2,..k} .
    (aÙb)2   =   (a¿b)2 - (a2)(b2)   =   -a2b2 sin(q)     where q is angle subtended by a and b
[ Proof :  (aÙb)2 = -(aÙb)(bÙa) = -(ab-a.b)(ba-b.a) = -abba+(a.b)(ab+ba)-(a.b)2 = -a2b2 + 2(a.b)2 - (a.b)2  .]
    (a1Ùa2Ù...ak)2 = (-1)½k(k-1) (k! Volume(k-simplex of points 0,a1,a2,...ak))2 = (-1)½k(k-1) (Volume(parallelepiped with edge vectors a1,a2,...ak))2
    akÙak=0 is true for single proper blade ak but not for general k-vectors when k>1. Note that 0-blades (scalars) have aÙa=a2 .
aÙb for Â3
1  e1  e2  e3   e23e31e12 e123
1 1e1e2e3 e23e31e12 e123
e1 e10-e12e31 e12300 0
e2 e2e120-e23 0e1230 0
b e3 e3-e31e230 00e123 0
e23 e23e12300 0000
e31 e310e1230 0000
e12 e1200-e123 0000
e123 e123000 0000

The "thin" outer product
    The thin outter product is here defined and denoted by by
    a^b º aÙb - a<0> b - b<0> a so that a^b = b^a = 0.
    It has the same multiplication table as Ù but with the scalar row and column zeroed. We make no use of it in this work.

The contractive inner product

    We define the contractive inner product (aka. Lounesto inner product) (¿ or û ) by
    ak¿bl º ( akbl)<l-k>       for l³k    ,    0  else   
where ak,bl are blades of any grade; and thence extending over multivectors by insisting on bilinearity.
    ¿ is neither associative nor commutative (symmetric). In particular, (a¿a)=a2 so  (a¿a)¿b=a2 b but a¿(a¿b) = 0 .
    For k-vectors with k>1, contraction with a 1-vector a corresponds to orthogonal projection into subspace a* so
a¿b is the "component factor" of blade b perpendicular to 1-vector a   .

    We have the following properties:

a¿b for Â3
1  e1  e2  e3   e23e31e12 e123
1 1000 000 0
e1 e1100 0000
e2 e2010 0000
be3 e3001 0000
e23 e230e3-e2 -1000
e31 e31-e30e1 0-100
e12 e12e2-e10 00-10
e123 e123e23e31e12 -e1-e2-e3 -1

    ¿ is sometimes known as left-contraction or onto-contraction as opposed to the right- or by-contraction defined by
    ak ë bm º ( akbm)<k-m>       for k³m ; 0 else
or equivalently by aëb = (a§¿b§)§ where § is the reverse operator defined below.

The semi-commutative inner product
    Some authors favour the semi-symmetric or semi-commutative inner product (aka. Hestenes inner product) (.) defined by
    a.bk º bk.a º 0 where bk is any blade  ; º ( akbm)<|k-m|> where ak,bm are proper (nonscalar) blades;
and thence extending over multivectors by inisiting on bilinearity. The result is neither associative nor commutative ("symmetric").  It is "semi-symmetric" in that aj.bk = (-1)j(k-j)bk.aj for pure j and k-vectors aj,bk with j£k.
    Note that scalars (0-blades) a,b satisfy aÙb = ab ; a¿b = a.b = 0 so we can think of scalars as "self-orthogonal".
    We obtain the identities

    For any two vectors, a.b = a¿b is equal to the conventional vector "dot" product.
a.b for Â3
1  e1  e2  e3   e23 e31 e12  e123
1 0000 000 0
e1 0100 0e3-e2 e23
e2 0010 -e30e1 e31
b e3 0001 e2-e10 e12
e23 00e3-e2 -100 -e1
e31 0-e30 e1 0-10 -e2
e12 0e2-e10 00-1 -e3
e123 0 e23 e31 e12 -e1-e2-e3 -1

    We will use ¿ in preference to . whenever possible trhoughout this work. a¿b = a.b " 1-vector a if b<0>=0 so in many equations ¿ and . are interchangeable. However, only . is dual to Ù in the sense that a.(bi)   =   (aÙb)i    ;     ie. aÙ(bi)   =   (a.b)i ; or equivalently a.(b*) = (aÙb)* ; aÙ(b*) = (a.b)* ;
    a.b = (aÙ(bi-1))i    ;     aÙb = (a.(bi-1))i    for any 1-vector a and multivector b .
    In particular aÙ(b.c) = (a.(bÙ(ci-1)))i , ie. (aÙ(b.c))* = a.(bÙ(c*)) .
    We cannot replace . by ¿ in these fundamental duality equations.

    In Â3 we have a×b = (aÙb)i-1 ; a×(b×c) = (aÙ((bÙc)i-1))i-1 = (a.c)b - (a.b)c ; and aÙbÙc = (a.(b×c))i where × denotes the traditional Â3 vector product.

The "fatdot" inner product
    A variation of the sem-commutative inner product defined by   ak·bm º ( akbm)<|k-m|>     k,m ³ 0.
    This is sometimes known as the modified Hestenes or dot product but we will call it the fatdot product here to avoid confusion with the traditional (Hestenes) inner product .
    The multiplication table for · is the same as that for . except with regard to scalars. The "scalar" row and column are filled as for Ù , ie. according to 1·a  = a·1 = a    .
    We can think of · as "abrogating" the "scalar handling" from Ù, reducing it to the "thin" outter product ^. Thus · and ^ provide an alternate "decomposition" of the geometric product to . and Ù which may be fruitful in some contexts but will not be exploited here.

The forced Euclidean contractive inner product
    The forced Euclidean contractive inner product ¿+ "overrides" the signatures of the vectors on which it operates. In a Euclidean space ÂN , ¿+ = ¿ .   In Âp,q , ¿+ is defined with regard to an orthonormal basis {ei} . We take 1¿+a º a and  ei¿+ej º |ei¿ej| and extend ¿+ bilinearly.
    The tabulation of ¿+ with regard to the extended (multivector) basis for Âp,q is thus the tabulation for ¿ for Âp+q.

    Although frame dependant, ¿+ is a useful product computationally, since one can sometimes simply "lift" a problem (such as computing meets and joins) in a nonEuclidean space into Euclidean space and solve it there.
    We define the frame-dependant forced Euclidean geometric product by extending a¨+b º a¿+b + aÙb over Âp,q linearly and asscoiatively so that the tabulation of ¨+ for a given basis for Âp,q is the tabulation for ¨ for Âp+q.

    We will later consider higher dimensional embeddings of UN obtained by adding "extension" dimensions e+ and e- to a basis and in such cases will often wish to retain the negative signature of the extender while forcing UN Euclidean. We represent the unextended forced Euclidean contractive product by ¿(+) and the unextended forced Euclidean geometeric product by ¨(+) .

Commutator product
    The antisymmetric commutator or product is defined by a×b º ½(ab-ba). It is our first non-partial-geometric product, potentially containing blades not present in ab. [  aka. , without the ½ factor, as the Lie product ]
    × is nonassociative, and often represents the appropriate generalisation of the Â3 vector product ×.
    We have

    If a and b have a^=a and b^=b or a^-a and b^=-b for reversing conjugation ^ then (a×b)^ = -a×b . Thus the commutator product of two same grade blades has grade <2;6;10;...>.

    We have 23N frame-dependant commutation coefficients Cij...kl... lm... º eij.. * (ekl..×elm...) which can be regarded as measuring the nonorthogonality of the frame.

    With (a×) denoting the operator v ® a×v, we have (a×)(b×)v = ½(a×)(bv-vb) = ¼(abv +vba - avb - bva) .
    Whence ((a×)×(b×))v = ¼((a×b)v + v(b×a)) =  ½(a×b)×v .
a×b for Â3
1  e1  e2  e3   e23 e31 e12  e123
1 0000 000 0
e1 00-e12e31 0e3-e2 0
e2 0e120-e23 -e30e1 0
b e3 0-e31e230 e2-e10 0
e23 00e3-e2 0 e12-e31 0
e31 0-e30 e1 -e120 e23 0
e12 0e2-e10  e31-e230 0
e123 0000 000 0

    We extend this definiton of × to give commutator "products" of operators and functions. If ¦(a) and g(a) are multivector-valued functions of multivectors we define (¦×g)(a) º ½(¦(g(a)) - g(¦(a)) º ½(¦g(a) - g¦(a)) .

    We also define ¦×(a,b) º ¦(a)צ(b) .

    We define the k-fold commutator product by
    a×kb º a×(a×(....(a×(a×b))..)) = (-1)k ((...(b×a)×a)×...)a     where there are k a's and ×'s in the sequence.
    a×0b = b ;     a×1b = ½(ab-ba) ;     a×2b = ¼(a2b-2aba+ba2) ;     ... ;     a×kb = 2-kåi=0k  (-1)k kCi ak-ibai .

AntiCommutator product
    The symmetric anticommutator product is defined by a~b º ½(ab+ba).

    The geometric product decomposes naturally as ab = a×b + a~b . Provided a2 commutes with b and b2 commutes with a, then a and b both commute with a~b and anticommute with a×b. Further a×b commutes with a~b.
    We have

    Thus for scalar squared a and b,  (a×b)2 and (a~b)2 differ only in the scalar part.

    The anticommutator product of two same grade blades has grade <4;8;12;...>.

Scalar product
    The commutative (symmetric) scalar product is defined by a*b º (ab)<0> = (ab)¿1 .
    It satisfies ak *bk = ak¿bk .

    Taking the scalar product with 1 corresponds to taking the scalar part a*1 = a<0> = a¿1 .
    We have the powerful cyclic scalar rule
    (abc)<0> = (cab)<0>     for all multivectors a,b,c

    From a programmers' perspective the scalar product can be regarded both as a multivector-valued product returning a 0-grade (ie. scalar valued) multivector, and as a real-valued bilinear function of two multivectors. For code efficiency it is frequently preferable to impliment it returning a real rather than a multivector type.

Scalar-Pseudoscalar product
    The commutative scalar-pseudoscalar product is defined by a*b º (ab)<0,N> = (ab)¿(1+i) .
    For N odd we will also refer to * as the central product since it is central-valued and we have the vastly powerful cyclic scalar-pseudoscalar rule (abc)<0;N> = (cab)<0;N> .
    For even N, the "central product" coincides with * rather than *.

Inversive product
    a*b º (a¿b) / (|a||b|)    .
    Thus a*b = cos(qÐ(a , b))     where the magnitude |a| is as defined below and qÐ(a,b) denotes the "angle subtended by" 1-vectors a and b.

Delta products
    The greater delta product D (aka. disjoint) is a nonbilinear restrictive product returning the highest grade nonvanishing component of the geometric product, or zero if the geometric product is zero. This can be computed, albeit somewhat inefficiently, by calculating the geometric product keeping track of, or subsequently seeking, the highest grade attained by the blades in the product, and then restricting the product to only this grade. It is most commonly applied to blades and spans the "difference" between them, so for example ((e1+e2)Ùe34) D e235 = -e1245.   It is profoundly useful in constructing meets and joins.

    Of course, calculating a delta product can present us with dilemas when small coordinate values are encountered. If a product ab has a large scalar part and some comparatively tiny 2-blade coordinates, is the highest "nonvanishing" grade zero or two? Are the small 2-vector coordinates a genuine geometrical artifact, or just "failed zeroes" arising from finite precision computations? What magnitudes may we discard? Our choice will substantively effect the grade and magnitude of aDb and our computations risk becoming more art than science. Nonetheless, the delta product is profoundly useful since in many cases in can be computed unambiguously and is then fundamental in constructing meets,  joints, and disjoints as described later.

    We also have the lesser delta product returning the nonzero component of minimal grade adb = (ab)Min .

Conjugative Products
    For every multivector conjugation ^ there are two associated restricted geometric products. One restricting to the "^-real" blades (b^ = b) , and one to the "^-imaginary" blades with b^=-b.

Rescaled Product
    The recaled product is defined by a§b º (a_rsccb_rscc)_rscc where x_rscc is an arbitary, potentially frame dependant, computationally convenient rescaling normalisation of x such as division by the maximal absolute coordinate, or the sum of absolute coordinates, of a particvular frame.. a§b is equivalent to a¨b apart from scale.
    The recalsed product is particularly useful when evaluating sandwich rotor products such as (½qa) x (-½qa) for large q when intermediary coordinates can aquire collosal magnitudes and rounding errors become significant. The evaluation of (½qa) §  x § (-½qa).is usually far better behaved ; and the correct scale can easily be recovered for non null x from , ((½qa) x (-½qa))2 =  x2 whenver x2 commutes with a .

Pure Product Rule
    akbl = (akbl)<|k-l|> + (akbl)<|k-l|+2> + .. + (akbl)<k+l>   =   åm=0½(k+l-|k-l|)    (akbl)<|k-l|+2m>
hence the geometric product of two pure multivectors is either odd or even (as defined under Involution below) according as integer k-l is odd or even.
[ Proof :  True for k=1 and then by induction on k for single k-blade ak. Result follows by distributivity.  .]

The Intersective Product
    The intersective product is a not a restricted geometric product and is frame dependant. It picks out the "shared axies" eg. e3Çe123=e3. In programming terms, while the geometeric product is based on the exclusive or (XOR) of the bitwise ennumeration indices, the intersective product is based on their logical AND. We bring in the sign changes due to commutations ( e2Çe12 = -e2) but not the signatures.

    We will later encounter the frame-independant meet operation aÇb and while we do have e[.j.]Ç[.k.]) = e[.j.]Ç[.k.]) = ±e[.j AND k.] we will see that Ç is not distributive across + for same grade blades. (e1+e2)Çe1 = 0 while (e1+e2)Çe1 = e1 .

Precedence Conventions
    In much of the GA literature, precendence conventions are adopted for multivector products with outter products taking precedence over inner products which in turn take precedence over geometric products so that, for example, a.bcÙd.e denotes (a.b)((cÙd).e) . We will not rely on such conventions, favouring explicit brackets with regard to product symbol scope throughout this work, in acordance with programmer morality.

Sierpinski (<1K) Multivector Operations
    We will define a number of right-operators §, , ^, 2 that act on multivectors to return multivectors. For all of these, we adopt the precedence convention that they apply leftwards prior to all products. Thus xy§ denotes x(y§) rather than (xy)§ ; xy2z denotes x(y2)z ; and so forth.

    We introduce and adopt the "Bellian notation" a^(b) º (a)b(a^) º aba^    . If a^^=a we can represent (a^)ba by a^^(b).
    To minimise notational ambiguities, if we have a "point-dependant" multivector  ap we will sometimes put the positional suffix to the right of the subscripted operator symbol as, for example, a§p(b) º (ap)§(b) º apbap§ .

    For a given e- in Âp,q with q>0 we can define a e--lift Lifte-: Âp,q ® Âp+1,q-1 taking ae- + b1e1+.. in Âp,q to ae-' + b1e1'+... in Âp+1,q-1 where e-', e1',e2', is a basis for Âp+1,q-1 with ei'¿ej' = ei¿ej but e-'2 = -e-2. We think of moving to the "same" multivector in a variant alegbra in which e- has positive signature. When q=1 (or when any other negative signatured basis vectors are the extendors of a higher dimensional embedding) we refer to a Euclidean Lift. Obviously we have Lifte--1 :  Âp+1,q-1 ®  Âp,q moving back again and we can construct e--dependant operations on Âp,q multivectors by lifting them into Âp+1,q-1, applying an operation F: Âp+1,q-1 ® Âp+1,q-1 , and then lifting back to Âp,q. Formally, we compute Lifte--1(F( Lifte-(a))) . Informally, we simply treat e- as having positive signature throughout our computations.

    A conjugation flips the signs of the coefficients of specific blades of a multivector. For any conjugation ^ we have a^^=a     " a which we can write as ^2=1.
    We say a conjugation ^ is a reversing conjugation (aka. an anti-automorphism) if (ab)^ = (b^)(a^) .
    We say a conjugation ^ is an automorphic conjugation (aka. an automorphism or nonreversing) if (ab)^ = (a^)(b^) .
    We say a conjugation is semireversing if it is neither reversing nor automorphic.
    A reversing or automorphic conjugation is completely specifed by its action on scalars and 1-vectors and obeys (ak)^ = (a^)k for integer k and thus satisfies the "exponent hopping" rule (ea)^  = ea^ or a^ = a^ " a where exponentiation is as defined below.
    All conjugations of interest here preserve 0-blades (scalars), save the negation conjugation.
    Conjugations are often best implemented by the direct sign flipping of appropriate components in the given basis rather than a "formal" product evalution.
    We will see that there are four fundamental conjugations, one of which is frame-dependant, from which sixteen composite conjugations may be constructed. These provide 112 distinct  bilinear multivector products in addition to ¿, Ù and so forth such as a§b or a#b . If we also comsider products such as a§Ùb§ for products ¿, ë, Ù, *, and × as well as geometric product we obtain 6×112 bilinear multivector products!

    The identity conjugation has no effect, leaving all blades unaltered. We can denote it by operator 1 or as conjugations 1  or, better,  = .
    1(a) º a1 º a= º a     " a .
    We could represent aba by a1(b) since a1=a but this is notationally dangerous since we often use 1 as a suffix so aba º a=(b) is preferable.

    The negation conjugation negates every blade. It is the only conjugation that negates scalars. We denote the negation of a by -a rather than by a- . Negation is neither reversing nor automorphic, with (-a)(-b)=ab.

Reverse Conjugation
    We define a to be a k-versor if it is the geometric product of k nonzero 1-vectors a=a1a2...ak. If k is even we say a is an even versor.
    If a1,a2,..ak are mutually orthogonal then a1a2..ak = a1Ùa2Ù..ak and so, with regard to vectors known to be orthogonal, versors are equivalent to blades.
    Any k-blade a1Ùa2Ù...Ùak can be expressed as a k-versor a1'a2'...ak' where a1'=a1 , a2' = ^a1'(a2) ,... ai'= ^a1Ùa2Ù...Ùai(ai) ,... is but one suitable choice of 1-vector factors. [  ^ denotes the rejection operator defined later. ]

    We call a§ = ak...a2a1 the reverse conjugation of versor a and to accomodate general multivectors we define the reverse of k-blade bk=b1Ùb2Ù...bk by
    bk§ º (-1)½ (k-1)kbk =bkÙ...Ùb2Ùb1
and can extend § to general a as the sum of the reversals of its component blades. § thus "reverses" both versors and blades.
    Since all k-blades reverse with the same sign change (regardless of signatures), we have
    a§ = åk=0N a<k>§ = åk=0N (-1)½ (k-1)ka<k>
making reversals very simple to compute. We avoid, in particular, the need to factorise.

    The sign sequence (-1)½ (k-1)k     k³0        = (+,+,-,-, +,+,-,-, +,+,-,- .....) is fundamental in multivector analysis. For N<6, only 2-vectors and 3-vectors change sign under reversal. For N=1,4,5,8,9,12,13,...  we have i§=i.
    We write a<+§> for the components of a unchanged by §, and a<-§> for the those components which change sign under §. We then have
    a§ = a<+§> - a<-§>

    In a Euclidean multivector space ÂN, the reversed multivector a§ corresponds to the transpose AT of the matrix representation of a.

    Clearly (ab)§ = b§a§ so § is a reversing conjugation. For any reversing conjugation ^ we have (a§)^ = (a^)§ which we can consider as ^ "commuting" with § and write as ^ק=0 .

    In the biquaternian Â3 model, reverse is known as complex conjugation. If b=a0+b0i +(a1+b1i)e1 +(a2+b2i)e2 +(a3+b3i)e3 we have b§ = (a0-b0i) +(a1-b1i)e1 +(a2-b2i)e2 +(a3-b3i)e3 .

    b(b§) =     (a0+a1e1+a2e2+a3e3)2 + (b0+b1e1+b2e2+b3e3)2 = (a02+a12+a22+a32+ + b02+b12+b22+b32) + e12(a0a1+b0b1) + e2(..) + e3(..)

    A rotor is an even multivector that satisfies aa§ = (aa§)<0> º ±|a|§2 ¹ 0 and is a unit rotor if |a|§=1 .
    If a rotor is also a 2k-versor we call it a k-rotor.
    Any k-versor of nonnull 1-vectors is a rotor but not all rotors are versors, eg. a+be123 is a rotor (with |a+be123|2 = a2-b2) that has no versor form.

Involution Conjugation
    Somewhat akin to § is the main involution conjugation defined by
     a# º åk=0N (-1)ka<k> or, equivalently, a# º a<+> - a<-> .  
    We have (a#)# = a as for all conjugations.
    We say a multivector a is even if a# = a = a<+>, odd if a# = -a = -a<->, and mixed otherwise.
    For l-blade bl ,     aÙbl = ½(abl + bl#a)     ;   a¿bl = ½(abl - bl#a).
    (ab)# = (a#)(b#) so # is a automorphic conjugation.

Clifford Conjugation

    Clifford conjugation ©   =   §# is the combination of reverse and main involution a© º (a§)# = (a#)§ so that
    a<k>© = (-1)½(k-1)k + ka<k> = (-1)½(k+1)k + ka<k>
    It negates grades 1,2,5,6,9,10,13....   .
    We will seldom use the © symbol, favouring the more explicit §#.

    In the biquaternian Â3 representation
    (a0+b0i) +(a1+b1i)e1 +(a2+b2i)e2 +(a3+b3i)e3   =   a0 + a1e1+a2e2+a3e3 + b1e23+b2e31+b3e12 + b0e123 the Clifford conjuation is
    ((a0+b0i) +(a1+b1i)e1 +(a2+b2i)e2 +(a3+b3i)e3)§#   =   (a0+b0i) -(a1+b1i)e1 -(a2+b2i)e2 -(a3+b3i)e3 and is known as vector conjugation.
    Since siD=- si while 1D=1 , Â3 Clifford conjugation corresponds to the conventional matrix adjoint D in the 2×2 complex matrix representation. Thus b(b§#) = (a0+b0i)2 -(a1+b1i)2 -(a2+b2i)2 - (a3+b3i)2 is the conventional (complex number) determinant of the 2×2 complex matrix representation of b.

    We will here refer to the restrictive products a©+b º (ab)<1,2,5,6,9,10,..> and a©-b º (ab)<0,3,4,7,8,...> as the real Clifford, and imaginary Clifford product.

Mitian Conjugation

    This automorphic conjugation is specific to a given orthonormal frame. All our multivector operations thus far have been coordinate-invarient but, in non-Euclidean cases, this one is not. Suppose we have an orthonormal frame { ei} for Âp,q,0  with  ei for p < i £ N having negative signature. We define (and here name) the automorphic mitian conjugation of b by
    b§ º e(p+1)..N§#(b) º e(p+1)..N b eN..(p+1) so that, in particular,   1§ =1 ; ei§ = (-1)qei     i£p     ;      (-1)q-1ei     i>p , negating only the positive signature basis 1-vectors for odd q; and only the negative signature basis 1-vectors for even q.
    § of a basis blade thus represents the (anti)commution of that blade with the particular negative-space spanning pseudoscalar e(p+1)..N.
    Unlike other conjugations which flip all k-blades the same way, a§ ¹ ± a for general 1-vector a.
    The mitian conjugation is the identity conjugation in a Eucliean space. In a nonEucliean space it is of principle interest in constructing the more commonly seen Hermitian conjugation beloved of physicists.
    From a programming perspective, negation, involution, reversion, and mitian conjugation are the four fundamental conjugations from which all other spacially invarient reversing or automorphic conjugations may be constructed.    

Hermitian Conjugation

    Like mitian conjugation, the reversing Hermitian conjugation (aka. conjugation or modulatoruy conjugation is frame-dependant.
    b º b§[-] where [-] denotes the frame-dependant negation of the negative signatured basis 1-vectors corresponds for odd N when i2=-1 to matrix Hermitian conjugation (B º BT^) of the matrix representation.
    For odd N, =§#§ with the # serving to negate the effects of the § on the basis 1-vectors. For even N we have _hm=§§.
    In Âp,q we can define =§#§ for odd q and §§   =   # for even q so that it always negates the negative signatured basis 1-vectors. In a Euclidean space, _mdl   =   § is frame-independant reversion.
    Our motivation for _htm is  that akak = 1 for any unit k-blade (ak2=± 1) whose 1-vector components satisfy a = ± a;  and (akak)<0> > 0 for all nonzero ak , even when ak2=0 .
[ Proof : Suppose ak has i component 1-vectors of negative signature and k-i of positive signature. Then for odd q
    ak§§#ak   =   e(p+1)..N ak§# eN..(p+1) ak   =   e(p+1)..N (-1)kak§ak§  eN..(p+1)
      =   e(p+1)..N (-1)k+(k-i)ak§ak eN..(p+1)   =   e(p+1)..N (-1)k+(k-i)+i eN..(p+1)   =   1 ;
    while  even q we have
    ak§§ak   =   e(p+1)..N ak§ eN..(p+1) ak   =   e(p+1)..N (-1)iak§ak eN..(p+1)   =   e(p+1)..N (-1)2i eN..(p+1)   =   1 .  .]

    Thus (aa)<0>   =   åk=0N  akak   =   åk=0N  |ak§ak|     provides a frame-dependant positive-definite real-valued measure known as the squared modulus of the multivector.
    provides the inverse frame defined below with ei = ei = ei-1 for unit ei. A general vector v = åi=1N viei then has v = åi=1N viei and hence (a)¿b = a¿(b) = a¿+b .
    aa ³ 0 is then the forced Euclidean length of a (zero only for a=0).
    In a Euclidean space, hrm = § so Euclidean Hermitian cojugation is reverse.

    Nullvector e-+e1 where e1¿e-=0 has (e-+e1)(e-+e1)=2 + e1Ùe- for Hermitian conjugation with respect to e-. Setting unit minussquare 1-vector e-' = (e-±ae2)(1-a2) for aÎ(0,1) we have e- + e1 = (1-a2)½e-' -/+ ae2 + e1 and (e-+e1)'¿(e-+e1) still equals 2 where ' is Hermitian conjugation with respect to e-'.
    However, setting minussquare   e-' = (e-±ae1)(1-a2) for aÎ(0,1) we have e- + e1 = (1-a2)½e-' + (1-/+a)e1 and (e-+e1)'(e-+e1)   =    2(1-/+a) + (1-a2)(1-/+a2)e1Ùe-'   =    2(1-/+a) + (1-a2)½(1-/+a2)e1Ùe- where ' is Hermitian conjugation with respect to e-'.

    This shows that by choosing frames appropriately we can make the positive Hermitian magnitude of a given null vector as close to zero as we like but cannot acheive more than the forced Euclidean magnitude.
      Likewise the unit 1-vector v=2e1+e- has frame invariant magnitude   |v| = |v¿v|½ = 3½   but its e--relative modulus |v|+ =Ö(4+1)=5½ is frame specific . With regard to an alternate frame {e+'=3v , e-'=(e+e-)e+'} v is expressed as 3½e+' and attains minimal modulus 3½.
    Thus the Hermitian modulus |aa|½ is frame dependant even for null a.

    We say a multivector is Hermitian if a = a with regard to a particular frame of interest. In a Minkowski space ÂN-1,1 this coresponds to e4¿a =0 where e4 is the negative signatured frame vector.
    We say a multivector is unitary if a = a-1 in a particular frame of interest. Given a central (all-commuting) i with i2=-1 and i=-i,   any unitary (a^T=a-1 ; a=a-1) multivector can be expressed as (iH) º eiH where H is Hermitian (H^T=H ; h=h).

e-negating Conjugation
    We define frame-dependant e4-negating conjugation to be the automorphic ( ((ab)=(a)(b) ) conjuation negating only basis blades containing basis 1-vector e, irrespective of grade. Typically e=e4 of negative (timelike) signature.

Extension Conjugations
    The extension conjugations arise when we embedd UN in a higher dimensional space by extending a given basis by postulating k further 1-vectors orthogonal to the UN basis, as wil be described later. Extension conjugation [-] is the automorphic conjugation that negates only the "new" basis 1-vectors, [+] is the automorphic conjugatuion that negates only the new basis vectors of negative signature.
    By combining the extension conjuation with involution # we create the unextended involution (#) that negates blade b if ¯i(b) is of odd grade where ¯ denotes projection into the UN

Third bit Conjugation
    Involution changes the sign of blades of odd grade. Reverse changes the sign of blades whose grade has the second bit (bit 1) set. Semireversing third bit conjugation negates blades of grade having the third bit set, ie. blades of grade 4,5,6,7, 12,13,14,15, 20,21,... . Clearly we have fourth and fifth and higher bit conjugations for suficiently large N.

Dualed Conjuations
    Any conjugation ^ induces a dualled conjuation a^* º (ai-1)^i. Unlike undualled conjuations, the effect of ^* on a k blade depends on N as well as k, but not, note,  on the signature i2.

Conjugation tabulations
Effect of conjugations and other operations on illustrative blades (e42=-1)
Symbol    Name1e1e12e123e4e14e124e1234e12345e123456e1234567k-blade x
§reverse                    ++--+--++--(-1)½k(k-1)x
#involution                 +-+--+-+-+-(-1)kx
§#Clifford            +--+--++--+(-1)½k(k+1)x
§mitian                     +-+-+-+-+-+-e4xe4
Hermitian                  ++---++--++-e4x§#e4
*dual (Â3)-e123-e23e31.......-xe123
*dual (Â3,1)-e1234-e234-e34e4-e234-e23-e31...-xe1234
*dual (Â4,1)-e12345-e2345-e345e45-e2345-e235-e35e51..-xe12345
-1inverse                    ++---++--++x-2 x
2square                    +1+1-1-1-1+1+1-1-1+1+1x2

    Note that if e72=-1 (as for Â4,1%)  then e12345672=-1 and e1234567=-e1234567.

Possible Implimentation
    All spacially invariant reversing or automorphic conjugations (conjugations that don't distinguish positive signature 1-vector basis elements) can be constructed as a combination from -, §, #, and § so we can specify any such conjugation with a 4-bit nybble flag. Conjugation based variations of the geometric product such as a§#b can be ennumerated in a byte (with some redundancy since eg. (-a)(-b) = ab).
    If we wish to also provide the extended embedding conjugations [-] and [+] these becomes 6- and 12-bit flags .

    If we ennumerate the 32 extended basis blades for e1234 then for each of the four primary conjugations we can construct a 32-bit bitmask with 1 in bit i indicating that the blade of index i flips sign under the conjugation. For the 1,e1,e2,e12,e3,e13,e23,e123,e4,e14,... bitwise basis ordering these values are 0xFFFFFFFF for negation, 0x177E7EE8 for reverse, 0x96696996 for involution, and 0x69699696 for mitian, the latter value assuming e4 to be the only minussquare basis 1-vector. We can construct the flags for composite conjgations by xoring (exclusive-orring) the flags of the contribuory primaries. Hermitian is accordingly 0xE87E81E8 and Clifford 0x8117177E.
    With this ordering, basis blade e[.i.] flips sign under # whenn (i  &  1) ¹ 0 and under § whenn (i  &  2) ¹ 0

    Directation takes 1-vector a to a if a¿e- < 0 ; to -a if a¿e- > 0 ; or to 0 if a¿e- = 0 , for a given e- with e-2 < 0. It is not a conjuation since (a+b)[] ¹ a[] + b[] in general and it is defined only for 1-vectors . However, [] is frame invarieant in asmuch as any alternate e-' with e-¿e-' < 0 will give the some directation.  

Scalar Measures and Normalising
    There are a surprising number of alternate meaningful "size values" for multivectors.

    Associated with any conjugation ^ we have a scalar measure a^*a = (a^a)<0> of a general multivector a and if this is nonzero we can define ^-normalisation
    a^ º a |(a^a)<0>|     so that a^^*a^ = ± 1 .
    We define sclar |a|^ º |(a^a)<0>|½ .

      If a2<0>¹0 we define the unitised multivector a= º a |a2<0>| so that ((a=)2)<0> = ± 1.
    A multivector a is said to be unit if (a2)<0> = ± 1.

    We define the real positive scalar magnitude or length of k-vector a<k> by
    |a<k>|   =   |a<k>§¿a<k>|½   =   |a<k>¿a<k>|½   =   |(a<k>2)<0>|½   .
    We here follow Hestenes and Sobczyk and extend to general multivector a as
    |a| º Ö(åk=0N |a<k>|2) .
    Some authors favour |a| º åk=0N |a<k>| which is a fundamentally different measure when applied to mixed grade multivectors.
    The magnitude of a scalar is thus the absolute (unsigned) value of the scalar and the modulus of a Euclidean 1-vector is its length Ö|a2| = Ö|a¿a | as for conventional vector methods.

    In a Euclidean space, only 0 has zero magnitude. In a non Euclidean space a multivector has zero magnitude iff a<i>¿a<i> = 0     i=1,2,..N , ie. a<i> is either 0 or a null i-vector .
    For Euclidean space ÂN, a<k> a<k>§ = | a<k>¿a<k> | and we have
    | a |2 = a*a§ = a§*a = åk=1N (a<k>a<k>§)<0> since a<i>*a<j>§ = 0 for i¹j
    To accomodate negative signatures we have the weaker expression | a |2 = åk=1N |(a<k>a<k>§)<0> | .
    Hence in Euclidean space |aÙb|2 = a2b2 - (a¿b)2 = -(aÙb)2
    For N=3, |aÙb| = |ab| and |aÙbÙc| = | a.(bc)| .

    |a+be12|2 = ((a+be12)(a+be12§))¿1 = ((a+be12)(a-be12))¿1 = a2 + b2 so modulus in Â2 + is equivalent to traditional "modulus" of a complex number.
    If a or b is null then |aÙb|2 = (aÙb)2 = (a¿b)2

Conjugated Normalisation
    If (a^a) exists for a particlar conjuation ^ , then we have ^-normalisation a ~^ º (a^s)a satisfying (a ~^)^(a ~^) = 1 . If a particular i has i^i = -1 then provided ^ is reversing or i commutes with a we can form ^-antinormalisation a ~-^ º -ia ~^)   satisfying (a ~-^)^(a ~-^) = -1 . We include the negation to make antinormalisation correspond to dual when i=i.

    If ^ is reversing, (a^_ma(a))^ = a^a so a^a contains only blades preserved by ^. Thus if i^=-i the a^a has no i component.

Normalisation     If (a§a)<0> ¹0 we define the normalised multivector a~ º a§ º a |(a§a)<0>| so that |a§|=1 and a~§*a = ± 1.
    A multivector a is normalised if |a|=1 .
    For non Euclidean spaces, normalisation and unitisation of multivectors are distinct concepts that coincide for pure k-blades.
    This definition neglects the pseudocalar component of a§a and would be typically used in an algebra with i^=-i.     If (a§a)<0> ¹0 we define the normalised multivector a~ º a§ º a |(a§a)<0>| so that |a§|=1 and a~§*a = ± 1.
    A multivector a is normalised if |a|=1 .
    For non Euclidean spaces, normalisation and unitisation of multivectors are distinct concepts that coincide for pure k-blades.
    This definition

    We here define the postive real scalar modulus of a multivector as a "forced Euclidean" magnitude. We can only define the modulus with respect to a given orthonormal frame. The modulus is defined by
    |ak|+ º (ak¿+ak)½ º (akak)<0>2
with |a|+ = ( åk=0N |a<k>|+2 )½ .
    The modulus is thus computed by adding the squares of each coordinate |a|+ = Ö åijk..(aijk..)2 when expressed with respect to the favoured extended frame.

    In a Euclidean space, the modulus is equivalent to magnitude and so frame independant. Modulus acts "across grades" in the same way as does the magnitude so often coincides with the traditional "complex modulus"
     |x+iy|+º ((x+iy)(x-iy))½=(x2+y2)½ .
    Geometrically speaking, if we have a multivector of the form a + bbk for some nonnull k-blade bk with bk2<0 then |a + bbk|+ = a2 + b2|bk2| = (a+bbk)(a+bbk)^ where ^ is any conjugation satisfying bk^=-bk.

    No multivector has zero modulus except 0, even in a non-Euclidean space.


    If a2 = la for central (ie. universally commuting) l (typically a scalar or a "complex" scalar-pseudoscalar pair) we say a is a l-selfscaling multivector. We refer to l = |a|s as the selfscale of a and note that if real, it may be negative. Any central multivector is its own selfscale and in particular any scalar a is a selfscaler of selfscale a.
    If a has selfscale l then either a=l or a is non-invertible.
    If a and b are (anti)commuting selfscaling then |ab|s = (-) |a|s|b|s .
    If a<0>¹ 0 then |a|s = a2<0> a<0>-1 and more generally |a|s = (eij..l¿(a2)) (eij..l¿(a))-1 for any blade eij..l present in a.
    All null (a2=0) multivectors are selfscaling with selfscale 0. Selfscaling multivectors of selfscale (-)1 (a2=(-)a) are known as (anti)idempotents.
[ Proof :  a = (a2)a-1  = (la)a-1 Þ a=l so a¹l Þ  !  $ a-1  .]  

    We can extend the definition of selfscale to invertible multivectors.

      If a<0>¹0 we define the scalar-normalised multivector a~ º a(a2<0>)-1 so that (a~)<0> = 1.

    An easy basis-specific way of "normalising" a general multivector a is to rescale it by a positive multiplier so that its maximal-absolute coordinate a[¥] becomes (close to) ±1. This provides a safe and rapid means of rescaling a multivector to ensure that it is not so large or small as to lead to numerical or stability problems without relying on a more computationally expensive measure that may vanish for particular a.
    It is natural to denote the absolute value of the maximal absolute coordinate |a[¥]| by |a|¥ and refer to it as the basis-specific infinity norm .

Dorst/Valkenburg Normalisation
Dorst-Valkenburg define for even Â4,1 multivector x a "new norm"
    |x|DV º  |(x§x<0>)2 - (x§x<4>)2|¼ without the || modulus added here (unnecessary since (apparently)  x§x<0>2 ³ (x§x<4>)2  , but prudent to avoid negative compution noise).
    For bivector x we can write this as |x|DV   =    |(x*x)2 - (xÙx)2|¼ .

    We here define the frame-invarient scalar real trace of N-D multivector a as 2Na<0> corresponding to the conventional matrix trace (sum of lead diagonal elements) of the 2N×2N matrix representation of a . The complex trace is 2N-1 times the trace of a complex matrix representation. Multiplication by the dimension of the matrix representation concerned ensures the multivector trace of 1 equals the matrix trace of 1.
    Traces thus depend on the dimension of the geometric space the result is considered to "reside in", making the trace of a multivector a somewhat artificial construct based on the more fundamental "scalar part" and "scalar-pseudoscalar part" operators <0> and <0;N>.

    The determinant of a multivector is the traditional matrix determinant of a particular 2k×2k matrix representation of interest.
    Det(ab) = Det(a) Det(b) follows from the corresponding matrix result.
    Det(a)= Det(a1)=a2k so Det(-1)= Det(1)=1 and so Det(lb)=±l2k for any unit blade b.
    A multivector a is said to be unimodular if Det(a)=1. A unimodular versor has aa§=a§a=1 .
     Such square matrix represetations can have  or C or Q elements when k<N and we accordingly then have  or C or Q valued determinants. A scalar valued determinant is always provided by the 2N×2N real matrix representation of a multivector a and it is this determinant that we will usually denote denote Det(a).

    If ¦(x)º Ax(A^) has A^A scalar so thet ¦ is a grade-preserving linear transform then we define scalar Det(¦) º (¦(i))* so   Det(¦)2N = (A^A)N

    The complex matrix identity Det(A) = eTrace(ln(A)) has corresponding geometric form Det(a) = (2N-1ln(a))<0;N> given odd N and a minussquare pseudoscalar.

    One way to compute the invese of a multivector is to solve ax=1 as 2N simultaneous linear equations in 2N unknowns, which is possibile iff the determinant of a is non zero.
    An immediate consequence of this, using the mathematical result that the determinant of any matrix having two identical rows is zero, is that mixed multivectors of the form 1+ei are noninvertible. Furthermore (from standard matrix results of the determinant of a product being the product of the determinants) we can deduce that if a is noninvertible, so too are ab and ba for any multivector b.
    If a2=la then either a=l or a is noninvertible, so Det(a)=0 when selfscale |a|s is defined.

    For every restrictive geometric product ¨ we have a frame-dependant   oppositional difference a¨¦b = åij.. åkl.. ¦(aij..,bkl..) eij..¨ekl.. where ¦ : Â2 ®  is usually a symmetric function.
    Essentially we evalute the restricted geometric product as normal but instead of multiplying the blade weightings we use an alternate symmetric function ¦ : Â2®Â . Though looking somewhat like a product (and programmable by generalising a multivector -product primative) ¨¦ is not usually bilinear.

    A particularly useful oppositional difference is provided by ¨=* ; ¦(a,b) = |a-b| if ab<0 , and 0 else . This yields a measure of how much "sign changing" occurs in the coordinates when moving from a to b, useful when searching for minima or maxima of multivector valued functions and when comparing spot gradients in adaptive refinement integrational techniques.

Inverses and Powers
    We now consider some important multivector-valued functions of multivectors.

    We define the inverse or reciprocal of a Î ÂN by a-1a = aa-1 = 1 , if such exists. We say a multivector is noninvertible (aka. singular) if no inverse exists.
    We define the extended inverse of a  Î ÂN to be a-1 if such exists and a otherwise.
    A nonzero 0-vector a has 0-vector inverse a-1 = 1/a. Zero has extended inverse zero.
    A nonnull 1-vector a has 1-vector inverse a-1 = a/a2 . A null vector usually has a distinct 1-vector inverse, eg. (e++e-)-1 = 2(e+-e-).
    A nonnull 2-vector a usually has inverse (a2)-1 a but this fails for N=4 with i2=1 if a2=b+±bi . More generally a2 is invertible provided (a¿a)2 - (aÙa)2 is invertible .
    For k-versor ak=a1a2...ak ,     ak(ak§) = (ak§)ak = a12a22...ak2 is a 0-vector so we have ak-1 = ak§ / a12a22...ak2 provided a12a22...ak2   ¹ 0.
    But ak§ = (-1)½ k(k-1)ak , so we have relatively rapid computation of versor inverses via ak-1 = (-1)½ k(k-1) (a12a22...ak2)-1 ak
    In particular, the inverse of versor a + b(eiÙej) = ei(aei-1 + bej) is (aei-1 + bej)ei /e12(aei-1 + bej)2 =  (a - b(eiÙej)) / (a2 + b2) for Euclidean contraction.
    Inverse is somewhat like a reversing conjugation in that acting on a single (unit) blade it will at most flip its sign, and (ab)-1 = b-1a-1. However as (a+b)-1 ¹ a-1 + b-1 in general and a-1 may be undefined inverse is decidely not a conjugation.

    If a^a is easily invertible for a particular conjugation ^ then a-1 = (a^a)-1 a^  provides a comparatively efficient inverse computation.
    Further, if ^ is reversing or automorphic then the existance of a-1 implies the existance of (a^)-1 = (a-1)^ and hence that of (a^a)-1 = a-1(a^)-1 .
    Thus we can determine the invertibility of a by examination of a^a for any reversing or automorphic conjugation ^ , and may also be able to find a-1 by consideration of a^a for semireversing ^.
    Similar arguments hold for aa^ with a-1 = a^ (aa^)-1

     For N=3 (any signatures), Clifford conjugation ^ = §# is suitable since a(a§#) =   (a(a§#))<0;N> is a scalar-pseudoscalar pair and so easily invertible when nonsingular. This method is known as the Lounesto Inverse.
    An even multivector a has a§#a = a§a of grade <0,4,8,12,...> so, since for N£5 any 4-vector is a 4-blade, we can easily invert nonsingular even multivectors when N£5.
    More generally a^a   =   a<^+>2 - a<^->2 + 2a<^->×a<^+> and we can remove central grades from the commutator product. Thus for ^ = #§ we have
    a#§a   =   a<0,3,4,7,8,..>2 - a<1,2,5,6,9...>2 + 2a<1,2,5,6,9..>×a<3,4,7,8,..>     with the commutator product term vanishing for N£3.
    For even a and N=5 we have a#§a   =   a§a   =   a<0,4>2 - a<2>2 + 2a<2>×a<4> .

    If a and b commute then (a+b)(a-b) = a2 - b2 so that (a+b)-1 = (a-b)(a2 - b2)-1 if such exists. If a and b anticommute we have (a+b)2 = a2 + b2 so that (a+b)-1 = (a+b)(a2 + b2)-1 if such exists.

    The problem of inverting a multivector can be recast into the problem of finding the matrix inverse of its matrix representation, but while theis may allow exploitation of existing code libraries, it is a brute force approach. Spotting whether a^a for a general extended coordinate representation a is itself invertible typically involves deciding whether higher grade components lie within an acceptable error tolerance of zero.

Integer Powers
    The geometric square of multivector a is a2 º aa .
    We can define the kth power of a multivector for integer k in the obvious way by defining
    a0 = 1 ; ak = a(ak-1) for k > 0 ; ak = (a-k)-1 for k < 0     provided inverse (a-k)-1 exists.
    We say a multivector is squarepure or scalar squared if its square is a pure scalar. We say a is nilpotent or null if a2=0. Pure scalars and 1-vectors are squarepure. General bivectors are squarepure only for N£3. Pure ÂN bivectors square to negative scalars for N£3 but for N>3 b22 can have 4-vector components.

    If ab=ba=0 then (a+b)k = ak + bk for k>0.

    If a and b commute we binomial theorem (a+b)k = åj=0k kCjajbk-j .

    If a and b anticommute then we have (by induction on k): (a±b)2k = (a2+b2)k and (a±b)2k+1 = (a±b)(a2+b2)k with a2 and b2 commuting,

Square Roots
    A square root of a multivector x is any multivector x½ satisfying (x½)2 = x .

    If we seek an x½ which we have reason to believe (perhaps because  x satisfies  x^x = a2) will satisfy (((x½)^)(x½) = a for some conjugation ^ and a known simpler multivector a with a^ = a then since x½ y = a + x where y = (x½)^ + x½ satisfies y^ = y and is typically of fewer nonzero grades than x and x½, we can look for a square root for x of the form (a+x)y-1 where y satisfies y^ = y and y2 = 2a + x^ +x = 2(a + x<^>) .
    Then we have
    x½   =   (a+x) ( 2a + x + x^)   =    2  (a+x) (a + x<^>) .
reducing the squareroot to one of a known ^ invariant multivector 2a + x + x^ .
    This can be seen as normalising a+x in that we are seeking an y-1 such that ((a+x)y-1)^ ((a+x)y-1) = a^a = a2.

    For example, if x and x½ satisfy x§x = x½§x½ = 1 , then we have y restricted to grades <1,4,5,8,9,12,13...>. If x and so y are also even this reduces to <1,4,8,12,...> . For N£7 we have the Dorst-Valkenburg rotor square root
    x½ = 2(1+x)(1+x<0> + x<4>)
and for N£5 the (1+x<0> + x<4>) inverse square root can be coinsidered as of a complex, hyperbolic, or nullic number according to the signature of 4-blade x<4> .

Exponentials and Logarithms

    Multivector logarithms and exponentials facilitate the interpolation (parameterisation) of continuous geometric transforms such as rotations and translations. Their exponentition a º ea is simply defined and easy to compute inefficiently, given the geoemetric product, via a brute force summation. We will here discuss strategums for computationally efficient implimentations requiring greater mathematical sophistication.

    We define the exponential of a multivector a as a º exp(a) º ea º åi=0¥  i!-1 ai with ea the traditional scalar exponential function when acting on scalars.
    The notation ea is frequently somewhat awkward for our purposes, the superscripting is inconvenient and the letter "e" is extensively used to denote frame vectors and electron charges so we will here move freely between ea and the alternate notation a , where symbol acts leftwards as abc º a(b)c º a(eb)c as for conjugations and powers. [  Note that the uparrow symbol [ ] may not print correctly from some browsers ]  
    For integer k³0 a+k = ak(a) but otherwise we only have ak = ak(a) when ak exists.

    We denote a-↑ º (-a) = (a)-1 and observe that if a^=-a then a-↑ = a^ = a^ .

    Regardless of the magnitude of the coordinates of a, the i!-1 becomes small so rapidly with i that the infinite summation is convergent and in practice, typically  only a few dozen terms are necessary to compute a within a given error tolerance. Thus the "brute force" summation approach is always avaliable when computing exponentials, if only as a last resort, and a thus exists and is computable to within an arbitary accuracy. This may be compuationally expensive however, since for example K for large positive scalar K requires i > K for i! to dominate Ki. For large |K| ,  i!-1Ki can become uncomfortably large while i£K.  
    One can exploit a = ((k-1a))k where real scalar k is a numericallty covenient value such as a power of 2 of similar magnitude to |a| .

    It is natural to decompose
    a =  cosh(a) +  sinh(a)     where
     cosh(a) º ½(a + (-a)) = åi=0¥ (2i)!-1 a2i and
     sinh(a) º ½(a - (-a)) = åi=0¥ (2i+1)!-1 a2i+1

    If b commutes with a then it also commutes with (la) for any l that commutes with a and b; while if b anticommutes with a but commutes with l we have b(la) = (-la)b = ((la))-1b.
    The "exponent hopping rule" (ea)^  = ea^     " a ie. (a)^ = (a^) " a for a reversing conjugation ^ can be written as ^ = ^ .
    For any puresquare multivector [  a2 = ±|a|2 ] we have
a = ea = cos(|a|) + a~ sin(|a|) if a2 < 0 ;
 cosh(|a|) + a~ sinh(|a|) if a2 > 0 ;
1+aif a2 = 0.

    If a and b commute then so do a and b and (a+b) = a b (with the coefficient of aibj given by (i+j)!-1 i+jCi = i!-1 j!-1 ) butin general (a+b) ¹ (a)(b) .
    If we can express a multivector a as the sum of commuting parts than we can simply the computatiuon by forming the product of the exponentials of those parts. This is true for bivector a for N£

    If a and b anticommute we have (by induction on k): (a±b)2k = (a2+b2)k and (a±b)2k+1 = (a±b)(a2+b2)k so that

    More generally we have a2 = a2 for central a giving (la)   =   ( 1 + a2½l2 + ... ) + (l + a2l33!-1 + ...)a   =    cosh(al) + a-1  sinh(al)a     where  cosh(x) º ½(x + (-x)) ;  sinh(x) º ½(x - (-x)) are the traditional complex hyperbolic functions if i2=-1.

    In particular, for unit multivector a , (fa) (ya) = ((f+y)a) = (f+y) a for any central y,f.

    We have a geometric form of De Moivre's formula ((a))k = (ak) for integer k [ Usually written (eiq)k = e(iqk) ]

    (d/df) (laf)   =   la(laf) .
    If a2=-1 then (d/df) (laf)   =   l(a(lf+p/2)) .
    Whenever i2 = -1 we have a multivector version of Euler's equation:     (ip) º eip = -1 .
    Also eipa=a<+>eip+ a<->e-ip .

    We have (la-1(b)) º (laba-1)   =   a(lb)a-1 º a-1((lb))     " b ,invertible a, and central l and the operator identity
    (la)-1   =   1 + (l2-1)a-1 .

    In ÂN for odd N, scalar and pseudoscalar additive combinations are central (commute with everything) and so "factor out" in exponentiations. Â3 multivector b<0,3> acts as a "complex" (aka. part "imaginary") scalar if we identify i with e123. We  will write it as b<0,3> to emphasise this complex scalar context. Similarly Â3 multivector b<1,2> acts as a "complex" (part "imaginary") 3D 1-vector (b1+b23i)e1 + (b2-b31i)e2 + (b3+b12i)e3 . which we denote by b<1,2> to emphasise this complex 3D 1-vector context. Since b<0,3> commutes with complex b<1,2>, exponential eb factors as
    eb = eb<0,3> eb<1,2> = eb<0,3>(  cosh(|b<1,2>|) + sinh(|b<1,2>|)b<1,2>~)     whenever complex scalar |b<1,2>|ºÖ( (a1+ib1)2+ (a2+ib2)2+ (a3+ib3)2) is nonzero. We also then have the useful biquaternian formula
    eb = ½(e(b<0,3>+|b<1,2>|)(1+b<1,2>~) + e(b<0,3>-|b<1,2>|)(1-b<1,2>~)) ; and when b<1,2>2=0 we have eb = eb<0,3>(1+b<1,2>) .

Baker-Campbell-Hausdorf formulae

    When a and b do not commute, evaluating (a+b) is more complicated.
    Recalling the k-fold commutator a×kb º a×(a×(....×(a×b))...)   = 2-kåi=0k  (-1)k kCi ak-ibai ,     we have a geometric version of the Baker-Campbell-Hausdorf formula
    (a)b = (åk=0¥ 2k(k!)-1 a×kb) a     [  The 2k factors arise from the ½ in our defintion of × ]
    If a×b commutes with both a and b then ab   =   (a+b) (a×b)   =   (a×b) (a+b)     giving the BCH exponent commuting rule     ba   =   ab (2b×a) .
    However, a×b is more likely to anticommute with a and b, as it does whenever a2 commutes with b and b2 commutes with a.

Exponentiating Products

    If a2 commutes with b and b2 commutes with a then a×b commutes with a~b and so since ab= a×b + a~b we have (ab)   =   (a×b) (a~b) .
    If blades a and b are are both negated or both preserved by reversing conjugation ^ we have (a×b)^ = -(a×b) while (a~b)^ = (a~b) . Conversely, if one is preserved and the other is negated by ^ we have (a×b)^ = (a×b) while (a~b)^ = -(a~b) . Either way we obtain
    (ab)   =   (ab)<^-> (ab)<^+>
    More generally, when faced with a for mixed multivector a we can check for a<^+>×a<^-> nontrivially vanishing for ^=§ or §# and if so, reduce the exponention to the prodct of two sparser exponentiations, decomposing a into <0;1;4;5;8;9;..> and <2;3;6;7;10;11;...> components for § or <0;3;4;7;8;..> and <1;2;5;6;9;10;..> components for §#.
    Since for odd N the <0;N> component of a is bound to commute with everything else in a, then for N£7 the §# commutation check reduces to a<3;4>×a<1;2;5;6>=0 while for N£5 the § commutation check reduces to a<1;4>×a<2;3>=0 and the §# to a<3;4>×a<1;5>=0 .
    Though we are of course free to decompose a into any two nonzero components (into odd and even parts, say) and check them for commutativity, splitting as <§±> or <§#±>   is guaranteed to produce commuting or vanishing components when a is the product of two blades.

Exponentiating Idempotents

    If b2 = lb for central l then (ab) = 1 + l-1((la)-1)b     and so when b2=±b we have (ab) = 1 ± ((±a)-1)b .
    Inparticular, setting b=½(1±u) with u2=1 so that b2=b, we have (a½(1±u))   =   1 + (a-1)½(1±u)

Exponentiating Annihilators

    If ab=ba=0 then (a+b) = ab = a + b - 1 .
    In particular, if u2=1 so that (1+u)(1-u)=0 and c,d and u commute with eachother we have
    (c½(1+u) + d½(1-u))   =   c½(1+u)  + d½(1+u)
[ Proof :   Exploiting (c½(1±u))   =   1 + (c-1)½(1±u) we have
    (c½(1+u)) + (d½(1-u)) - 1   =   1 + (c-1)½(1+u) + 1 + (d-1)½(1-u) - 1  .]

Exterior Exponential
    We also have the exterior exponential or outter exponential eÙa º åi=0¥ aÙi (i !)-1     where aÙi º aÙaÙ....Ùa , there being i terms in the outter product. For any pure (non-scalar) blade aÙi = 0 for i>1 and for mixed multivectors having zero scalar part,  eÙa is a strictly finite summation having at most N terms . For bivector a decomposing as a sum of j 2-blades a = a1+a2+..+aj we have eÙa = (1+a1)(1+a2)...(1+aj) which is invertible if ai ¹ 1 for i=1,2,..j.

    The geometric logarithm of a multivector b is a multivector ln(b) º b satisfying (b) = b , when such exists. It is undefined when such does not exist. Geometric logarithms are not uniquely defined unless we specify a minimisation of some kind to provide a principle logarithm, and even then an ambiguity may persist. For any multivector i with i2=-1 that commutes with b we have alternative logarithms b ±2kpi for any intger k, each of which will generate a different set of "fractional powers" of b. More generally (a + 2kpb) = a " kÎZ provided b commutes with a and has b2=-1 . Thus we must always think of having a logarithm for b rather than the logarithm of b.

    If we have a logarithm of a multivector then we can easily compute arbitary powers of it (including its unique inverse and particular square roots) via aa = (a(a)) , since is intrinsically computable via its convergent summation. We have
    ln(ab) º (ab) = a + b     for any positive scalar a but (ab) = a + b holds in general only for commuting a and b. For negative a we require a unit minussquare i commuting with b with which to define (-b) = pi + b .
    (a+a)   =    cosh-1(a(a2+a2)-1)a~     if a2>0 .

    If u2=-1 then (±u) = ±½pu.
    If u2=1 then (a½(1+u) + b½(1-u)) = a½(1+u) + b½(1-u) provides
    (a½(1+u) + b½(1-u))   =   a½(1+u) + b½(1-u)   =   ½((ab) + (ab-1)u) provided i commutes with u and has i2=-1.

    In particular, u = ½pi(1-u) and (ip½(1±u)) = -/+ u provide logs for plussquare unit blades u2=1 .
[ Proof :   u   =   (½(1+u)-½(1-u))   =   1½(1+u) + (-1)½(1-u) = ip½(1-u) . Also (ip½(1±u))   =   i(±i½pu) = i(±iu) = -/+ u.  .]
    More generally (l + mu)   =   (½(l+m)(1+u) + ½(l-m)(1-u))   =   ½((l2-m2) + ((l+m)(l-m)-1) u) .

    If v2=-1 then (±½pv) = ±v gives us (lv) = l + ½pv.
    If s2=0 then s has no logarithm.

    If a2 = a2 for central a then (la)   =    cosh(al) + a-1  sinh(al)a provides (±½pa-1a)   =   a-1 sinhp)a   =   ((a-1 sinhp)))a yielding two principle a logarithms ±½pa-1a - (a-1 sinhp)) .
    When a=i this is a = -/+½pia + (i sinhp))   =   -/+½pia + ½pi + ( sinhp))_lognj .
    Real constant ( sinhp)) = (½(½p-(-½p))) » 0.83347370310 = 0.D55E885816 is thus important when constructing logarithms.

    For odd (even) N a general (even) multivector a with invertible a=a<0;N> decomposes into commuting factors a=a(1+a) where a=a<0;N> and a=a-1a-1 has zero <0;N> component. We have a = a + (1+a) , reducing the logaritm to "complex" logarithm a and a log of a mutivector having unit scalar and zero pseudoscalar components.

    A result from complex matrix theory holds that any unitary (mat(U)=U-1 where _htm=T^) matrix can be expressed as U=(Hi) where H is Hermitian (H=H) so for odd N geometric algebras for which a C2½(N-1)_mult2½(N-1) matrix representation exists and i=-i , any multivector A with A§[-]A=1 has a logarithm a=A with a*§[-]=a* .
    In a Euclidean space =§ so in Â3 any versor has a logarithm of grade <0;1> and in Â7 any versor has a logarithm of grade <0;1;4;5>.

Hyperbolic Functions
    Scalar hyperbolic functions  cosh and  sinh arise in geometric algebras through exponentiating plussquare blades in similar manner to trigonometric functions sin and cos arising from the exponentiation of minussquare blades.
     cosh(f) º ½(f + (-f)) Î [1,¥) attains mimimal value 1 only at f=0 and is approximated by ½|f| for large |f| and by 1 + ½f2 + (4!)-1 f4 + O(f6) for small |f|
     cosh-1(m) = ln(m ± (m2-1)½)     providing positve and negative "inverses" of a 0-symmetric function for m³1.

     sinhf º ½(f - (-f)) Î (-¥,¥) is approximated by Sign(f)½|f| for large |f| and by f + (1/6)f3 + O(f5) for small |f| .
     sinh-1(m) = ln(m + (m2+1)½)     for -¥<m<¥ .

     cosh'(f) =  sinhf ;  sinh'(f) =  coshf ;
     sinh(q±f) =  sinhq coshf ±  coshq sinhf ;  cosh(q±f) =  coshq coshf ±  sinhq sinhf .

    We can generalise to multivector hyperbolic functions
     cosh(a) º ½(a + (-a)) = åk=0¥ (2k)!-1a2k and
     sinh(a) º ½(a - (-a)) = åk=0¥ (2k+1)!-1a2k+1 which are both well definied and intrinsically computable via the summation definitions.

Central Powers
    If u2=1 and i commutes with u and has i2=-1 then we have k2 distinct kth roots of u given by (2pik-1i)½(1+u) +   (pjk-1i)½(1-u) for i,j Î {1,..,k} and more generally we have k2 kth roots of a½(1+u) + b½(1-u) provided by ak-1½(1+u) + bk-1½(1-u) for any "complex" a, b formed from 1 and i.
    Thus, for example, we have four "square roots" for e1 in Â3, specifically ±½(1+e1) ±e23½(1-e1) , and many more when N is large. In defining a "principle" kth root it is natural to favour i for i when the psuedoscalar is central and of negative signature, and to favour i=j=1 so if i commutes with u we define four "principle square roots" of u  
    u½   =   ±(½(1+u) ± i½(1-u))   =   ±½(1±i) + (1-/+i)u) , with inverses ±½(½(1+u) -/+ i½(1-u)).

    If a has a well defined principle logarithm a we can generalise fractional powers of a to
    aa = (a(a)) º ea ln(a) for any central a,  and indeed ac = (c(a)) for any c commuting with a.                                              

Complex Numbers
    Complex numbers z = x + yi = r(qi) with  (x + yi) = x(yi) and (r(qi)) = r + qi are well understood. All are loggable but zero, however if we take the principle logaritm with qÎ(-p,p] there is a discontinuity in (z) when crossing y=0 for negative x.
    For qÎ(-pp) one can use   z = r + (q+2p)i but this merely moves the discontinuity to crossing x=0 for negative y.
    It is consequently impossible to use the multivalued power zq=(q(z)) to define zq continuously over all zÎC.

    1 = 0 and i = ½pi provide i½ = (¼pi)= 2(1+i) and ii = (i(i)) = (-½p) .

    We can compute the square root of a complex number x+iy either via the polar form as  ±r½qi) or as
    (x+iy)½ = ±2((r+x)½ + i(r-x)½) when y³0 ; and ±2((r+x)½ - i(r-x)½) when y<0 ; hence r=(x2+y2)½ must be calculated along with two other real squareroots, but q(x,y) is unnecessary and the result is cartesian rather than polar.

Hyperbolic Numbers
    Before discussing computation of multivector logarithms, we must generalise "complex numbers" x+yi to allow for i2=1 and i2=0.
    If i2=1 we denote i by h and have hyperbolic numbers ,isomorphic to the Â1,1 + algebra generated by 1 and e-Ùe+. These are less well studied that complex numbers and rarely implimented in standard libraries.
    The hyperbolic number x+yh has inverse (x2-y2)-1(x-yh) provided x ¹ ±y but unlike the complex imaginary i, which has i = ½pi, the hyperbolic imaginary h has no pure hyperbolic logarithm. We require an i commuting with h with i2=-1 in order to form
    h = ip½(1-h) ;
    h½ = ½(1+h) + i½½(1-h) ; and
    h = ½(½(1+h) - i½(1-h)) .
    If pseudoscalar i has i2=-1 and commutes with h then i=i is possible, but we normally favour an i that (anti)commutes with blades spanned by h in like manner to h, so the dual i=hi-1 is preferable.
    Similarly -1 has no hyperbolic log. More generally, any hyperbolic number z in the (1)-quadrant { (x,y) : x³0 ; |x| > |y| } has a hyperbolic logarithm z ,  but -z (in the (-1)-quadrant) and ±hz (in the (h)- and (-h)-quadrants) do not.
     We must rely on (-z) = pi + z ; (hz) = ip½(1-h) + z ; and (-hz) = ip½(2-h) + z to provide logarithms over the entire "hyperbolic plane" except along the noninvertible   |x|=|y| "diagonals". Again i=hi-1 or i=hi are the natural choices if i2=-1. If N is even and h is odd a suitable i may not exist.

Nullic Numbers
    We form nullic numbers [aka. dual numbers] with a null imaginary n with n2=0.
    Exponentials and logs are trivial since (x + yn) = x(1+yn) provides (x + yn) = x + x-1yn for x>0 while (x+yn)-1 = x-2(x-yn) for x¹0.
    (x+yn)½ = x½(1 + ½x-1yn) for x>0 and i|x|½(1 + ½x-1yn) for x<0 .
    Because (x + n)k = xk + kxk-1 , Taylor's Theorem provides Automatic Differentiation
    ¦(g(x)+g'(x)n) = ¦(g(x)) + ¦'(g(x))g'(x)n = (¦g)(x) + (¦g)'(x)n .

Bi-imaginary numbers

    The introduction of an i commuting with h moves us into the imaginary hyperbolic algebra generated by {1,h,i} @ {1,e+Ùe-,e1Ùe+Ùe-} within Â1,2   @ Â0,1% and enables logs to be taken of all hyperbolic numbers apart from the nonivertibles on the x=±y quadrant boundaries. If i2=-1 we can decompose a = a + bb  where a is a hyperbolic number and b is a complex hyperbolic number involving commuting elements 1, h, i, and hi .    We can take i to be i, hi, or hi-1 according to choice. If we take i=i then (-1)½ has mixed grade <0;k;N>. If we take i= hi-1 then (-1)½ has grade <0;k,N-k>.
    Since 1, h, and i commute we have (a+b) = ab and (l+xh+yi+zhi)   =   l (xh) (yi) (zhi) provides a factored exponential but logarithm (l+xh+yi+zhi) = (l+xh+yi+zhi) = (a+bh) = (a(1+ba-1h)) = a + (1+ba-1h) is more problematic.

    Setting a =a1+a2i ; b = a3+a4i we have
    a = a1+a2h+a3i + a4hi =   a + bh = g½(1+h) + d½(1-h) where g=a+b=a1+a3+(a2+a4)i ; d = a-b = a1-a3+(a2-a4)i provides the most natural decomposition of a bi-imaginary number into two complex numbers weightings for annihilating idempotents ½(1±h). We then have
    a = g½(1+h) + d½(1-h)
    al = gl½(1+h) + dl½(1-h) and ab = ag½(1+h) + bd½(1-h) .

    We can also form bi-imaginaries with i and n. These lack an idempotised formulation and are best represented as a + bn for complex a,b Î Algebra(i)

Computing Exponentials and Logarithms
    We have seen that if u2=1 so that 1±u annihilate eachother, then provided c and d commute with u and eachother we have
    (c½(1+u) + d½(1-u))   =   c½(1+u)  + b½(1-u) . More generally, if we can express a multivector as a "weighted" sum of K idempotents that annihilate eachother then, provided all the weights commute with the idempotents and eachother, we can reduce an exponential or logarithm computation to the seperate exponentials or logs of the K weightings. We will here refer to such a decomposition into real-weighted mutually annihilating idempotents as an K-idempotised formulation and a complex-weighted sum of K mutually annihilating idempotents as a K-idempotised complex formulation.
    We can thus compute exponentions and logs of such forms without resorting to multivector summations. We have "relegated" all the "summationness" into the exponentiations and logs of complex or hyperbolic or nullic or bi-imaginary weightings. These exponents and logs may well themselves involve summations to evaluate (or approximate), but are of a simpler kind and, in the complex case, are well studied and well implimented in many math libraries.

    First observe that we can decompose a into <0;N> and remaining grades as a = a + b where a = a+a and b has zero <0;N> component. If b2 is central then, setting b =   (b2)½ (which may require an i) , we have 2-idempotised formulation a = a + bb~ = (a+b)½(1+b~) + (a-b)½(1-b~) with b~2 = 1.

    More generally, if we can decompose a as a = a1 + a2A + b where b2 = (b1+b2A)2 for real a1,a2, b1, b2 and some unit or null multivector A that commutes with a then we have a = a + bb~  where b~ = (b2)b has b~2=1 ; a is in algebra { 1, A }  ; b is in algebra { 1,A,i} .
    This fails when (b2) does not exist, which includes when b2=0, but for a nonzero invertible b2 we have
    a-1 = (a2-b2)-1 (a - bb~)     provided a2 ¹ b2 ; and a = (a+b) ½(1+b~) + (a-b) ½(1-b~)
    We will refer to a blade A "factored out" in this manner as a decentralisation blade for a. Blade A is "central" in that it commutes with all the blades of interest (the blades comprising a).

    If A2=-1 we have no need of an additional i and have a "decomplexification" in which the geometric essence of a is distilled into two "complex" Algebra[A] numbers (ie. an unnormalised qubit) and a unit or null multivector b. We can think of a multivector of this form as being a unit or null multivector b that has "aquired some A-clutter". It has not only been rescaled and added to a scalar multiple of bi; a scalar and a multiple of A have also been added.

      For non-null A we can replace minussquared A with -Ai if necessary to esnure A2=1 whereupon the 4-idempotised complex form
    a = (a+b)½(1+b~) + (a-b)½(1-b~) is available where the a±b factors are themeslevs expressed as complex-weighted combinations of ½(1±A). We can regard this as the natural form for multivectors in the commutative algebra [ 1,A,b,i ] = [ 1,½(1±A),½(1±b),i ] .

    If A2=1 we thus have the 4-idempotent complex decomposition a = (x1½(1+A)+x2½(1-A))½(1+b) + (x3½(1+A)+x4½(1-A))½(1-b)
representing a with four complex (ie. [1,i]) numbers x1,x2,x3,x4 ; unit blades A and i; and unit multivector b. We can then compute logs, exponentials and powers of a simply by computing the corresponding logs, exponentials, or powers of the four x1,x2,x3 and x4 complex weights; provided only that all four complex weights are nonzero.

    For null A we have the 1-idempotised nullic bi-imaginary form (a + b)½(1+b~) + (a - bb~ .

    We can form a logarithm for any nonzero complex number; and given a negative signature i commuting with h (or n) we can form a logarithm for any hyperbolic x+yh  provided |x|¹|y| (or any nonzero nullic x+yn).

    We must also address the case a = a + bb where b2=0 . It can then be easily verified that a = a(1+bb) and when a-1 exists we have a = a + a-1bb so that ac = ac(1+ca-1bb) for any c commuting with a. In particular a-1 = a-2(a - bb) .
[ Proof : al = (la)   =   (l(a + a-1b))   =   al(la-1b)   =   al(1+la-1b) and l=1 gives result  .]
    This approach fails when a-1 does not exist, such as when a2=0.

    If A is null we decompose as a = a + bA and exploit (a + bA) = a + a-1bA for a¹0.

    This approach generalises to supposing a = a0 + a1a1 + a2a2 + ... +akak where a1,a2,..ak are k commuting (rather than the stricter mutually annihilating) multivectors with aj2=1 and the aj are either real  or complex with an i commuting with the aj.
    a = (a0 + ak + a1a1 + .. +ak-1ak-1) ½(1+ak) + (a0 - ak + a1a1 + .. +ak-1ak-1) ) ½(1-ak)
      =   (a0 + ak + ak-1 + a1a1 + .. +ak-2ak-2)½(1+ak-1) (a0 + ak - ak-1 + a1a1 + .. +ak-2ak-2)½(1-ak-1)) ½(1+ak) + (a0 - ak + ak-1 + a1a1 + .. +ak-2ak-2)½(1+ak-1) (a0 - ak - ak-1 + a1a1 + .. +ak-2ak-2)½(1-ak-1)) ½(1-ak)
      =   åi=02k-1 bibi     where the bi are the 2k mutually annihilating idempotents 2-k(1±a1)(1±a2)...(1±ak) and the 2k complex bi = a0 ± a1 ± ... ± ak with the ± associated with aj and aj being determined by the jth binary bit of the ennumerator i.
    We then have a = åi=02k-1 bibi and a = åi=02k-1 bibi and have reduced the geometric logarithm to 2k seperate complex logarithms. The condition of logability and invertibility is that all 2k complex weights are nonzero .

    More generally still, we assume a given multivector exists in the algebra generated by k+l+1 commuting blades one of which (i) has negative unit square, k has positive unit square, with the remaining l null. We can represent such a multivector with 2k nullic (l+1)-imaginary numbers, each of which comprises 2l complex numbers, for the 2k idempotents ½(1±b1)½(1±b2)... ½(1±bk) where the bi are the k plussquare blades. This is representable with k+l+1 blades (including i) and 2k+1+1 real values divided into 2k seperately exponentiated and logged nullic (l+1)-imginaries of the form q = a + åi=1l bini åi.j=1l bi.jninj + .... for commuting null ni .

Example: (a1a2)

      Suppose, for example, that we require product logarithm (a1a2) where a1 and a2 are noncommuting k-blades. The delta product a1Da2 is a blade of even grade d £ 2k that commutes with a1a2. It is thus natural to set A = (a1Da2)~ and seperate a1a2 into a "complex" <0;d> component and a <2;4;..;d-2> component and see whether the latter has a <0;d> grade square. If it does, then (a1Da2)~ provides a decentralisation blade for a1a2.
    For a more general a not the product of two known blades, it is sometimes  worth seperating out the maximal grade and checking (by squaring it) whether it is a pure blade, and then checking for commutation with a.
    This is discussed more fully in Transforming k-blades.

Example : (l(w+e¥d))

    As a second example, consider the spinor (l(w+e¥d)) for 2-blade w with w2=-1 and nonunit 1-vector d both in UN and orthogonal null GHC extendor e¥ orthogonal to d and w . In the GHC embedding described later this represents a simultaneous rotation in 2-plane w by angle 2l and translation by 2ld. For ^w(d) ¹ 0, the obvious decentraliser is null 4-blade e¥(dÙb) and if ^w(d)2>0 we can use e¥0(dÙw) as an i. Thus
    (e12 + de¥3 + fe¥1)   =   e¥0e123(1 - de¥e123)(e¥0e3 - fe¥e23)   =   i(1-dA)B   =   (i+de¥)B   =   i(1-dA) ½(1+B) - i(1-dA) ½(1-B)
where i=e¥0e123 ; A = e¥e123 (or e¥) ; and B = e¥03 - fe¥e23 = e¥Ù(e0-fe2)Ùe3 all commmute and have squares -1,0, and +1 respectively. More generally, these are A = e¥Ù(dÙw)~  (or it's (N-2)-blade dual if prefered); B = w* + (e¥¯w(d))* for duality in i=e¥0e123.
    We deduce   
    (l(e12 + de¥3 + fe¥1))   =   cos(l) + sin(l)lde¥e123 + cos(l)lde¥3 + sin(l)(e12 + fe¥1)
    (l(e12 + de¥3 + fe¥1))   =   l - de¥e123 + ½p(e12 - fe¥1)
expressible as 1-idempotised forms with nullic bi-imaginary Algebra{e¥, e¥0e123} wieghts (±li)(1±lde¥) and ½l ± ½pi-de¥e123 respectively for idempotents ½(1±(e¥03-fe¥23))  where i=e¥0e123.
[ Proof :  
    (l(e12+de¥3+fe¥1))   =   (li(1-dA)) ½(1+b) +(-li(1-dA)) ½(1-b)   =   (li)(1-ldiA))½(1+b) + ((-li)(1+ldiA))½(1-b)
      =   cos(l) + sin(l)ldA - cos(l)ldiAB + sin(l)iB   =   cos(l) + sin(l)lde¥e123 - cos(l)ldie¥12 + sin(l)(e12 + fe¥1)
    (e12+de¥3+fe¥1)   =   (i(1-dA))½(1+B) +(-i(1-dA))½(1-B)   =   (i-i-1idA)½(1+B) +((-i)-i-1idA)½(1-B)
      =   (½pi-dA)½(1+B) +(-½pi-dA)½(1-B)   =   -dA + ½piB   =   -de¥e123 + ½pe¥0e123e¥0e3 + ½pe¥0e123e¥e23
    exploiting AB = e¥12 ; iAB = -e¥3 ; iA = e¥0e123e¥e123 = -e¥ ; iB = e¥0e123(e¥03 - fe¥e23) = e12 + fe¥1  .]

    To allow for negative signatured ^w(d) we move to Â4,1% and set i=e¥0e12345 with i§=-i. We then have A = e¥Ù(dÙw)~ as before but B becomes 5-vector B = e¥0e345 - fe¥e2345 = w* + (e¥¯w(d))* (dualing in e¥0e12345).

    To recover the spinor form (l(w+e¥d)) from an extended basis coordinate form a we can exploit
    a<0> = cos(l)
    e¥¿(e¥a) = cos(l) + ^e¥0(a<2>) = cos(l) + sin(l)w
    a<4> = sin(l)le¥ÙdÙw Þ (e¥w)¿(a<4>) = sin(l)l^w(d)
    e¥¿a = cos(l)l^w(d) + sin(l)¯w(d)
where e¥=-e0.

Example : (l(w+e¥d + ge¥0))

      Null 1-vector e¥ and unit 2-blade e¥0 orthogonal to w and d are as described in the Generalised Homogenous Coordinates section. This corresponds to simultaneous rotation by angle 2l in 2-plane w, translation by 2ld and dilation by factor (2lg).
    e12+e¥(de3+fe1) + ge¥0   =   (g+Ai)B     where   unit A = e3 + dg-1e¥ (so Ai=e¥0e12+dg-1e¥e123) and B = e¥Ùb = e¥Ù(e0+b) commute, providing idempotised form (g+i)½(1+A)½(1+B) + (g-i)½(1-A)½(1+B) - (g+i)½(1+A)½(1-B) - (g-i)½(1-A)½(1-B) ; so long as we set
    b   =   f(1+g2)-1(ge1-e2) + dg-1e3     =   f(ge1-e2)~ + dg-1e3 with b2=f2+d2g-2 .

    Hence (l(e12+e¥(de3+fe1) + ge¥0)   =   l + (1+g2) + (½p + tan-1(g-1)A - ½pB)i
[ Proof :  l + (g+iA) + B   =   l + (1+g2) + tan-1(g-1)iA + i½p(1-B) . Expression not numerically verfied.  .]

    (l(e12+fe1+de3+ge¥0)) =  cosh(lg) cos(l) +  sinh(lg) sin(l)Ai +  sinh(lg) cos(l)B + ((lg) sin(l) + (-lg) cos(l))ABi

    With AB = e¥Ù(e0+b)Ùe3    ;     ABi = e¥Ùb' + e12 where b' = f(e1 + ge2)~ = ¯w(b)w .

    For e12+e¥(de4+fe1) + ge¥0 and i = e¥0e12345 we have 3-blade A = e345 + dg-1e¥e35 (so Ai= e¥0e12 + dg-1e¥e124) and 2-blade B = e¥Ùb where b=f(ge1 - e2)~ + dg-1e4. so that AB = e¥ÙbÙe345 and ABi remains the same.

    For the general l(w+e¥d+ge¥0) with w2=-1 we have
    Ai = e¥0w + g-1e¥(wÙd) = (e¥0 + g-1e¥^w(d))w ;
    B = e¥Ù(e0+b) where b = (1+g2)-1(g+w)¯w(d) + g-1^w(d) ;
    ABi = (1 + e¥¯w(b))w .

Logarithm of bivector exponentiation
    A logarihm b of a given bivector exponentiation a=b can be recovered via the canonical decomposition into the sum of at most ½N commuting 2-blades of a<2>. Consider for example the logarithm of the <0;2;4>-vector exponentitiation a=b of Â4,1 2-vector b = lb1 + mb2 where b1 and b2 are commuting null or unit 2-blades so that
    (b2)<4>   =   bÙb   =   2lmb1Ùb2   =   2lmb1b2 .
    Then b   =   (lb1 + mb2)   =   (lb1) (mb2)   =   (cob1(l) + sib1(l)b1)(cob2(m) + sib2(m)b2)   =   cob1(l) cob2(m)  + sib1(l) cob2(m) b1 + cob1(l) sib2(m) b2 + sib1(l) sib2(m) b1Ùb2 where
    cob(x) º cos(x) if b2=-1 ;  cosh(x) if b2=1 ; 1 if b2=0 ;
    sib(x) º sin(x) if b2=-1 ;  sinh(x) if b2=1 ; x if b2=0 .
    tab(x) º tan(x) if b2=-1 ;  tanh(x) if b2=1 ; x if b2=0 are the usual trigonometric or hyperbolic functions according as the sign of b2.
    For unit b1 and b2 we have four simultaneous scalar equations for l and m:
    cob1(l) cob2(m) = a<0>
    sib1(l) cob2(m) = b1-2 b1¿a
    cob1(l) sib2(m) = b2-2 b2¿a
    sib1(l) sib2(m) = (b1Ùb2)-2 (b1Ùb2)¿a
yielding for non zero a<0> solution l = tab1-1( a<0>-1 b1-2 b1¿a ) ; m = tab1-1( a<0>-1 b2-2 b2¿a ) with trigonometric quadrant ambiguities resolvable through the scalar and 4-blade equations.

    For N>5 we have a similar approach canonically decomposing a<2> into a weighted sum of ½N commuting unit or null and seeking li such that b = åi=1½N libi. If a has nonzero scalar part we have ½N equations li   =   tabi-1( a<0>-1 bi-2bi¿a ) with ambiguities resolvable through the <0;4;6;...> components of a.

Projections and Perpendiculars

We follow Dorst IPGA in   defining the projection of multivector a into nonnull k-blade b by
    ¯b a º ¯b(a) º (a¿b)b-1 = (a¿b)¿b-1 .
    The symbol ¯   used in this context should not be confused with used for logarithm.
    [    Hestenes & Sobczyk favour ¯..b(a) º (a.b).b-1     but this requires specific exemptions when acting on scalars and same-grade blades ]
    ¯b(a) = a     provides ¯1(a) = 1*a as an alternate left operator notation for the scalar component a<0> .
    ¯ak(ak) = (ak2)ak-1 = ak .
    ¯b rejects blades "containing" b so that, for example, ¯b(i) = b<N> and ¯ba = a<0> .
    ¯bc(a)=¯c(a) for nonzero b .
    Projection into a nonnull pseudoscalar has no effect ie.  ¯i = 1 .

    We will adopt the notation a Î b as a shorthand for ¯b(a) = a (ie. a "lies within" b) but will use it only when a<0>=0  .
    ¯b is grade preserving and an "outtermorphism" in that ¯b(cÙd) = ¯b(c) Ù ¯b(d) for pureblades c and d
[ Proof :  For c,d,b of pure grades r, s, and t respectively with r+s£t
    ¯b(cÙd)b = (cÙd)¿b = c.(d.b) = c¿(¯b(d)b) = c¿(¯b(d)¿b) = (cÙ¯b(d))¿b
    = (-1)rs(¯b(d)Ùc)¿b = (-1)rs(¯b(d)Ù¯b(c))¿b = (¯b(c)Ù¯b(d))¿b  .]

    ¯bÙc(a) = ¯b(a) + ¯c(a) for pureblades b and c with bÙc¹0.
    ¯b1ÙÙ...ak) = ¯b1Ù Ù¯b1ÙÙ¯b1Ù
    = (¯b1(a1)+...¯br(a1))Ù (¯b1(a2)+...¯br(a2))Ù (¯b1(ak)+...¯br(ak)) .

    ¯b(¯b(c)d) = ¯b(c) ¯b(d) which we will call the projected product rule.    [ HS 1-2.13e ]
[ Proof :  Trivial for scalar c. For 1-vector c=¯b(c) so that cÙb=0 we have
    ¯b(cd) = ¯b(c¿d) + ¯b(cÙd) = ((c¿d)¿b)b-1  + ¯b(c)Ù¯b(d) = (cÙ(d¿b))b-1  + cÙ¯b(d) = (cÙ(¯b(d)b))b-1  + cÙ¯b(d)
    = (cÙ(¯b(d)¿b)b-1  + cÙ¯b(d) = ((c¿¯b(d))¿b)b-1  + cÙ¯b(d) = ((c¿¯b(d))b)b-1  + cÙ¯b(d) = c¿¯b(d) + cÙ¯b(d) = c¯b(d) as required.
    Result follows for general c by induction on grade  .]

    ¯b(¯b(c).d) = ¯b(c).¯b(d) which we will call the projected dot product rule.

    ¯b(¯b(c)×d2) = ¯b(c)ׯb(d2) which we will call the projected bivector commutation rule.
[ Proof :  Let c=¯b(c) . ¯b(c×d2) = ¯b(cd2 - d2¿c - cÙd2) = c¯b(d2) - ¯b(d2)¿c -  cÙ¯b(d2) = cׯb(d2)  .]

    ¯b is self adjoint (symmetric) in that a¿¯b(c) = ¯b(a)¿c = ¯b(a)¿¯b(c) .


    The rejection or perpendicular of a into b is defined by means of the projection as ^b(a) º a - ¯b(a)     which we can write as ^b = 1 - ¯b .
    We then have the decomposition a = ^b(a) + ¯b(a)    where ^b(a).b = 0    and ¯b(a)Ùb = 0.
    For blades a,b and nonnull i we have ^b(a) = ¯(b*)(a) .

    ^b(c).b Þ  ^b(c).d=0 for any d within b, so we have ^b(c).¯b(d) = 0     " c,d which provides the symmetry ¯b(c).d = c.¯b(d) = ¯b(c).¯b(d) .

    For 1-vector a we have ^b(a) = (aÙb)b-1 and ^b(a) = ¯b*(a) but this is not true for general a.

    In Âp,q we have a+ = ¯e1..p(a) - ^e1..p(a) = a - 2^e1..p(a) for 1-vector (and scalar) a so we can regard Modulatory conjugation as 1-2^e1..p acting on scalars and 1-vectors, extended as a reversing conjugation.
    We have ^b(a)b = aÙb  and b^b(a) = bÙa and so ^b(a) = (aÙb)b-1 = b-1(bÙa)     for invertible b .
[ Proof : ^b(a)b = ^b(a).b + ^(a,b)Ùb = ^b(a)Ùb = ^b(a)Ùb + ¯b(a)Ùb = aÙb and similarly for b^b(a) .  .]     

    Note that a2×(a2×b2) = - ^a2(b2)  for bivectors a2,b2.

     If k is odd then ¯bk(a) commutes with bk, but ^bk(a) may contain both commuting and anticommuting components. If k is even then ¯bk(a)<+> commutes with bk while ¯bk(a)<-> anticommutes, while ^bk(a) is variable.

    ¯b and ^b are idempotent (selfsquare) operators in that ¯b(¯b(a))  = ¯b(a)     " a,b which we can express as ¯b2 = ¯b ; ^b2 = ^b . Further ¯b^b = ^b¯b = 0 .

Projection via anticommution
    For any unit multivector b with b2=1 , the operator (½(1+b))=(a) º ½(1+b)a½(1+b) annihilates all blades which anticommute with b, while sending those which commute with b to ½(1+b)a .
    When k=N-1,  ^bk(aj) (anti)commutes oppositely to ¯bk(aj) with bk for odd N , and identitically to ¯bk(aj) for even N.
    Thus for odd N   , ¯bN-1(a)<+> and ^bN-1(a)<-> commute with bN-1 while ¯bN-1(a)<-> and ^bN-1(a)<+> anticommute with bN-1 which we can express as
    bN-1¯bN-1(a) = ¯bN-1(a#)bN-1    ;    
    bN-1^bN-1(a) = -^bN-1(a#)bN-1 .
    Hence for odd N we have ¯bN-1(a) = ½(a-bN-1abN-1-1) = ½(1-(bN-1)-1)(a)
    If b2 is a positive signature unit 2-blade then b2=(a)= ¯b2(a) when acting on 1-vector a.
    If b2=-1 we require (1+b)^ where ^ is a conjugation with b^ = -b .

    The subspace of multivectors that commute with b is closed under the geometric product and so forms a geometric subalgebra. (1+b)= projects general multivectors into this subalgebra.

Scaled Projections
    Also of interest is the scaled projection ¯°b(a) º |b| ¯b(a) = |b| (a¿b)b-1
which, unlike ¯b, is dependant on the magnitude of b but remains linear in a.  

Normalised Projections
    Also of interest is the normalised projection ¯~b(a) º |a| ¯b(a)~ = |a||b||a¿b|-1 (a¿b)b-1
which preserves magnitude but is generally nonlinear in a.

Orthogonal Frames
    Let (a1,a2,..,ak) be a nondegenerate nonorthonormal k-frame with all ai nonnull. Let ai = a1Ù....Ùai . An orthogonal frame (basis) for ak can be constructed as bi = ^(ai, ai-1) = ai-1-1(ai-1Ùai) = ai-1-1ai = ai-1§ai/( which satisfies b1b2..bk = b1Ùb2...Ùbk = ak |a1| 2|a2| 2...!ak-1| 2 .

Intersections and Unions
    When we come to represent geometric entities like k-planes and k-spheres with blades, the multivector meet and join operations will provide the desired geometric intersections and unions. They are thus of fundamental interest. Different authors vary in their precise defintions of meet and join but the differences are essentially matters of scale and sign.
    Let ak,bl be nondegenerate (possibly null) proper blades:

     We will here define their join akÈbl as follows: If akÙbl ¹ 0 then ak È bl º (akÙbl)~
    [ Note the (unit square) normalisation. Dorst reverses the order with ak È bl º (blÙak) when nonvanishing. ]
otherwise $ a nonzero vector c : akÙc = cÙbl = 0. Define akÈbl = ak'Èbl where ak = ak'Ùc = ak'c. Define bl' by bl=cÙbl' .
    We are essentially expressing akÈbl as ak'ÙCÙbl' where ak' has grade k'<k, bl' has grade l'<l, and C is a "common" blade of grade k+l-(k'+l') . We "factor out" the common C via succesive 1-vector extractions and are left with
akÈbl = ak'ÙCÙbl' = ak'Cbl' = ak'Ùbl = ak'bl = akÙbl' = akbl' .
    akÈbl is thus a unit pseudoscalar spanning the minimal-grade ("smallest") subspace spanning both ak and bl ; though there is an arbitarity of sign when akÙbl = 0 . The join can be informally viewed as a "geometric OR".
    This procedural definition suggests an implimentation in which "common" 1-vectors are succesively "sought then factored out" but such should be regarded as a last resort as we can often do better.
    The condition akÙc = cÙbl = 0 is independant of the signatures of a given orthonormal basis so we can compute the join as though in a Euclidean space provided we finally normalise with the true signatures.
    By defining (nonnull) joins to be unit (square to ±1) (unorthodox in the literature) we resolve the scale ambiguity but retain an ambiguity of sign . From a programming perspective, it is sensible to sign the join consistantly so that, for example akÈbl = blÈak even when akÙbk ¹ 0. This can be done by negating the computed join when necessary to ensure that the maximal-modulus coordinate (akÈbk)[¥] with regard to a given extended-basis is positive.

    When akÙbl is nonzero but null, we define  ak È bl º akÙbl without normalisation and suffer an ambiguity of scale.

    The meet of ak and bl spans the largest common subspace of ak and bl and corresponds to the blade C formed by the outter (or equivalently geometric) product of the c's "factored out" when forming the join. It can be viewed as a "geometric AND" and is independent of the basis signatures apart from scale.
    For nonnull join, we can define the meet by akÇbl º (ak(akÈbl)-1).bl   =   (ak¿(akÈbl)-1)¿bl .
    In the particular case akÈbl = i we have ak Ç bl = (ak*)¿bl [   j+k³N allowing ¿ instead of . ] .

    When akÙbl ¹ 0 (ie. when they they have no common subspace) we have (akÇbl)<0> = ±|akÙbl| . This is a wonderfully useful result: rather than vanishing, the meet of distinct spaces is a scalar measure of the minimal seperation between them.   The magnitude of the meet and join becoming particularly relevant . The scalar meet is an example of the square of the meet providing a real scalar measure of the "minimal seperation" of two point sets.
[ Proof :   akÇbl   =   (ak(akÙbl)~-1)¿bl   =   ±(ak(blÙak)~-1)¿bl   =   ±|blÙak| (ak(blÙak)-1)¿bl   =   ±|blÙak| (ak(ak-1Ùbl-1))¿bl  .]

    We can alternatively define the meet of ak and bl with regard to a given blade j containing akÈbl as
    akÇbl º (akj-1 ).bl   =   ak*.bl   =   ak*.(bl*j)   =   (ak*Ùbl*).j
whence the DeMorgan rule (akÇibl)* =  (ak*) Ù (bl*) where * denotes dualing in j, a* º aj-1 .
    If j is either "broader" or "narrower" than the join akÈbl then ak* and bl* contain a common subblade and akÇjbl  vanishes.
    Çj is thus a bilinear anti-symmetric multivector product "j-dual" to  Ù and some authors consequently favour a V-like in inverted Ù notational product symbol for it [  typographically unavailable here ] .
    A rapid first attempt at computing the meet of two blades ak and bl is provided by ( (akj-1) Ù (blj-1) )j where j is a guess of the join. If this is nonzero then it is akÇbl  and we can deduce that our j=akÈbl guess was correct . Obvious guesses for j are i when k+l³N and (akÙbl)~ when k+l<N , the latter case providing   the join when nonvanishing.

    The meet and join are thus independant of the scales of nonzero ak and bl and (with our particular definitions of È and Ç) we have
    akÈbl   =   (bl(akÇbl)-1)Ùak   =   ±(ak(blÇak)-1)Ùbl .
    (ak(akÈbl)-1)¿(bl(akÇbl)-1)   =   (bl(akÇbl)-1)¿(ak(akÈbl)-1) = 1.
    Similar but differing equations arise for variant definitions.
    [   Mann et al favour akÇbl º (bl(akÈbl)-1)¿ak ]

    (ak*)Ç(bl*)   =   (akDbl)* for duality in any blade i spanning a space containing ak and bl and in particular (a*)Ç(b*) = (aÙb)* for distinct 1-vectors a¹b.

    See Multivector Programming for the author's algorithm for simultaneously computing the meet and join of two blades.

    The union of K multivectors a,b,...,f is the unordered set a È b È ... f   =   {a,b,...,f} . Thus, for example, we have vector summation e1 + e2 + (e2+e3) = e1+2e2+e3 ; 3-blade join e1 È e2 È (e2+e3) = e1Ùe2Ùe3 ; and nonorthogonal unordered 3-frame union e1 È e2 È (e2+e3) = {e1,e2,e2+e3}. For finite K, we can in principle specify a union with at most K2N coordinates as a 1-D array of multivectors. However, we are more interested in infinite unions such as pointsets of particular curves or surfaces.   


    The disjoint of ak and bl is ak'Ùbl' where akÈbl = ak' Ù (akÇbl) Ù bl' = ak' (akÇbl) bl' . Bouma et al demonstrate that for nunnull meet, the disjoint is spanned by the delta product akDbl º (akbl)<Max>     which acts like a "geometric XOR" . It is useful when computing the meet and join since it is directly evaluable (although care must be taken deciding whether very small high-grade coordinates are genuine nonzero values or errors arising from finite precision computational "noise")   and corresponds (bar sign) to the dual of the meet in the join with akDbl = (akÇbl)(akÈbl) .
    To see that the delta product is blade-valued note that akbl = (ak'C)(Cbl') = C2(ak'bl') and ak'Ùbl' ¹ 0 so akDbl = C2 ak'Ùbl'.
    If the meet is null, ie. if blades ak and bl have a common null 1-vector factor, then the delta product vanishes while the disjoint persists. By constructing our meet and join using forced Euclidean signatures via the forced Euclidean delta product, we can deftly avoid this problem.
    We will follow Fontinje et al and define the meet via the delta product as
    akÇbl º (akDbl)(akÈbl)-1   =   (akDbl)¿(akÈbl)-1 .
    This provides perhaps the most efficiently computable definition of the meet when the join is known and is equivalent to the (ak(akÈbk)-1)¿bl definition.

    If we only require the scalar part of the meet, it may be efficiently computed as (akDbl)*(akÈbl)-1 .
    For unit join, the square of the meet is directly evaluable as (akÇbl)2 = ± (akDbl)2 where the sign arises from commuting (akDbl) across the pseudoscalar join and the signature of the join.

    Let d = <akDbl>Grd   =   <ak'>Grd+<bl'>Grd   =   k+l - 2<akÇbl>Grd be the grade of the disjoint. We have
    m = <akÇbl>Grd = ½(k+l-d) ;     and j = <akÈbl>Grd = <akDbk>Grd + <akÇbl>Grd   =   ½(k+l+d) , so the disjoint provides rapid computation of the grades of the meet and join.
    The scalar meet occurs when d=k+l , ie. when akDbl = akÙbl ¹ 0.

    If k=l, then d is even and akDbl commutes with 1-vectors either inside the meet or outise the join, whilke anticommuting with 1-vectors in the disjoint. Hence akDbl (anti)commutes with ak and bl according as ½d is odd or even.

    Bouma et al show that for 1-vector operands
    ¯akÇbl = ½( ¯ak - ¯akDbl + ¯(akDbl)bl-1 )
    ¯akÈbl = ½( ¯ak + ¯akDbl + ¯(akDbl)bl-1 )
    Note that k-blade (akDbl)bl-1 is not in general proportionate to ak. Consider for example a2=(e1-e3)e2 ; b1=e1 ; a2Db1 = a2Èb1 = e123 ; a2Çb1 = 1 ; (a2Db1)b1-1 = e23.

    We also have (for 1-vector operands)
    ¯akÇbl =  ¯ak ^akDbl = ¯bl ^akDbl and ^akÈbl = ^ak ^akDbl = ^bl ^akDbl  .

    Dorst et al refer to (cj-1)Ù(bj-1)Ù(aj-1) where j=aÈbÈc as the plunge of blades a,b and c (note order reversal). The plunge of a set of blades is thus the outter product of their duals in their join and provides the highest-grade blade x perpendicular to each of them (ie. satisfying x¿a = x¿b = x¿c = 0).
    An alternative equivalent (up to scale) definition of the plunge is (aÇbÇc)(aÈbÈc)-1 ;  ie. the dual of the meet in the join. .

Null Blades
    Defining the join to be unit fails when it is null as may arise in a nonEuclidean space, as does defining the meet via the inverted join. The delta product vanishes if the meet is null which is also problematic. However there is an elegant solution. Because the spaces spanned by the meet and join are independant of basis signatures, we can calculate them in Âp+q+r rather than Âp,q,r by forcing Euclidean basis signatures when calculating akDbl and constructing akÈbl, so avoiding difficulties arising from projecting into null blades. A case can then be made for "normalising" the join in Âp,q,r as though in Âp+q+r (ie. modulatory normalisation) even when nonnull.
    This is preferable in practice to using the extended inverse which is problematic and discontinuous for nearnull joins.
    In the case when akDbl = akÙbl¹0 , using the forced Euclidean inverse of the join yields a scalar meet having magnitude the forced Euclidean seperation.

Multivectors expressed as summed commuters

    Since multivector inversese are both left and right inverses, any multivector a can be split into commuting parts a = a+ + a- where a± º ½(a ± ka-1) for any k commuting with a chosen pershaps to ensure a desirable property of the a±.
    Consider a±a±§ = ¼(aa§ ± 2k + k2a-2) . For even a± this has grade <0;4;8;12;...> so for N£7 we should seek k giving scalar a±a±§ .  
    If aa§ is nonsingular, we have a-1 = a§ (aa§))-1 and the  easier compuation a± º ½(a ± ka§ (aa§)-1 ) with a±2 = ¼(a2 ± 2k + k2(a§)2 (aa§)-2) having 4-vector component ¼a0a4(1 + k2 (aa§)-2) .
    Hence if we set k2 = -(aa§)2 we attain scalar a±2 .    

Bivectors expressed as sum of commuting 2-blades
    Any Euclidean N-D 2-vector b can be represented as the scalar-weighted sum of at most ½N orthogonal (by which we mean geometrically commuting and, further, vanishing contractive product) unit 2-blades. Such a decomposition is unique except in cases where two or more distinct bladse have the same magnitude.
    Thus, 2D and 3D rotations occurr in a single 2-blade, in 3D the dual of this 2-blade is the fixed axis 1-vector; 4D and 5D rotations have two planes ; 6D and 7D rotations have three 2-blade "axies"in 2D and 3D;   "Decomposing" a given bivector b in this way is nontrivial. Hestenes & Sobczyk (3-4) provide a computational algorithm analagous to diagonalising a skew symmetric matrix which we outline here.
    Given a 2-blade b we seek m 2-blades a1,a2..,am for m £ ½N with aiaj=aiÙaj=ajai so that ai¿aj=0 and b=a1+a2+..+am .
    Since (bk)<2k> = bÙ...Ùb = k!Sr<s<..<varÙas..Ùav = k!Sr<s<..<varas..av     where there are k terms in each product and k suffices r,s,..v , we have
    (bk-1)<2k-2> ¿ (bk)<2k> = k!(k-1)! åi=1m  ai (    Sr<s<..<u ¹ i ar2as2..au2 )     for 1£k<m , providing m linear NC2-dimensional equations, solvable for ai (provided the scalar ai2 are known and distinct) by conventional numerical methods.
    For m=2, we compute 2 and 4-vectors C1 = b ; C2 = ½(b2)<4> = a1^a2 as b is known, and then seek to solve C1 = a1+a2 ; C2 = a1^a2 for a1,a2 by considering characteristic scalar polynomial (a12-l)(a22-l) = a12a22 - l(a12+a22) + l2 = C2*C2 - lC1*C1 + l2 to find l1 = a12 , l2 = a22 .
    We then have two simultaneous bivector equations C1 = a1+a2 ; C1¿C2 = (a1+a2)¿(a1^a2) = l2a1 + l1a2 with l1,l2,C1,C2 known, yielding, provided l1¹l2,
    a1 = (l2-l1)-1(C1C2-l1C1) and hence a2 = b-a1 .
    For m>2 we compute 2k-vector Ck º k!-1(bk)<2k> as the known sum a1Ùa2Ù...Ùak + .... of ordered outter products of k of the m ai. The scalar li = ai2 are the m roots of the mth order scalar polynomial åk=0m  (-l)m-k(Ck*Ck)=0 and we have m linear bivector equations Ck-1.Ck = åi=0m  ai åj1 < j2 < ... < jk-1 excluding i. lj1 lj2... ljk-1

    Thus for m=3, we compute 2, 4 and 6-vectors C1 = a1+a2+a3 ; C2 = ½(a1^a2 + a1^a3 + a2^a3); C3 º 6!-1(b3)<6>   =   6-1 a1^a2^a3 .
    When N=7 , C3 is a psuedovector and so a blade.

    Characteristic cubic (a12-l)(a22-l)(a32-l)   =   a12a22a32 - l(a12a22 + a12a32+a22a32) + l2(a12 + a22 +a32) - l3
      =   62C32 - l2C2*C2 + l2C1*C1 - l3 is solved for l1,l2,l3.

    We then have simultaneous 21-D bivector equations. C1 = a1+a2+a3 ; C1¿C2 = (l2+l3)a1+(l1+l3)a2 +(l1+l2)a3 ; C2¿C3 = l2l3a1 + l1l3a2 + l1l2a3.
æ 1 1 1 ö æ a1 ö = æ C1 ö
ç l2+l3 l1+l3 l2+l3 ÷ ç a2 ÷ ç C1¿C2 ÷
è l2l3 l1l3 l1l2 ø è a3 ø è C2¿C3 ø

solvable when l1,l2,l3 are distinct.

    For N=5, Dorst-Valkenburg advocate the easier computation a1 = ½b(1-|b|DV2b-2) with a12 £ 0; and a2 = b - a1 = ½b(1+|b|DV2b-2) which may have a22 > 0. |x|DV is the Dorst-Valkenburg Norm.
    If b2=0, then b is already a (null) 2-blade so we can set a1=b. If b2¹0 but |b|DV=0 we have the problematic "isoclinic" a12=a22 case again, with a nonunique commuting 2-blade seperation. Dorst-Valkenburg suggest adding a small random bivector to b prior to seperation in this case.

    A significant advantage of the Hestenes & Sobczyk approach is that for odd N we can generalise to seperating <2;N-2>-vectors into £½N commuting <2;N-2>-vectors by expressing them as 2-vectors in a Clifford Algebra having complex (or hyperbolic or nullic depending on the signature of the pseudoscalar) rather than real coordinates. We seek commuting Clifford 2-blades a1,a2,...,am with complex squares, which provide commuting Geometric <2;N-2>-vectors with <0;N> squares, by proceeding as above, seeking complex rather than real solutions to the characteristic polynomial.
    For N=5, this allows us to seek the log of a general Â4,1 multivector by treating it as an even C4,1 Clifford multivector.

    We have described multivectors as elements of a geometric algebra, expressible as wieghted blade summations. From a Programmers's perspective, they are generalised vectors. While the above math may appear intimidatory, and we are just getting started, we hope to show here that multivectors are a tremendously expressive and liberating tool, far easier used than not in geometric programming. Still today, tragically few recognise this.

Next : Multivectors as Geometric Objects

Glossary   Contents   Author
Copyright (c) Ian C G Bell 1998, 2019
Web Source:
Latest Edit: 23 Sep 2019. Counter