【问题标题】:chol2inv(chol(x)) and solve(x)chol2inv(chol(x)) 和求解(x)
【发布时间】:2021-11-10 18:49:20
【问题描述】:

我假设chol2inv(chol(x)) 和solve(x) 是两种不同的方法,在所有情况下都得出相同的结论。例如考虑一个矩阵S

A <- matrix(rnorm(3*3), 3, 3)
S <- t(A) %*% A

以下两个命令将给出相同的结果:

solve(S)
chol2inv(chol(S))

现在考虑 S 的 Cholesky 分解的转置:

L <- t(chol(S))

现在以下两个命令的结果不再相同:

solve(L)
chol2inv(chol(L))

这让我有点吃惊。这是预期的行为吗?

【问题讨论】:

    标签: r linear-algebra matrix-inverse


    【解决方案1】:

    chol 期望(不检查)它的第一个参数x 是一个对称正定矩阵,它只对x 的上三角部分起作用。因此,如果L是一个下三角矩阵,D = diag(diag(L))是它的对角线部分,那么chol(L)实际上等价于chol(D),而chol2inv(chol(L))实际上等价于solve(D)。

    set.seed(141339L)
    n <- 3L
    S <- crossprod(matrix(rnorm(n * n), n, n))
    L <- t(chol(S))
    D <- diag(diag(L))
    
    all.equal(chol(L), chol(D)) # TRUE
    all.equal(chol2inv(chol(L)), solve(D)) # TRUE
    

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2014-04-05
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多