在R矩阵的逆(Inverse of matrix in R)

2019-07-31 01:35发布

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

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

> 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  

谢谢!

Answer 1:

solve(c)没有得到正确的逆。 与您的代码的问题是,你使用了错误操作的矩阵乘法。 你应该用solve(c) %*% c调用矩阵乘法的R.

ř通过元素乘法当调用执行元件solve(c) * c



Answer 2:

您可以在MASS包中使用该功能ginv()(摩尔-彭罗斯广义逆)



Answer 3:

请注意,如果您关心速度,无需担心奇点, 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 


文章来源: Inverse of matrix in R