ktensor {stokes} | R Documentation |
k-tensors
Description
Functionality for k
-tensors
Usage
ktensor(S)
as.ktensor(M,coeffs)
is.ktensor(x)
## S3 method for class 'ktensor'
as.function(x,...)
Arguments
M , coeffs |
Matrix of indices and coefficients, as in
|
S |
Object of class |
x |
Object of class |
... |
Further arguments, currently ignored |
Details
A k
-tensor object S
is a map from V^k
to the reals R
, where V
is a vector space (here
R^n
) that satisfies multilinearity:
S\left(v_1,\ldots,av_i,\ldots,v_k\right)=a\cdot
S\left(v_1,\ldots,v_i,\ldots,v_k\right)
and
S\left(v_1,\ldots,v_i+{v_i}',\ldots,v_k\right)=S\left(v_1,\ldots,v_i,\ldots,x_v\right)+
S\left(v_1,\ldots,{v_i}',\ldots,v_k\right).
Note that this is not equivalent to linearity over
V^{nk}
(see examples).
In the stokes package, k
-tensors are represented as
sparse arrays (spray
objects), but with a class of
c("ktensor", "spray")
. This is a natural and efficient
representation for tensors that takes advantage of sparsity using
spray package features.
Function as.ktensor()
will coerce a k
-form to a
k
-tensor via kform_to_ktensor()
.
Value
All functions documented here return a ktensor
object
except as.function.ktensor()
, which returns a function.
Author(s)
Robin K. S. Hankin
References
Spivak 1961
See Also
Examples
as.ktensor(cbind(1:4,2:5,3:6),1:4)
## Test multilinearity:
k <- 4
n <- 5
u <- 3
## Define a randomish k-tensor:
S <- ktensor(spray(matrix(1+sample(u*k)%%n,u,k),seq_len(u)))
## And a random point in V^k:
E <- matrix(rnorm(n*k),n,k)
E1 <- E2 <- E3 <- E
x1 <- rnorm(n)
x2 <- rnorm(n)
r1 <- rnorm(1)
r2 <- rnorm(1)
# change one column:
E1[,2] <- x1
E2[,2] <- x2
E3[,2] <- r1*x1 + r2*x2
f <- as.function(S)
r1*f(E1) + r2*f(E2) -f(E3) # should be small
## Note that multilinearity is different from linearity:
r1*f(E1) + r2*f(E2) - f(r1*E1 + r2*E2) # not small!