我发现了Cholesky分解的书面功能。 Chol()在所有设置的矩阵上都能流畅运行,不幸的是,我在Git上找到的完整代码没有。它产生:
Warning message:
In sqrt(m[i, i] - p.sum) : NaNs produced
它可以在示例对称矩阵上工作:
(A <- matrix(c(5, 1, 2, 1, 9, 3, 2, 3, 7), 3))
我当然可以使用chol()函数,但是我试图发现这段代码背后的逻辑:
choleskymatrix <- function(m) {
count.rows <- nrow(m)
count.cols <- ncol(m)
L = diag(0, count.rows)
for(i in 1:count.rows) {
for(k in 1:i) {
p.sum <- 0
for(j in 1:k)
p.sum <- p.sum + L[j, i] * L[j, k]
if(i == k)
L[k, i] <- sqrt(m[i, i] - p.sum)
else
L[k, i] <- (m[k, i] - p.sum) / L[k, k]
}
}
return(L)
}
有人可以告诉我这些错误来自哪里吗?