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
.