kform {stokes} | R Documentation |
k-forms
Description
Functionality for dealing with k
-forms
Usage
kform(S)
as.kform(M,coeffs,lose=TRUE)
kform_basis(n, k)
kform_general(W,k,coeffs,lose=TRUE)
is.kform(x)
d(i)
e(i,n)
## S3 method for class 'kform'
as.function(x,...)
Arguments
n |
Dimension of the vector space |
i |
Integer |
k |
A |
W |
Integer vector of dimensions |
M , coeffs |
Index matrix and coefficients for a |
S |
Object of class |
lose |
Boolean, with default |
x |
Object of class |
... |
Further arguments, currently ignored |
Details
A k
-form is an alternating k
-tensor. In the
package, k
-forms are represented as sparse arrays
(spray
objects), but with a class of c("kform",
"spray")
. The constructor function kform()
takes a
spray
object and returns a kform
object: it ensures that
rows of the index matrix are strictly nonnegative integers, have no
repeated entries, and are strictly increasing. Function
as.kform()
is more user-friendly.
kform()
is the constructor function. It takes aspray
object and returns akform
.as.kform()
also returns akform
but is a bit more user-friendly thankform()
.kform_basis()
is a low-level helper function that returns a matrix whose rows constitute a basis for the vector space\Lambda^k(\mathbb{R}^n)
ofk
-forms.kform_general()
returns akform
object with terms that span the space of alternating tensors.is.kform()
returnsTRUE
if its argument is akform
object.d()
is an easily-typed synonym foras.kform()
. The idea is thatd(1) = dx
,d(2)=dy
,d(5)=dx^5
, etc. Also note that, for example,d(1:3)=dx^dy^dz
, the volume form.
Recall that a k
-tensor is a multilinear map from V^k
to the reals, where V=\mathbb{R}^n
is a vector space.
A multilinear k
-tensor T
is alternating if it
satisfies
T\left(v_1,\ldots,v_i,\ldots,v_j,\ldots,v_k\right)=
-T\left(v_1,\ldots,v_j,\ldots,v_i,\ldots,v_k\right)
In the package, an object of class kform
is an efficient
representation of an alternating tensor.
Function kform_basis()
is a low-level helper function that
returns a matrix whose rows constitute a basis for the vector space
\Lambda^k(\mathbb{R}^n)
of k
-forms:
\phi=\sum_{1\leq i_1 < \cdots < i_k\leq n} a_{i_1\ldots
i_k}\mathrm{d}x_{i_1}\wedge\cdots\wedge\mathrm{d}x_{i_k}
and indeed we have:
a_{i_1\ldots i_k}=\phi\left(\mathbf{e}_{i_1},\ldots,\mathbf{e}_{i_k}\right)
where \mathbf{e}_j,1\leq j\leq k
is a basis for
V
.
Value
All functions documented here return a kform
object except
as.function.kform()
, which returns a function, and
is.kform()
, which returns a Boolean, and e()
, which
returns a conjugate basis to that of d()
.
Note
Hubbard and Hubbard use the term “k
-form”, but Spivak
does not.
Author(s)
Robin K. S. Hankin
References
Hubbard and Hubbard; Spivak
See Also
Examples
as.kform(cbind(1:5,2:6),rnorm(5))
kform_general(1:4,2,coeffs=1:6) # used in electromagnetism
K1 <- as.kform(cbind(1:5,2:6),rnorm(5))
K2 <- kform_general(5:8,2,1:6)
K1^K2 # or wedge(K1,K2)
d(1:3)
dx^dy^dz # same thing
d(sample(9)) # coeff is +/-1 depending on even/odd permutation of 1:9
f <- as.function(wedge(K1,K2))
E <- matrix(rnorm(32),8,4)
f(E) + f(E[,c(1,3,2,4)]) # should be zero by alternating property
options(kform_symbolic_print = 'd')
(d(5)+d(7)) ^ (d(2)^d(5) + 6*d(4)^d(7))
options(kform_symbolic_print = NULL) # revert to default