【发布时间】:2021-06-07 23:43:41
【问题描述】:
正如标题所说,有没有办法找出哪个矩阵分解正在为 R 中的给定稀疏矩阵应用函数solve()?
例如,在 Matlab 中有 spparms('spumoni', 2); ,它返回有关用于解决稀疏矩阵分解的算法的一些信息。
【问题讨论】:
标签: r math sparse-matrix algebra matrix-decomposition
正如标题所说,有没有办法找出哪个矩阵分解正在为 R 中的给定稀疏矩阵应用函数solve()?
例如,在 Matlab 中有 spparms('spumoni', 2); ,它返回有关用于解决稀疏矩阵分解的算法的一些信息。
【问题讨论】:
标签: r math sparse-matrix algebra matrix-decomposition
嗯,运行 R 就可以了
> methods(solve)
会产生
[1] solve.default solve.qr
如果你输入
> solve.default
你会回来的
function (a, b, tol = .Machine$double.eps, LINPACK = FALSE, ...)
{
if (!missing(LINPACK))
warning("the LINPACK argument has been defunct since R 3.1.0")
if (is.complex(a) || (!missing(b) && is.complex(b))) {
a <- as.matrix(a)
if (missing(b)) {
b <- diag(1 + (0+0i), nrow(a))
colnames(b) <- rownames(a)
}
return(.Internal(La_solve_cmplx(a, b)))
}
if (inherits(a, "qr")) {
warning("solve.default called with a \"qr\" object: use 'qr.solve'")
return(solve.qr(a, b, tol))
}
a <- as.matrix(a)
if (missing(b)) {
b <- diag(1, nrow(a))
colnames(b) <- rownames(a)
}
.Internal(La_solve(a, b, tol))
}
这意味着它是 La_solve 或 La_solve_cmplx。查看他们的实现,例如here 可以发现 La_solve 将调用 LAPACK 例程DGESV,而 La_solve_cmplx 将调用 LAPACK 例程 ZGESV。
简单吧?
【讨论】:
signature(a = "dsCMatrix", b = "....") ,R会判断某个矩阵是否可以被Cholesky分解,然后应用Cholesky或PALU分解。我想知道 R 是否对给定矩阵使用其中一种方法。 methods(solve),您建议列出 solve 的所有可能求解器。