假设我有一个正半正定矩阵S
,我希望得到该矩阵的平方根的倒数,即S^(-1/2)
。
我可以这样做吗?
ei <- eigen(S)
V <- ei$vectors
res <- V %*% diag(1 / sqrt(ei$values)) %*% t(V)
res
是否等于S^(-1/2)
?
我只对inverse of square root
的特征值S
,这是正确的吗?
我知道:如果有人想要S^(1/2)
,那么res <- V %*% diag(sqrt(ei$values)) %*% t(V)
,res = S^(1/2)
。
S^(-1/2)
怎么样?
感谢。
答案 0 :(得分:2)
是。我们可以很容易地得到一个例子S并检查S次res时间res是单位矩阵:
set.seed(123)
S <- crossprod(matrix(rnorm(9), 3))
ei <- eigen(S)
V <- ei$vectors
res <- V %*% diag(1 / sqrt(ei$values)) %*% t(V)
S %*% res %*% res
## [,1] [,2] [,3]
## [1,] 1.0000e+00 -2.3731e-15 -1.6653e-16
## [2,] 3.3346e-15 1.0000e+00 -6.6613e-16
## [3,] -1.0235e-16 8.3267e-16 1.0000e+00
另请注意,S和res通勤,即all.equal(S %*% res, res %*% S)
为TRUE,因此最后一行代码中的3个因子可以按任何顺序写入。
答案 1 :(得分:0)
如果根据OP的查询,输入矩阵是正半正定(并且不是正定),则其特征值不会全部为正,并且上面答案中给出的方法将失败,因为
diag(1 / sqrt(ei$values))
不是有限矩阵。