Функция броненосца eig_sym () не работает

Я пытаюсь найти собственные значения квадратной матрицы с помощью функции 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?

-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 бит
  • Внутри проекта разместите папку
  • Зайдите в свойства проекта> сборка c ++> компоновщик mingw c ++> в настройках инструмента установите имя библиотеки без расширения lib
  • Добавьте путь поиска в библиотеке и выберите один из вариантов рабочего пространства
  • Поместите dll файлы этих библиотек в папку проекта

Это должно быть достаточно хорошо, чтобы бежать

1

Другие решения


По вопросам рекламы [email protected]