Armadillo函数eig_sym()不工作

Armadillo function eig_sym() not working

本文关键字:工作 sym 函数 eig Armadillo      更新时间:2023-10-16

我正试图使用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的说法,这意味着矩阵应力不是正方形的,尽管它显然是正方形的。

我甚至运行了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消息。

我觉得我错过了一些非常简单的东西,因为我甚至无法让示例代码发挥作用。Include目录设置正确,因为我在项目的其他地方使用arma::函数没有问题。

提前感谢您的帮助!

Louis Vallance

于格林尼治标准时间1316GMT于2014年10月24日编辑:我认为这个错误是因为我没有配置LAPACK。我的印象是Armadillo附带了LAPACK和openBLAS预编译。如果我只安装了Armadillo,我如何配置我的项目与LAPACK链接?

  • 更改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位安装
  • 在项目内部放置文件夹
  • 在工具设置下转到项目属性>c++构建>mingw c++链接器>设置不带库扩展名的库的名称
  • 添加库搜索路径并从工作空间选项中进行选择
  • 将这些库的dll文件放在项目文件夹中

这应该足以运行