使用犰狳时 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 中的非法值的主要内容,如果未能解决你的问题,请参考以下文章