r-有没有一种方法可以找到哪个直接求解器正在使用solve()



正如标题所说,有没有一种方法可以找出哪个矩阵分解对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。

很简单吧?

相关内容

  • 没有找到相关文章

最新更新