矩阵求逆在R中的实现

3
我希望能够对一个正定的对称矩阵进行求逆操作。我知道在R中有两个函数solve()chol2inv(),但它们的结果不同。我需要知道为什么会出现这种情况?
谢谢。

请提供数据和代码以重现您的情况,使其可复制。请参阅https://dev59.com/eG025IYBdhLWcg3whGSx 了解更多有关如何做到这一点的提示。 - Paul Hiemstra
最大特征值和最小特征值有多大的差异?例如对于矩阵A,range(eigen(A)$values)范围越大,精确求逆就越困难。 - Sean
2个回答

7
以下是计算矩阵逆的几种方法,包括 solve()chol2inv():
> A <- matrix(c(2, -1, 0, -1, 2, -1, 0, -1, 2), 3)

> solve(A)
     [,1] [,2] [,3]
[1,] 0.75  0.5 0.25
[2,] 0.50  1.0 0.50
[3,] 0.25  0.5 0.75

> chol2inv(chol(A))
     [,1] [,2] [,3]
[1,] 0.75  0.5 0.25
[2,] 0.50  1.0 0.50
[3,] 0.25  0.5 0.75

> library(MASS)
> ginv(A)
     [,1] [,2] [,3]
[1,] 0.75  0.5 0.25
[2,] 0.50  1.0 0.50
[3,] 0.25  0.5 0.75

6

solve 需要提供原始矩阵,而 chol2inv 使用预计算的 Cholesky 分解结果:

set.seed(1)
a<-crossprod(matrix(rnorm(9),3,3))
a_chol<-chol(a)
solve(a)
            [,1]        [,2]       [,3]
[1,]  1.34638151 -0.02957435  0.8010735
[2,] -0.02957435  0.32780020 -0.1786295
[3,]  0.80107345 -0.17862950  1.4533671
chol2inv(a_chol)
            [,1]        [,2]       [,3]
[1,]  1.34638151 -0.02957435  0.8010735
[2,] -0.02957435  0.32780020 -0.1786295
[3,]  0.80107345 -0.17862950  1.4533671

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接