正如标题所说,有没有一种方法可以找出哪个矩阵分解对R中的给定稀疏矩阵应用函数solve()
?例如,在Matlab中有spparms('spumoni', 2);
,它返回一些关于用于解决稀疏矩阵分解的算法的信息。
好吧,运行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。看看它们的实现,例如在这里可以发现La_solve将调用LAPACK例程DGESV,La_solve_cmplx将调用LAPACK例程ZGESV。
很简单吧?