有没有办法找到哪个直接求解器正在使用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,tol))
    }
    a <- as.matrix(a)
    if (missing(b)) {
        b <- diag(1,nrow(a))
        colnames(b) <- rownames(a)
    }
    .Internal(La_solve(a,tol))
}

这意味着它是 La_solve 或 La_solve_cmplx。查看他们的实现,例如here 可以发现 La_solve 将调用 LAPACK 例程 DGESV,La_solve_cmplx 将调用 LAPACK 例程 ZGESV。

简单吧?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...