| signature | R Documentation |
Getting and setting the signature of the Clifford algebra
signature(p,q=0)
is_ok_sig(s)
showsig(s)
## S3 method for class 'sigobj'
print(x,...)
s, p, q |
Integers, specifying number of positive elements on the
diagonal of the quadratic form, with |
x |
Object of class |
... |
Further arguments, currently ignored |
The signature functionality is modelled on the lorentz
package; clifford::signature() operates in the same way as
lorentz::sol() which gets and sets the speed of light. The idea
is that both the speed of light and the signature of a Clifford algebra
are generally set once, at the beginning of an R session, and
subsequently change only very infrequently.
Clifford algebras require a bilinear form
\left\langle\cdot,\cdot\right\rangle on
\mathbb{R}^n. If {\mathbf
x}=\left(x_1,\ldots,x_n\right) we define
\left\langle{\mathbf x},{\mathbf x}\right\rangle=x_1^2+x_2^2+\cdots
+x_p^2-x_{p+1}^2-\cdots -x_{p+q}^2
where p+q=n. With this quadratic form the vector space
is denoted \mathbb{R}^{p,q} and we say that
(p,q) is the signature of the bilinear form
\left\langle\cdot,\cdot\right\rangle. This gives rise to
the Clifford algebra C_{p,q}.
If the signature is (p,q), then we have
e_i e_i = +1\, (\mbox{if } 1\leq i\leq p),
-1\, (\mbox{if } p+1\leq i\leq p+q),
0\, (\mbox{if } i>p+q).
Note that (p,0) corresponds to a positive-semidefinite
quadratic form in which e_ie_i=+1 for all i\leq
p and e_ie_i=0 for all i > p.
Similarly, (0,q) corresponds to a negative-semidefinite
quadratic form in which e_ie_i=-1 for all i\leq
q and e_ie_i=0 for all i > q.
A strictly positive-definite quadratic form is specified by infinite
p [in which case q is irrelevant], and
signature(Inf) implements this. For a strictly negative-definite
quadratic form we would have p=0,q=\infty which would
be signature(0,Inf).
If we specify e_ie_i=0 for all i, then the
operation reduces to the wedge product of a Grassmann algebra. Package
idiom for this is to set p=q=0 with signature(0,0), but
this is not recommended: use the stokes package for Grassmann
algebras, which is much more efficient and uses nicer idiom.
Function signature(p,q) returns the signature invisibly; but
setting option show_signature to TRUE makes
showsig() [which is called by signature()] change the
default prompt so it displays the signature, much like showSOL in
the lorentz package. Note that changing the signature changes
the prompt immediately (if show_signature is TRUE), but
changing option show_signature has no effect until
showsig() is called.
Calling signature() [that is, with no arguments] returns an
object of class sigobj with elements corresponding to p and
q. There is special dispensation for “infinite” p or
q: the sigobj class ensures that a near-infinite integer
such as .Machine$integer.max will be printed as
“Inf” rather than, for example,
“2147483647”.
Function is_ok_sig() is a helper function that checks for a
proper signature. If we set signature(p,q), then technically
n>p+q implies e_n^2=0, but usually we are not
interested in e_n when n>p+q and want this to be an error.
Option maxdim specifies the maximum value of n, with
default NULL corresponding to infinity. If n exceeds
maxdim, then is_ok_sig() throws an error. Note that it is
sometimes fine to have maxdim > p+q [and indeed this is useful in
the context of dual numbers]. This option is intended to be a
super-strict safety measure.
> e(6) Element of a Clifford algebra, equal to + 1e_6 > options(maxdim=5) > e(5) Element of a Clifford algebra, equal to + 1e_5 > e(6) Error in is_ok_clifford(terms, coeffs) : option maxdim exceeded
Robin K. S. Hankin
signature()
e(1)^2
e(2)^2
signature(1)
e(1)^2
e(2)^2 # note sign
signature(3,4)
sapply(1:10,function(i){drop(e(i)^2)})
signature(Inf) # restore default
# Nice mapping from Cl(0,2) to the quaternions (loading clifford and
# onion simultaneously is discouraged):
# library("onion")
# signature(0,2)
# Q1 <- rquat(1)
# Q2 <- rquat(1)
# f <- function(H){Re(H)+i(H)*e(1)+j(H)*e(2)+k(H)*e(1:2)}
# f(Q1)*f(Q2) - f(Q1*Q2) # zero to numerical precision
# signature(Inf)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.