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 stokes
package provides functionality for working
with the exterior calculus. It includes tensor products and wedge
products and a variety of use-cases. The canonical reference would be
Spivak (see references). A detailed vignette is provided in the
package.
The package deals with -tensors and -forms. A -tensor is a multilinear map , where is considered as a vector space. Given two -tensors the package can calculate their outer product using natural R idiom (see below and the vignette for details).
A -form is an alternating -tensor, that is a -tensor with the property that linear dependence of implies that . Given -forms , the package provides R idiom for calculating their wedge product .
You can install the released version of stokes
from CRAN with:
# install.packages("stokes") # uncomment this to install the package
library("stokes")
set.seed(0)
stokes
package in
useThe package has two main classes of objects, kform
and
ktensor
. In the package, we can create a -tensor by
supplying function as.ktensor()
a matrix of indices and a
vector of coefficients, for example:
<- as.ktensor(rbind(1:3,2:4),1:2)
jj
jj#> A linear map from V^3 to R with V=R^4:
#> val
#> 2 3 4 = 2
#> 1 2 3 = 1
Above, object jj
is equal to
(see Spivak, p76 for details).
We can coerce tensors to a function and then evaluate it:
<- as.ktensor(cbind(1:4,2:5),1:4)
KT <- as.function(KT)
f <- matrix(rnorm(10),5,2)
E f(E)
#> [1] 11.23556
Tensor products are implemented:
%X% KT
KT #> A linear map from V^4 to R with V=R^5:
#> val
#> 1 2 1 2 = 1
#> 2 3 1 2 = 2
#> 3 4 3 4 = 9
#> 2 3 4 5 = 8
#> 1 2 2 3 = 2
#> 1 2 4 5 = 4
#> 4 5 4 5 = 16
#> 2 3 3 4 = 6
#> 4 5 3 4 = 12
#> 1 2 3 4 = 3
#> 3 4 4 5 = 12
#> 3 4 2 3 = 6
#> 4 5 2 3 = 8
#> 3 4 1 2 = 3
#> 2 3 2 3 = 4
#> 4 5 1 2 = 4
Above we see .
An alternating form (or -form) is an
antisymmetric -tensor; the package can convert a general -tensor to
alternating form using the Alt()
function:
Alt(KT)
#> A linear map from V^2 to R with V=R^5:
#> val
#> 5 4 = -2.0
#> 4 5 = 2.0
#> 4 3 = -1.5
#> 3 2 = -1.0
#> 2 3 = 1.0
#> 3 4 = 1.5
#> 2 1 = -0.5
#> 1 2 = 0.5
However, the package provides a bespoke and efficient representation
for -forms as objects with class kform
. Such
objects may be created using the as.kform()
function:
<- matrix(c(4,2,3,1,2,4),2,3,byrow=TRUE)
M
M#> [,1] [,2] [,3]
#> [1,] 4 2 3
#> [2,] 1 2 4
<- as.kform(M,c(1,5))
KF
KF#> An alternating linear map from V^3 to R with V=R^4:
#> val
#> 1 2 4 = 5
#> 2 3 4 = 1
Above, we see that KF
is equal to . We
may coerce KF
to functional form:
<- as.function(KF)
f <- matrix(rnorm(12),4,3)
E f(E)
#> [1] -5.979544
Above, we evaluate KF
at a point in [the three columns of matrix
E
are each interpreted as vectors in ].
The wedge product of two -forms is
implemented as ^
or wedge()
:
<- kform_general(6:9,2,1:6)
KF2
KF2#> An alternating linear map from V^2 to R with V=R^9:
#> val
#> 8 9 = 6
#> 7 9 = 5
#> 6 9 = 4
#> 7 8 = 3
#> 6 8 = 2
#> 6 7 = 1
^ KF2
KF #> An alternating linear map from V^5 to R with V=R^9:
#> val
#> 1 2 4 6 7 = 5
#> 1 2 4 6 8 = 10
#> 2 3 4 6 8 = 2
#> 2 3 4 7 8 = 3
#> 2 3 4 6 9 = 4
#> 1 2 4 6 9 = 20
#> 2 3 4 6 7 = 1
#> 2 3 4 7 9 = 5
#> 1 2 4 7 8 = 15
#> 2 3 4 8 9 = 6
#> 1 2 4 7 9 = 25
#> 1 2 4 8 9 = 30
The package can accommodate a number of results from the exterior calculus such as elementary forms:
<- as.kform(1)
dx <- as.kform(2)
dy <- as.kform(3)
dz ^ dy ^ dz # element of volume
dx #> An alternating linear map from V^3 to R with V=R^3:
#> val
#> 1 2 3 = 1
A number of useful functions from the exterior calculus are provided, such as the gradient of a scalar function:
grad(1:6)
#> An alternating linear map from V^1 to R with V=R^6:
#> val
#> 6 = 6
#> 5 = 5
#> 4 = 4
#> 3 = 3
#> 2 = 2
#> 1 = 1
The package takes the leg-work out of the exterior calculus:
grad(1:4) ^ grad(1:6)
#> An alternating linear map from V^2 to R with V=R^6:
#> val
#> 4 5 = 20
#> 1 5 = 5
#> 2 5 = 10
#> 3 5 = 15
#> 2 6 = 12
#> 4 6 = 24
#> 3 6 = 18
#> 1 6 = 6
The most concise reference is
But a more leisurely book would be
For more detail, see the package vignette
vignette("stokes")
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.