小编L.F*_*ron的帖子

本征线性代数求解器似乎很慢

我想使用本征求解器求解线性代数方程Ax = b。在我的情况下,A是复杂的稀疏矩阵(26410 * 26410),b是实向量(26410 * 1)。

我在MATLAB中使用mex文件将稀疏矩阵A和向量b映射为Eigen接受的格式。我使用Eigen求解器的原因是希望它比使用MATLAB直接在MATLAB中求解更快x = A\b

但是,在尝试了LDLT,SparseLU,CG和BiCGSTAB之后,我发现结果不是很令人满意:

LDLT需要1.462s norm(A*x - b)/norm(b) = 331; SparseLU用1.5193e-4赢得37.994s; BiCGSTAB成绩为95.217秒,成绩为4.5977e-4;相比之下,直接x = A\b在MATLAB中使用会消耗13.992s的时间,误差标准为2.606e-5。

我知道将MATLAB工作空间中的稀疏矩阵A和向量b映射到Eigen有点愚蠢并且也很费时间。但是我想知道我得到的结果是否是Eigen可以提供的最佳结果?有人可以给我一些指示吗?我应该尝试其他线性方程求解器吗?在此先多谢!以下是代码的主要部分。

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {

    //input vars

    //temp var
    size_t nrows;

    //output vars
    //double *x;

    //GetData
    /* check inputs 
    ...*/

    //"mxArray2SCM" is a sub-function for map the complex sparse matrix in Eigen
    SpCMat A = mxArray2SCM(prhs[0]);
    //SpMat A = mxArray2SM(prhs[0]);

    //"mxArray2ECV" is a sub-function for map the …
Run Code Online (Sandbox Code Playgroud)

c++ matlab linear-algebra eigen

5
推荐指数
1
解决办法
791
查看次数

标签 统计

c++ ×1

eigen ×1

linear-algebra ×1

matlab ×1