Какой алгоритм линейных уравнений требует меньше памяти, чем LAPACK в целом? Могу ли я использовать его в R или RcppArmadillo? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь решить линейную систему, Ax = b в R. A - это разреженная матрица 111779 на 111779 или "dgCMatrix" и содержит 10 ^ 11 элементов. b представляет собой плотную матрицу 111779 на 1. Для этого я использовал мощный экземпляр AWS ec2.

Сначала я использовал метод execute () в R, но он вернул "проблему слишком большую". Затем я использовал функцию 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 меньше. Если я не могу использовать больше памяти, можно ли решить уравнение? Какое программное обеспечение или алгоритм я должен использовать?

...