Learn R Programming

The clifford package: Clifford algebra in R

The clifford package provides R-centric functionality for working with Clifford algebras of arbitrary dimension and signature. A detailed vignette is provided in the package.

Installation

You can install the released version of the clifford package from CRAN with:

# install.packages("clifford")  # uncomment this to install the package
library("clifford")
set.seed(0)

The clifford package in use

The basic creation function is clifford(), which takes a list of basis blades and a vector of coefficients:

(a <- clifford(list(1,2,1:4,2:3),1:4))
#> Element of a Clifford algebra, equal to
#> + 1e_1 + 2e_2 + 4e_23 + 3e_1234
(b <- clifford(list(2,2:3,1:2),c(-2,3,-3)))
#> Element of a Clifford algebra, equal to
#> - 2e_2 - 3e_12 + 3e_23

So a and b are multivectors. Clifford objects are a vector space and we can add them using +:

a+b
#> Element of a Clifford algebra, equal to
#> + 1e_1 - 3e_12 + 7e_23 + 3e_1234

See how the e2 term vanishes and the e_23 term is summed. The package includes a large number of products:

a*b        # geometric product (also "a % % b")
#> Element of a Clifford algebra, equal to
#> - 16 + 6e_1 - 3e_2 - 2e_12 + 14e_3 + 12e_13 + 3e_123 - 9e_14 + 9e_34 - 6e_134
a %^% b    # outer product
#> Element of a Clifford algebra, equal to
#> - 2e_12 + 3e_123
a %.% b    # inner product
#> Element of a Clifford algebra, equal to
#> - 16 + 6e_1 - 3e_2 + 14e_3 - 9e_14 + 9e_34 - 6e_134
a %star% b # scalar product
#> [1] -16
a %euc% b  # Euclidean product
#> [1] 8

The package can deal with non positive-definite inner products. Suppose we wish to deal with an inner product of

where the diagonal is a number of terms followed by a number of terms. The package idiom for this would be to use signature():

signature(3)

Function signature() is based on lorentz::sol() and its argument specifes the number of basis blades that square to , the others squaring to . Thus and :

basis(1)
#> Element of a Clifford algebra, equal to
#> + 1e_1
basis(1)^2
#> Element of a Clifford algebra, equal to
#> scalar ( 1 )
basis(4)
#> Element of a Clifford algebra, equal to
#> + 1e_4
basis(4)^2
#> Element of a Clifford algebra, equal to
#> the zero clifford element (0)

The package uses the STL map class with dynamic bitset keys for efficiency and speed and can deal with objects of arbitrary dimensions. Thus:

options("basissep" = ",")
(x <- rcliff(d=20))
#> Element of a Clifford algebra, equal to
#> + 4 + 5e_2 + 1e_5 - 2e_4,7 + 2e_11 + 4e_14 - 1e_10,14 + 3e_5,9,15 - 3e_18,19
summary(x^3)
#> Element of a Clifford algebra 
#> Typical terms:  364  ...  + 54e_5,9,10,14,15,18,19 
#> Number of terms: 40 
#> Magnitude: 265721

References

  • D. Hestenes 1987. Clifford algebra to geometric calculus, Kluwer.
  • J. Snygg 2010. A new approach to differential geometry using Clifford’s geometric algebra. Berghauser.
  • C. Perwass 2009. Geometric algebra with applications in engineering. Springer.

Further information

For more detail, see the package vignette

vignette("clifford")

Copy Link

Version

Install

install.packages('clifford')

Monthly Downloads

250

Version

1.0-8

License

GPL (>= 2)

Issues

Pull Requests

Stars

Forks

Maintainer

Robin K S Hankin

Last Published

August 13th, 2022

Functions in clifford (1.0-8)

const

The constant term of a Clifford object
Extract.clifford

Extract or Replace Parts of a clifford
even

Even and odd clifford objects
allcliff

Clifford object containing all possible terms
drop

Drop redundant information
antivector

Antivectors or pseudovectors
Ops.clifford

Arithmetic Ops Group Methods for clifford objects
cartan

Cartan map between clifford algebras
clifford

Create, coerce, and test for clifford objects
clifford-package

tools:::Rd_package_title("clifford")
horner

Horner's method
minus

Take the negative of a vector
as.vector

Coerce a clifford vector to a numeric vector
zap

Zap small values in a clifford object
homog

Homogenous Clifford objects
grade

The grade of a clifford object
summary.clifford

Summary methods for clifford objects
term

Deal with terms
numeric_to_clifford

Coercion from numeric to Clifford form
lowlevel

Low-level helper functions for clifford objects
zero

The zero Clifford object
magnitude

Magnitude of a clifford object
quaternion

Quaternions using Clifford algebras
print

Print clifford objects
signature

The signature of the Clifford algebra
rcliff

Random clifford objects
involution

Clifford involutions