使用犰狳时 dgssvx 中的非法值

Posted

技术标签:

【中文标题】使用犰狳时 dgssvx 中的非法值【英文标题】:Illegal value in dgssvx when using Armadillo 【发布时间】:2016-03-23 10:46:58 【问题描述】:

我实际上是在使用 Armadillo 库来解决我的 c++ 代码中的稀疏线性系统。

当我想使用调用 SuperLu 的 spsolve() 函数时,我得到了这个错误:

** 在进入 dgssvx 参数号 13 时具有非法值

当我不使用 spsolve() 并使用稠密矩阵时,一切都很顺利。

提前致谢

【问题讨论】:

提供重现错误的代码。 【参考方案1】:

当我查看 dgssvx 例程时,错误 13 与右侧 b 的错误格式有关。

#include <iostream>
#include <armadillo>

using namespace std; 
using namespace arma;

int main() 

sp_mat A = sprandu<sp_mat>(1000,1000,0.1) ;
vec b = randu<vec>(1000) ;
vec x =spsolve(A,b) ;
return 0;

【讨论】:

【参考方案2】:

使用 GCC 版本 6.3.0 和 Armadillo 版本 7.600.2 为我运行您的确切代码(包括相同的代码)。您是否在程序中正确链接到 SuperLU 库? ARMA_USE_SUPERLU 定义了吗?这一定与链接有关,因为 dgssvx 是 superlu 库调用的包装器:dsgvx.c, def_superlu.hpp

听起来当您调用spsolve 时,犰狳无法调用 SuperLU。不确定顺序是否重要,但我先链接 SuperLU,然后链接 LAPack,然后链接 BLAS。

【讨论】:

以上是关于使用犰狳时 dgssvx 中的非法值的主要内容,如果未能解决你的问题,请参考以下文章

PHP:转义 .ini 文件中的非法字符

Rcpp犰狳中的样本

犰狳中的并行化

ubuntu中的犰狳问题

用于在 Windows 中的犰狳中构建 armaMex_demo.cpp 的 Matlab mex 命令

犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?