首页 > 解决方案 > 哪种线性方程算法通常比 LAPACK 需要更少的内存?我可以在 R 或 RcppArmadillo 中使用它吗?

问题描述

我正在尝试求解一个线性系统,R 中的 Ax = b。A 是 111779 x 111779 稀疏矩阵或“dgCMatrix”,包含 10^11 个元素。b 是一个 111779 x 1 的密集矩阵。我使用了一个强大的 AWS ec2 实例来计算这个。

首先,我在 R 中使用了solve(),但它返回“问题太大”。然后我使用了函数 SparseM::solve() 但由于内存不足仍然无法得到结果。最后我使用了 RcppArmadillo::spsolve( , ,"lapacks"),意思是“稀疏矩阵求解”和 LAPACK 算法。它返回“SpMat::init():请求的大小太大”。

rcpp_inc <- '
using namespace Rcpp;
using namespace arma;
'
src <- '
mat Y0 = as<mat>(Y);
sp_mat X0 = as<sp_mat>(X);
mat out = spsolve(X0, Y0,"lapacks");
return(wrap(out));
'
fn <- cxxfunction(signature(Y="Matrix", X="Matrix"), src, 
                  plugin='RcppArmadillo', rcpp_inc)
res <- fn(b, A)

实际上,当 A 较小时,该函数运行良好。如果我不能使用更多内存,是否可以解方程?我应该使用什么样的软件或算法?

标签: c++rarmadillolinear-equation

解决方案


推荐阅读