grade | R Documentation |
The grade of a term is the number of basis vectors in it.
grade(C, n, drop=TRUE)
grade(C,n) <- value
grades(x)
gradesplus(x)
gradesminus(x)
gradeszero(x)
C , x |
Clifford object |
n |
Integer vector specifying grades to extract |
value |
Replacement value, a numeric vector |
drop |
Boolean, with default |
A term is a single expression in a Clifford object. It has a
coefficient and is described by the basis vectors it comprises. Thus
4e_{234}
is a term but e_3 + e_5
is not.
The grade of a term is the number of basis vectors in it. Thus
the grade of e_1
is 1, and the grade of
e_{125}=e_1e_2e_5
is 3. The grade operator
\left\langle\cdot\right\rangle_r
is used to extract terms
of a particular grade, with
A=\left\langle A\right\rangle_0 +
\left\langle A\right\rangle_1 +
\left\langle A\right\rangle_2 + \cdots = \sum_r\left\langle A\right\rangle_r
for any Clifford object A
. Thus \left\langle
A\right\rangle_r
is said to be homogenous of grade r
.
Hestenes sometimes writes subscripts that specify grades using an
overbar as in \left\langle
A\right\rangle_{\overline{r}}
. It is conventional to denote
the zero-grade object \left\langle A\right\rangle_0
as
simply \left\langle A\right\rangle
.
We have
\left\langle A+B\right\rangle_r=\left\langle A\right\rangle_r + \left\langle B\right\rangle_r\qquad
\left\langle\lambda A\right\rangle_r=\lambda\left\langle A\right\rangle_r\qquad
\left\langle\left\langle A\right\rangle_r\right\rangle_s=\left\langle A\right\rangle_r\delta_{rs}.
Function grades()
returns an (unordered) vector specifying the
grades of the constituent terms. Function grades<-()
allows
idiom such as grade(x,1:2) <- 7
to operate as expected [here to
set all coefficients of terms with grades 1 or 2 to value 7].
Function gradesplus()
returns the same but counting only basis
vectors that square to +1
, and gradesminus()
counts only
basis vectors that square to -1
. Function signature()
controls which basis vectors square to +1
and which to -1
.
From Perwass, page 57, given a bilinear form
\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
and a basis blade e_\mathbb{A}
with
A\subseteq\left\lbrace
1,\ldots,p+q\right\rbrace
, then
\mathrm{gr}(e_A) = \left|\left\lbrace a\in A\colon
1\leqslant a\leqslant p+q\right\rbrace\right|
\mathrm{gr}_{+}(e_A) = \left|\left\lbrace a\in A\colon
1\leqslant a\leqslant p\right\rbrace\right|
\mathrm{gr}_{-}(e_A) = \left|\left\lbrace a\in A\colon
p < a\leq p+q\right\rbrace\right|
Function gradeszero()
counts only the basis vectors squaring to
zero (I have not seen this anywhere else, but it is a logical
suggestion).
If the signature is zero, then the Clifford algebra reduces to a
Grassmann algebra and products match the wedge product of exterior
calculus. In this case, functions gradesplus()
and
gradesminus()
return NA
.
Function grade(C,n)
returns a clifford object with just the
elements of grade g
, where g %in% n
.
Idiom like grade(C,r) <- value
, where r
is a non-negative
integer (or vector of non-negative integers) should behave as expected.
It has two distinct cases: firstly, where value
is a length-one
numeric vector; and secondly, where value
is a clifford object:
Firstly, grade(C,r) <- value
with value
a
length-one numeric vector. This changes the coefficient of all
grade-r
terms to value
. Note that disordR
discipline must be respected, so if value
has length exceeding
one, a disordR
consistency error might be raised.
Secondly, grade(C,r) <- value
with value
a
clifford object. This should operate as expected: it will replace the
grade-r
components of C
with value
. If
value
has any grade component not in r
, a “grade
mismatch” error will be returned. Thus, only the grade-r
components of C
may be modified with this construction. It is
semi vectorised: if r
is a vector, it is interpreted as a set of
grades to replace.
The zero grade term, grade(C,0)
, is given more naturally by
const(C)
.
Function c_grade()
is a helper function that is documented at
Ops.clifford.Rd
.
In the C code, “term” has a slightly different meaning, referring to the vectors without the associated coefficient.
Robin K. S. Hankin
C. Perwass 2009. “Geometric algebra with applications in engineering”. Springer.
signature
, const
a <- clifford(sapply(seq_len(7),seq_len),seq_len(7))
a
grades(a)
grade(a,5)
a <- clifford(list(0,3,7,1:2,2:3,3:4,1:3,1:4),1:8)
b <- clifford(list(4,1:2,2:3),c(101,102,103))
grade(a,1) <- 13*e(6)
grade(a,2) <- grade(b,2)
grade(a,0:2) <- grade(b,0:2)*7
signature(2,2)
x <- rcliff()
drop(gradesplus(x) + gradesminus(x) + gradeszero(x) - grades(x))
a <- rcliff()
a == Reduce(`+`,sapply(unique(grades(a)),function(g){grade(a,g)}))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.