代码之家  ›  专栏  ›  技术社区  ›  Mohammad

矩阵反演R

  •  3
  • Mohammad  · 技术社区  · 13 年前

    我想求一个平方对称的正定矩阵的逆。我知道有两个功能 solve() chol2inv() 在R中,但它们的结果不同。我需要知道为什么会发生这种事?

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  7
  •   NPE    13 年前

    这里有几种计算矩阵逆的方法,包括 solve() chol2inv() :

    > A <- matrix(c(2, -1, 0, -1, 2, -1, 0, -1, 2), 3)
    
    > solve(A)
         [,1] [,2] [,3]
    [1,] 0.75  0.5 0.25
    [2,] 0.50  1.0 0.50
    [3,] 0.25  0.5 0.75
    
    > chol2inv(chol(A))
         [,1] [,2] [,3]
    [1,] 0.75  0.5 0.25
    [2,] 0.50  1.0 0.50
    [3,] 0.25  0.5 0.75
    
    > library(MASS)
    > ginv(A)
         [,1] [,2] [,3]
    [1,] 0.75  0.5 0.25
    [2,] 0.50  1.0 0.50
    [3,] 0.25  0.5 0.75
    
        2
  •  6
  •   Jouni Helske    13 年前

    对于 solve 你需要给出你的原始矩阵,但对于 chol2inv 使用预先计算的胆汁分解:

    set.seed(1)
    a<-crossprod(matrix(rnorm(9),3,3))
    a_chol<-chol(a)
    solve(a)
                [,1]        [,2]       [,3]
    [1,]  1.34638151 -0.02957435  0.8010735
    [2,] -0.02957435  0.32780020 -0.1786295
    [3,]  0.80107345 -0.17862950  1.4533671
    chol2inv(a_chol)
                [,1]        [,2]       [,3]
    [1,]  1.34638151 -0.02957435  0.8010735
    [2,] -0.02957435  0.32780020 -0.1786295
    [3,]  0.80107345 -0.17862950  1.4533671