R中matrix的逆

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

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

> 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 

谢谢!

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

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

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

请注意,如果您关心速度而不需要担心奇点,那么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 

在matrix符号中,它对运算符“ * ”和运算符“ %*% ”有很大的影响。 第一个元素是乘法元素,第二个是matrix乘法的正确公式。 侯应该做的是:

 c = rbind(c(1, -1/4), c(-1/4, 1)) solve(c) %*% c