chol2inv(chol(x)) 和 solve(x)

chol2inv(chol(x)) and solve(x)

我假设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))

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

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