我试图使用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链接?
答案 0 :(得分:1)
#define ARMA_USE_LAPACK
和#define ARMA_USE_BLAS
这应该足以运行