代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

R中矩阵的逆

  •  80
  • Tim unnamed eng  · 技术社区  · 14 年前

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

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

    > 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 回复  |  直到 14 年前
        1
  •  141
  •   user28user28    14 年前

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

    R在调用 solve(c) * c .

        2
  •  21
  •   doug    11 年前

    你可以使用这个函数 吉诺夫() (Moore-Penrose广义逆)在 质量 包裹

        3
  •  8
  •   Matthias Schmidtblaicher    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