r - 有没有办法找到哪个直接求解器正在使用solve()?
问题描述
正如标题所说,有没有办法找出哪个矩阵分解将函数应用于Rsolve()
中给定的稀疏矩阵?例如,在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。
容易吧?
推荐阅读
- python - 在 Python 中仅替换字符串的第一个单词
- javascript - 在 Node.js 中,哪些队列会被执行直到它们为空,哪些不是?
- arduino-ide - ESP32 无法上传代码 write_flash 错误
- c++ - 无法在 Visual Studio 中创建 C++ 项目
- ios - 如何处理重量转换
- google-chrome - Chart.JS 不渲染和显示悲伤的脸图标
- node.js - 如何使用数据库PG POOL的正确方法是什么
- dart - 什么是 Dart 语言中 JSON 的头库
- python - Matplotlib 绘图绘制直线,不显示正确的 y 值
- php - 更新/插入一次然后退出