The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
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.
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)
clifford
package
in useThe basic creation function is clifford()
, which takes a
list of basis blades and a vector of coefficients:
<- clifford(list(1,2,1:4,2:3),1:4))
(a #> Element of a Clifford algebra, equal to
#> + 1e_1 + 2e_2 + 4e_23 + 3e_1234
<- clifford(list(2,2:3,1:2),c(-2,3,-3)))
(b #> 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 +
:
+b
a#> 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:
*b # geometric product (also "a % % b")
a#> 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
%^% b # outer product
a #> Element of a Clifford algebra, equal to
#> - 2e_12 + 3e_123
%.% b # inner product
a #> Element of a Clifford algebra, equal to
#> - 16 + 6e_1 - 3e_2 + 14e_3 - 9e_14 + 9e_34 - 6e_134
%star% b # scalar product
a #> [1] -16
%euc% b # Euclidean product
a #> [1] 8
The package can deal with non positive-definite inner products. Suppose we wish to deal with an inner product of
[ \begin{pmatrix} +1 & 0 & 0 & 0 & 0\\ 0 &+1 & 0 & 0 & 0\\ 0 & 0 &+1 & 0 & 0\\ 0 & 0 & 0 &-1 & 0\\ 0 & 0 & 0 & 0 &-1 \end{pmatrix}](https://latex.codecogs.com/png.latex?%0A%5Cbegin%7Bpmatrix%7D%0A%2B1%20%26%200%20%26%200%20%26%200%20%26%200%5C%5C%0A%200%20%26%2B1%20%26%200%20%26%200%20%26%200%5C%5C%0A%200%20%26%200%20%26%2B1%20%26%200%20%26%200%5C%5C%0A%200%20%26%200%20%26%200%20%26-1%20%26%200%5C%5C%0A%200%20%26%200%20%26%200%20%26%200%20%26-1%0A%5Cend%7Bpmatrix%7D%0A ” \[\begin{pmatrix} +1 & 0 & 0 & 0 & 0\\ 0 &+1 & 0 & 0 & 0\\ 0 & 0 &+1 & 0 & 0\\ 0 & 0 & 0 &-1 & 0\\ 0 & 0 & 0 & 0 &-1 \end{pmatrix}\]“)
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" = ",")
<- rcliff(d=20))
(x #> 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
For more detail, see the package vignette
vignette("clifford")
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.