我正在尝试计算以下矩阵的-0.5幂:
S <- matrix(c(0.088150041, 0.001017491 , 0.001017491, 0.084634294),nrow=2)
Run Code Online (Sandbox Code Playgroud)
在Matlab中,结果是(S^(-0.5)
):
S^(-0.5)
ans =
3.3683 -0.0200
-0.0200 3.4376
Run Code Online (Sandbox Code Playgroud)
> library(expm)
> solve(sqrtm(S))
[,1] [,2]
[1,] 3.36830328 -0.02004191
[2,] -0.02004191 3.43755429
Run Code Online (Sandbox Code Playgroud)
一段时间后,出现了以下解决方案:
"%^%" <- function(S, power)
with(eigen(S), vectors %*% (values^power * t(vectors)))
S%^%(-0.5)
Run Code Online (Sandbox Code Playgroud)
结果给出了预期的答案:
[,1] [,2]
[1,] 3.36830328 -0.02004191
[2,] -0.02004191 3.43755430
Run Code Online (Sandbox Code Playgroud)
矩阵的平方根不一定是唯一的(大多数实数至少有 2 个平方根,因此不仅仅是矩阵)。有多种算法可用于生成矩阵的平方根。其他人已经展示了使用 expm 和特征值的方法,但 Cholesky 分解是另一种可能性(请参阅chol
函数)。