The wedge
package provides functionality for working with the exterior
calculus. It includes cross 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 wedge from CRAN with:
# install.packages("wedge") # uncomment this to install the package
library("wedge")
wedge
package in useThe package has two main classes of objects, kform
and ktensor
. We
may define a -tensor as
follows
KT <- as.ktensor(cbind(1:4,3:5),1:4)
#> Warning in cbind(1:4, 3:5): number of rows of result is not a multiple of
#> vector length (arg 2)
KT
#> val
#> 1 3 = 1
#> 2 4 = 2
#> 3 5 = 3
#> 4 3 = 4
We can coerce KT
to a function and then evaluate it:
KT <- as.ktensor(cbind(1:4,2:5),1:4)
f <- as.function(KT)
E <- matrix(rnorm(10),5,2)
f(E)
#> [1] -0.1383716
Cross products are implemented:
KT %X% KT
#> val
#> 3 4 3 4 = 9
#> 2 3 1 2 = 2
#> 2 3 2 3 = 4
#> 3 4 1 2 = 3
#> 4 5 1 2 = 4
#> 1 2 1 2 = 1
#> 1 2 2 3 = 2
#> 2 3 3 4 = 6
#> 3 4 2 3 = 6
#> 4 5 4 5 = 16
#> 4 5 2 3 = 8
#> 1 2 3 4 = 3
#> 4 5 3 4 = 12
#> 1 2 4 5 = 4
#> 2 3 4 5 = 8
#> 3 4 4 5 = 12
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)
#> val
#> 1 2 = 0.5
#> 2 1 = -0.5
#> 4 3 = -1.5
#> 2 3 = 1.0
#> 3 2 = -1.0
#> 5 4 = -2.0
#> 3 4 = 1.5
#> 4 5 = 2.0
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:
M <- matrix(c(4,2,3,1,2,4),2,3,byrow=TRUE)
M
#> [,1] [,2] [,3]
#> [1,] 4 2 3
#> [2,] 1 2 4
KF <- as.kform(M,c(1,5))
KF
#> val
#> 2 3 4 = 1
#> 1 2 4 = 5
We may coerce KF
to functional form:
f <- as.function(KF)
E <- matrix(rnorm(12),4,3)
f(E)
#> [1] -1.895993
The wedge product of two -forms is implemented as
%^%
or wedge()
:
KF2 <- kform_general(6:9,2,1:6)
KF2
#> val
#> 6 7 = 1
#> 6 8 = 2
#> 7 9 = 5
#> 7 8 = 3
#> 6 9 = 4
#> 8 9 = 6
KF %^% KF2
#> val
#> 2 3 4 6 7 = 1
#> 1 2 4 6 8 = 10
#> 1 2 4 6 9 = 20
#> 2 3 4 7 9 = 5
#> 1 2 4 7 9 = 25
#> 2 3 4 6 8 = 2
#> 1 2 4 6 7 = 5
#> 2 3 4 8 9 = 6
#> 2 3 4 6 9 = 4
#> 2 3 4 7 8 = 3
#> 1 2 4 7 8 = 15
#> 1 2 4 8 9 = 30
The package can accommodate a number of results from the exterior calculus such as elementary forms:
dx <- as.kform(1)
dy <- as.kform(2)
dz <- as.kform(3)
dx %^% dy %^% dz # element of volume
#> 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)
#> val
#> 1 = 1
#> 2 = 2
#> 3 = 3
#> 4 = 4
#> 5 = 5
#> 6 = 6
The package takes the leg-work out of the exterior calculus:
grad(1:4) %^% grad(1:6)
#> val
#> 2 5 = 10
#> 3 5 = 15
#> 3 6 = 18
#> 1 5 = 5
#> 2 6 = 12
#> 4 5 = 20
#> 1 6 = 6
#> 4 6 = 24
The most concise reference is
But an accessible book would be
For more detail, see the package vignette
vignette("wedge")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.