97

我想知道您推荐的计算矩阵逆的方法是什么?

我发现的方法似乎并不令人满意。例如,

> c=rbind(c(1, -1/4), c(-1/4, 1))  
> c  
      [,1]  [,2]  
[1,]  1.00 -0.25  
[2,] -0.25  1.00  
> inv(c)  
Error: could not find function "inv"  
> solve(c)    
          [,1]      [,2]  
[1,] 1.0666667 0.2666667  
[2,] 0.2666667 1.0666667  
> solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
> qr.solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  

谢谢!

4

4 回答 4

167

solve(c)确实给出了正确的逆。您的代码的问题是您使用错误的运算符进行矩阵乘法。您应该使用solve(c) %*% c在 R 中调用矩阵乘法。

R 在调用时执行逐个元素的乘法solve(c) * c

于 2010-11-20T01:13:35.630 回答
24

您可以使用MASS包中的函数ginv()(Moore-Penrose 广义逆)

于 2010-11-20T01:44:55.550 回答
9

请注意,如果您关心速度并且不需要担心奇点,solve()应该首选它,ginv()因为它更快,您可以检查:

require(MASS)
mat <- matrix(rnorm(1e6),nrow=1e3,ncol=1e3)

t0 <- proc.time()
inv0 <- ginv(mat)
proc.time() - t0 

t1 <- proc.time()
inv1 <- solve(mat)
proc.time() - t1 
于 2016-02-27T16:37:57.437 回答
0

solve(matrix) = 矩阵的逆,它完美地完成了这项工作。

于 2022-02-05T18:46:43.930 回答