The function Ops.clifford() passes unary and binary arithmetic
operators “+”, “-”, “*”,
“/” and “^” to the appropriate specialist
function. Function maxyterm() returns the maximum index in the
terms of its arguments.
The package has several binary operators:
| Geometric product | A*B = geoprod(A,B) |
| AB=_r,s A_r
B_ssee PDF | Inner product | A %.% B = cliffdotprod(A,B) |
| A B=_r 0 s
0^s 0 A_r
B_s_|s-r|see PDF | Outer product | A %^% B = wedge(A,B) |
| A B=_r,s A_r
B_s_s+rsee PDF | Fat dot product | A %o% B = fatdot(A,B) |
| A B=_r,s A_r
B_s_|s-r|see PDF | Left contraction | A %_|% B = lefttick(A,B) |
| A B=_r,s A_r
B_s_s-rsee PDF | Right contraction | A %|_% B = righttick(A,B) |
| A B=_r,s A_r
B_s_r-ssee PDF | Cross product | A %X% B = cross(A,B) |
| A
B=12_j(AB-BA)see PDF | Scalar product | A %star% B = star(A,B) |
| A B=_r,s A_r
B_s_0see PDF | Euclidean product | A %euc% B = eucprod(A,B) |
In R idiom, the geometric product geoprod(.,.) has to be
indicated with a “*” (as in A*B) and so the
binary operator must be %*%: we need a different idiom for
scalar product, which is why %star% is used.
Because geometric product is often denoted by juxtaposition, package
idiom includes a % % b for geometric product.
Binary operator %dot% is a synonym for %.%, which
causes problems for rmarkdown.
Function clifford_inverse() returns an inverse for nonnull
Clifford objects Cl(p,q) for p+q 5p+5 <= 5, and
a few other special cases. The functionality is problematic as
nonnull blades always have an inverse; but function is.blade()
is not yet implemented. Blades (including null blades) have a
pseudoinverse, but this is not implemented yet either.
The scalar product of two clifford objects is defined as the
zero-grade component of their geometric product:
A B= AB_0NB: notation used by both Perwass and Hestenes
omitted; see PDF
In package idiom the scalar product is given by A %star% B or
scalprod(A,B). Hestenes and Perwass both use an asterisk for
scalar product as in “A*BA*B”, but in package idiom, the
asterisk is reserved for geometric product.
Note: in the package, A*B is the geometric product.
The Euclidean product (or Euclidean scalar product) of two
clifford objects is defined as
A B=
A B^=
AB^_0Perwass
omitted: see PDF
where B^? denotes Conjugate [as in Conj(a)]. In
package idiom the Euclidean scalar product is given by
eucprod(A,B) or A %euc% B, both of which return
A * Conj(B).
Note that the scalar product A A? can be positive or
negative [that is, A %star% A may be any sign], but the
Euclidean product is guaranteed to be non-negative [that is, A
%euc% A is always positive or zero].
Dorst defines the left and right contraction (Chisholm calls these the
left and right inner product) as A Bsee PDF and
A Bsee PDF. See the vignette for more details.
Division, as in idiom x/y, is defined as
x*clifford_inverse(y). Function clifford_inverse() uses
the method set out by Hitzer and Sangwine but is limited to
p+q 5p+q <= 5.
Many of the functions documented here use low-level helper functions
that wrap C code. For example, fatdot() uses
c_fatdotprod(). These are documented at lowlevel.Rd.