signature {clifford} | R Documentation |
The signature of the Clifford algebra
Description
Getting and setting the signature of the Clifford algebra
Usage
signature(p,q=0)
is_ok_sig(s)
showsig(s)
## S3 method for class 'sigobj'
print(x,...)
Arguments
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 |
Details
The signature functionality is modelled on lorentz::sol()
which
gets and sets the speed of light.
Clifford algebras require a bilinear form on \(\mathbb{R}^n\) \(\left\langle\cdot,\cdot\right\rangle\), usually written
\[\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\).
Package idiom for a strictly positive-definite quadratic form would be to specify infinite \(p\) [in which case \(q\) is irrelevant] and for a strictly negative-definite quadratic form we would need \(p=0,q=\infty\).
If we specify \(e_ie_i=0\) for all \(i\), then the operation reduces to the wedge product of a Grassman algebra. Package idiom for this is to set \(p=q=0\), but this is not recommended: use the stokes package for Grassman algebras, which is much more efficient and uses nicer idiom.
Function signature(p,q)
returns the signature silently; but
setting option show_signature
to TRUE
makes
signature()
have the side-effect of calling showsig()
,
which changes the default prompt to display the signature, much like
showSOL
in the lorentz
package. There is special
dispensation for “infinite” \(p\) or \(q\).
Calling signature()
[that is, with no arguments] returns an
object of class sigobj
with elements corresponding to p
and
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.
Author(s)
Robin K. S. Hankin
Examples
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)