Я пытаюсь найти собственные значения квадратной матрицы с помощью функции eig_sym из библиотеки линейной алгебры Armadillo:
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
Я получаю станд :: logic_error сообщение, которое в соответствии с 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);
Это также производит станд :: logic_error сообщение.
Я чувствую, что упускаю что-то очень простое, потому что я даже не могу заставить работать пример кода. Включить каталог настроен правильно, так как у меня нет проблем с использованием арма :: функции в другом месте в моем проекте.
Заранее спасибо за помощь!
Луи Валланс
РЕДАКТИРОВАТЬ 24/10/14 @ 1316GMT:
Я думаю, что ошибка вызвана тем фактом, что у меня не настроен LAPACK. У меня сложилось впечатление, что Armadillo поставляется с предварительно скомпилированным LAPACK и openBLAS. Как я могу настроить свой проект для связи с LAPACK, если я только установил Armadillo?
#define ARMA_USE_LAPACK
а также #define ARMA_USE_BLAS
Это должно быть достаточно хорошо, чтобы бежать