我想知道你推荐的计算矩阵逆的方法是什么?
我发现的方式似乎并不令人满意.例如,
> 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
Run Code Online (Sandbox Code Playgroud)
谢谢!
小智 141
solve(c)确实给出了正确的逆.您的代码的问题是您使用错误的运算符进行矩阵乘法.您应该使用solve(c) %*% c在R中调用矩阵乘法.
R在调用时逐个元素执行solve(c) * c.
请注意,如果您关心速度并且不需要担心奇点,那么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
Run Code Online (Sandbox Code Playgroud)