📜  如何将方阵提升到 R 中的负半幂?

📅  最后修改于: 2022-05-13 01:54:24.639000             🧑  作者: Mango

如何将方阵提升到 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