犰狳功能eig_sym()不起作用

时间:2014-10-24 10:54:37

标签: c++ armadillo eigenvalue

我试图使用Armadillo线性代数库中的 eig_sym 函数找到方阵的特征值:

mat STRESS = Mat<double>(3, 3, fill::zeros);
vec principals;

/**
   Populate STRESS with symmetric values
   from a stress tensor history named "stressTensor"
**/

STRESS(0,0) = stressTensor[XX].data[0];
STRESS(0,1) = stressTensor[XY].data[0];
STRESS(0,2) = stressTensor[XZ].data[0];
STRESS(1,0) = stressTensor[XY].data[0];
STRESS(1,1) = stressTensor[YY].data[0];
STRESS(1,2) = stressTensor[YZ].data[0];
STRESS(2,0) = stressTensor[XZ].data[0];
STRESS(2,1) = stressTensor[YZ].data[0];
STRESS(2,2) = stressTensor[ZZ].data[0];

eig_sym(principals, STRESS); // Code fails here

我收到 std :: logic_error 消息,根据Armadillo Doc意味着矩阵 STRESS 不是正方形,即使它明显是方形的。

我甚至运行了Armadillo Doc中的示例代码:

// for matrices with real elements

mat A = randu<mat>(50,50);
mat B = A.t()*A;  // generate a symmetric matrix

vec eigval;
mat eigvec;

eig_sym(eigval, eigvec, B);

这也会产生 std :: logic_error 消息。

我觉得我错过了一些非常简单的东西,因为我甚至无法获得示例代码。包含目录已正确设置,因为我在项目的其他地方使用 arma :: 功能没有任何问题。

提前感谢您的帮助!

Louis Vallance

编辑24/10/14 @ 1316GMT: 我认为错误是由于我没有配置LAPACK这一事实引起的。我的印象是Armadillo带有LAPACK和openBLAS预编译。如果我只安装了Armadillo,如何配置项目与LAPACK链接?

1 个答案:

答案 0 :(得分:1)

  • 更改armadillo_bits中的配置文件并取消注释以下行#define ARMA_USE_LAPACK#define ARMA_USE_BLAS
  • http://ylzhao.blogspot.com.au/2013/10/blas-lapack-precompiled-binaries-for.html此链接将有助于下载预编译版本的blas和LAPACK库下载版本32位,具体取决于您的mingW位安装
  • 在项目内放置文件夹
  • 转到项目属性&gt; c ++ build&gt; mingw c ++链接器&gt;在工具设置下设置没有lib扩展名的库的名称
  • 添加库搜索路径并从工作区选项
  • 中进行选择
  • 将这些库的dll文件放在项目文件夹

这应该足以运行