## The grade of a clifford object

### Description

The grade of a term is the number of basis vectors in it.

### Usage

grade(C, n, drop=TRUE)


### Arguments

 C, x Clifford object n Integer vector specifying grades to extract value Replacement value, a numeric vector drop Boolean, with default TRUE meaning to coerce a constant Clifford object to numeric, and FALSE meaning not to

### Details

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 $$\mathbb{A}\subseteq\left\lbrace 1,\ldots,p+q\right\rbrace$$, then

$\mathrm{gr}(e_\mathbb{A}) = \left|\left\lbrace a\in\mathbb{A}\colon 1\leq a\leq p+q\right\rbrace\right|$ $\mathrm{gr}_{+}(e_\mathbb{A}) = \left|\left\lbrace a\in\mathbb{A}\colon 1\leq a\leq p\right\rbrace\right|$ $\mathrm{gr}_{-}(e_\mathbb{A}) = \left|\left\lbrace a\in\mathbb{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 Grassman 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.

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.

### Note

In the C code, “term” has a slightly different meaning, referring to the vectors without the associated coefficient.

### Author(s)

Robin K. S. Hankin

### References

C. Perwass 2009. “Geometric algebra with applications in engineering”. Springer.

signature, const

### Examples


a <- clifford(sapply(seq_len(7),seq_len),seq_len(7))
a
a == Reduce(+,sapply(unique(grades(a)),function(g){grade(a,g)}))