如何将方阵提升到 R 中的负半幂?
可以对方阵本身执行奇异幂运算,其中指定的幂应用于矩阵的每个元素。 Base R 有许多方法和例程来计算任何 k > 1 的幂,其中 k 是整数值。但是,将矩阵提升为非整数幂是一项挑战,可用的解决方案数量有限。在 R 编程语言中,可以调用外部包以更可靠的方式执行功率计算。
方法一:使用sqrtm 方法
R 中的 expm 包用于计算 R 中矩阵的指数幂、对数幂和平方根。 该包需要首先通过以下命令执行安装到工作空间中:
install.packages("expm")
该包具有 sqrtm() 方法,该方法用于 R 中方阵的矩阵平方根计算。
sqrtm (mat)
接下来是在 R 中应用 solve() 方法,该方法通常为 x 求解方程 a %*% x = b,其中 b 可以是向量或矩阵,也可以是 <0 的实数值。此方法可在基础 R 本身中使用。
solve( mat , power)
如果幂为空,则计算矩阵 mat 的逆矩阵,即矩阵的 -1 次幂。因此,总而言之,我们使用 sqrtm() 方法计算半幂并使用 solve() 方法否定它
代码:
R
# loading the required libraries
library ("expm")
# declaring a data frame in R
mat <- matrix(1 : 9, ncol = 3)
print ("Original Matrix")
print (mat)
print ("Power matrix")
# computing -0.5 power of matrix
pow <- solve(sqrtm(mat))
print (pow)
R
# creating data for matrix
vec <- c(0.088150041, 0.001017491 ,
0.001017491, 0.084634294)
# declaring matrix
mat <- matrix(vec , nrow = 2)
print ("Original Matrix")
print (mat)
"%^%" <- function(mat, power)
with(eigen(mat), vectors %*% (values^power * t(vectors)))
power <- -0.5
# raising matrix to -0.5 power
pow <- mat%^%(power)
print ("Modified Matrix")
print (pow)
输出:
[1] "Original Matrix"
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[1] "Power Matrix"
[,1] [,2] [,3]
[1,] 0- 6980476i 0+13960950i 0- 6980475i
[2,] 0+13960950i 0-27921901i 0+13960951i
[3,] 0- 6980475i 0+13960951i 0- 6980475i
方法 2:使用特征向量方法
^%^运算符可用于计算矩阵幂运算,其中对指定矩阵执行特征值分解。其对应的向量以及值以数组的形式获得。然后使用向量与值向量的转置返回自定义函数值以计算矩阵幂。然而,这种方法被认为不适合随机方阵的工作,因为它受到许多约束的指导,其中一些是:
- 此方法不适用于没有特征值分解的矩阵。
- 此方法不适用于未对角化的矩阵。
- 矩阵最好是对称的。
代码:
电阻
# creating data for matrix
vec <- c(0.088150041, 0.001017491 ,
0.001017491, 0.084634294)
# declaring matrix
mat <- matrix(vec , nrow = 2)
print ("Original Matrix")
print (mat)
"%^%" <- function(mat, power)
with(eigen(mat), vectors %*% (values^power * t(vectors)))
power <- -0.5
# raising matrix to -0.5 power
pow <- mat%^%(power)
print ("Modified Matrix")
print (pow)
输出:
[1] "Original Matrix"
[,1] [,2]
[1,] 0.088150 0.001017
[2,] 0.001017 0.084634
[1] "Modified Matrix"
[,1] [,2]
[1,] 3.36830 -0.02004
[2,] -0.02004 3.43755