powertensor.RdA tensor can be seen as a linear mapping of a tensor to a tensor. If domain and image are the same and the tensor is definite, we can define powers.
power.tensor(X,i,j,p=0.5,by=NULL)a tensor
A tensor can be seen as a linear mapping of a tensor to a tensor. Let
denote \(R_i\) the space of real tensors with dimensions
\(i_1...i_d\).
To compute a power dim(X)[i] and dim(X)[j] need to be
equal and the tensor symmetric between these dimension. Some exponents
are only valid with positive definite mappings. None of these
conditions is checked.
symmetry of the matrix is assumed but not checked.
A <- to.tensor(rnorm(120),c(a=2,b=2,c=5,d=3,e=2))
AAt <- A %e% mark(A,"'",c("a","b"))
AAt
#> , , 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 32.60408 -6.858247
#> [2,] -3.41921 -3.091238
#>
#> , , 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -3.41921 2.108095
#> [2,] 44.16131 5.178018
#>
#> , , 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -6.858247 30.50354
#> [2,] 2.108095 14.42804
#>
#> , , 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -3.091238 14.42804
#> [2,] 5.178018 38.10484
#>
#> attr(,"class")
#> [1] "tensor"
power.tensor(AAt,c("a","b"),c("a'","b'"),-1)
#> , , 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.032405482 0.0073476572
#> [2,] 0.002211463 -0.0004537533
#>
#> , , 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.002211463 0.0003658939
#> [2,] 0.023162271 -0.0031066295
#>
#> , , 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 0.0073476572 0.04160211
#> [2,] 0.0003658939 -0.01520589
#>
#> , , 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -0.0004537533 -0.01520589
#> [2,] -0.0031066295 0.03238629
#>
#> attr(,"class")
#> [1] "tensor"
inv.tensor(AAt,c("a","b"))
#> , , 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.032405482 0.0073476572
#> [2,] 0.002211463 -0.0004537533
#>
#> , , 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.002211463 0.0003658939
#> [2,] 0.023162271 -0.0031066295
#>
#> , , 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 0.0073476572 0.04160211
#> [2,] 0.0003658939 -0.01520589
#>
#> , , 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -0.0004537533 -0.01520589
#> [2,] -0.0031066295 0.03238629
#>
#> attr(,"class")
#> [1] "tensor"
power.tensor(AAt,c("a","b"),c("a'","b'"),2)
#> , , 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 1131.3082 -484.6161
#> [2,] -292.9413 -335.2339
#>
#> , , 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -292.9413 255.5590
#> [2,] 1993.1685 466.9609
#>
#> , , 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -484.6161 1190.114
#> [2,] 255.5590 1022.001
#>
#> , , 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -335.2339 1022.001
#> [2,] 466.9609 1696.515
#>
#> attr(,"class")
#> [1] "tensor"
mul.tensor(AAt,c("a","b"),AAt,c("a'","b'"))
#> , , 1, 1
#>
#> b'
#> a' [,1] [,2]
#> [1,] 1131.3082 -484.6161
#> [2,] -292.9413 -335.2339
#>
#> , , 2, 1
#>
#> b'
#> a' [,1] [,2]
#> [1,] -292.9413 255.5590
#> [2,] 1993.1685 466.9609
#>
#> , , 1, 2
#>
#> b'
#> a' [,1] [,2]
#> [1,] -484.6161 1190.114
#> [2,] 255.5590 1022.001
#>
#> , , 2, 2
#>
#> b'
#> a' [,1] [,2]
#> [1,] -335.2339 1022.001
#> [2,] 466.9609 1696.515
#>
#> attr(,"class")
#> [1] "tensor"
power.tensor(power.tensor(AAt,c("a","b"),c("a'","b'"),1/pi),
c("a","b"),c("a'","b'"),pi)
#> , , 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 32.60408 -6.858247
#> [2,] -3.41921 -3.091238
#>
#> , , 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -3.41921 2.108095
#> [2,] 44.16131 5.178018
#>
#> , , 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -6.858247 30.50354
#> [2,] 2.108095 14.42804
#>
#> , , 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -3.091238 14.42804
#> [2,] 5.178018 38.10484
#>
#> attr(,"class")
#> [1] "tensor"
AAt <- einstein.tensor(A , mark(A,"'",c("a","b")),by="e")
power.tensor(AAt,c("a","b"),c("a'","b'"),-1,by="e")
#> , , 1, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.1464866 0.01480129
#> [2,] 0.0359564 0.03456112
#>
#> , , 2, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.03595640 -0.004496413
#> [2,] 0.06159196 0.006874492
#>
#> , , 1, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.014801286 0.06255841
#> [2,] -0.004496413 -0.01944538
#>
#> , , 2, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.034561117 -0.01944538
#> [2,] 0.006874492 0.05709829
#>
#> , , 1, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 0.0515759892 0.01976643
#> [2,] -0.0007939285 -0.02418942
#>
#> , , 2, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -0.0007939285 0.01209348
#> [2,] 0.0429955468 -0.01371911
#>
#> , , 1, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 0.01976643 0.13141512
#> [2,] 0.01209348 -0.05679115
#>
#> , , 2, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -0.02418942 -0.05679115
#> [2,] -0.01371911 0.10831426
#>
#> attr(,"class")
#> [1] "tensor"
inv.tensor(AAt,c("a","b"),by="e")
#> , , 1, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.1464866 0.01480129
#> [2,] 0.0359564 0.03456112
#>
#> , , 2, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.03595640 -0.004496413
#> [2,] 0.06159196 0.006874492
#>
#> , , 1, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.014801286 0.06255841
#> [2,] -0.004496413 -0.01944538
#>
#> , , 2, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 0.034561117 -0.01944538
#> [2,] 0.006874492 0.05709829
#>
#> , , 1, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 0.0515759892 0.01976643
#> [2,] -0.0007939285 -0.02418942
#>
#> , , 2, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -0.0007939285 0.01209348
#> [2,] 0.0429955468 -0.01371911
#>
#> , , 1, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 0.01976643 0.13141512
#> [2,] 0.01209348 -0.05679115
#>
#> , , 2, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -0.02418942 -0.05679115
#> [2,] -0.01371911 0.10831426
#>
#> attr(,"class")
#> [1] "tensor"
power.tensor(AAt,c("a","b"),c("a'","b'"),2,by="e")
#> , , 1, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 225.2420 -253.3915
#> [2,] -205.5888 -328.3285
#>
#> , , 2, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -205.5888 189.7716
#> [2,] 431.6013 176.6970
#>
#> , , 1, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -253.3915 553.0431
#> [2,] 189.7716 488.9944
#>
#> , , 2, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -328.3285 488.9944
#> [2,] 176.6970 782.8504
#>
#> , , 1, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 515.2014 -35.46942
#> [2,] 120.5943 151.96233
#>
#> , , 2, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 120.5943 -36.52128
#> [2,] 621.0373 113.37879
#>
#> , , 1, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -35.46942 127.12275
#> [2,] -36.52128 97.63036
#>
#> , , 2, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 151.9623 97.63036
#> [2,] 113.3788 219.94038
#>
#> attr(,"class")
#> [1] "tensor"
mul.tensor(AAt,c("a","b"),AAt,c("a'","b'"),by="e")
#> , , 1, 1, 1
#>
#> b'
#> a' [,1] [,2]
#> [1,] 225.2420 -253.3915
#> [2,] -205.5888 -328.3285
#>
#> , , 2, 1, 1
#>
#> b'
#> a' [,1] [,2]
#> [1,] -205.5888 189.7716
#> [2,] 431.6013 176.6970
#>
#> , , 1, 2, 1
#>
#> b'
#> a' [,1] [,2]
#> [1,] -253.3915 553.0431
#> [2,] 189.7716 488.9944
#>
#> , , 2, 2, 1
#>
#> b'
#> a' [,1] [,2]
#> [1,] -328.3285 488.9944
#> [2,] 176.6970 782.8504
#>
#> , , 1, 1, 2
#>
#> b'
#> a' [,1] [,2]
#> [1,] 515.2014 -35.46942
#> [2,] 120.5943 151.96233
#>
#> , , 2, 1, 2
#>
#> b'
#> a' [,1] [,2]
#> [1,] 120.5943 -36.52128
#> [2,] 621.0373 113.37879
#>
#> , , 1, 2, 2
#>
#> b'
#> a' [,1] [,2]
#> [1,] -35.46942 127.12275
#> [2,] -36.52128 97.63036
#>
#> , , 2, 2, 2
#>
#> b'
#> a' [,1] [,2]
#> [1,] 151.9623 97.63036
#> [2,] 113.3788 219.94038
#>
#> attr(,"class")
#> [1] "tensor"
power.tensor(power.tensor(AAt,c("a","b"),c("a'","b'"),1/pi,by="e"),
c("a","b"),c("a'","b'"),pi,by="e")
#> , , 1, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] 10.504785 -5.209013
#> [2,] -5.681459 -7.448405
#>
#> , , 2, 1, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -5.681459 3.452231
#> [2,] 19.552345 2.260577
#>
#> , , 1, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -5.209013 20.48501
#> [2,] 3.452231 9.71370
#>
#> , , 2, 2, 1
#>
#> b
#> a [,1] [,2]
#> [1,] -7.448405 9.71370
#> [2,] 2.260577 25.05804
#>
#> , , 1, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 22.09929 -1.649233
#> [2,] 2.26225 4.357167
#>
#> , , 2, 1, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 2.26225 -1.344137
#> [2,] 24.60897 2.917441
#>
#> , , 1, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] -1.649233 10.018538
#> [2,] -1.344137 4.714337
#>
#> , , 2, 2, 2
#>
#> b
#> a [,1] [,2]
#> [1,] 4.357167 4.714337
#> [2,] 2.917441 13.046802
#>
#> attr(,"class")
#> [1] "tensor"