Вычислить собственное значение / вектор массива вместо матрицы с собственным 3

Я хочу вычислить собственное значение / вектор массива вместо матрицы.

Я пробовал EigenSolver<ArrayXf>, но это дает ошибку компиляции.

Я могу скопировать массив в матрицу. Но это пустая трата памяти.

Следующий код дает ошибку сегментации.

Test1:

#include <Eigen/Eigen>
using namespace Eigen;
int main() {
    ArrayXf A = ArrayXf::Ones(3,3);
    EigenSolver<MatrixXf> es(A);
}

Результат:

<...>/Eigen/src/Core/util/XprHelper.h:130: 
Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) 
[with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)

Еще пробовал EigenSolver<MatrixXf> es(A.matrix()). Но это тоже не работает.

Test2:

#include <Eigen/Eigen>
using namespace Eigen;
int main() {
    ArrayXf A = ArrayXf::Ones(3,3);
    EigenSolver<MatrixXf> es(A.matrix());
}

Результат:

<...>/XprHelper.h:130: Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) [with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)

Прошло некоторое время с тех пор, как я взял класс векторной вычисления или линейной алгебры, но IIRC, собственное значение вектора не имеет большого смысла.

erip 13.09.2018 18:05

@erip: Я меняю только матрицу в примере на тип массива. см. eigen.tuxfamily.org/dox/…

R zu 13.09.2018 18:06

если я правильно понимаю, с математической точки зрения вы все равно хотите вычислить собственное значение / вектор матрицы, просто матрица хранится как ArrayXf, верно?

463035818_is_not_a_number 13.09.2018 18:30
0
3
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что ArrayXf - это одномерный массив, тогда как вам нужен двухмерный: ArrayXXf.

Немного истории: мы придумали имена VectorXf / MatrixXf до того, как представить Array, для которого нет естественных имен, чтобы различать 1D и 2D, поэтому одиночный X против двойного XX ...

Спасибо. Замена ArrayXf на ArrayXXf в test1 работает. Когда Ones(3,3) не вызвал ошибки компиляции / ошибки утверждения времени выполнения, я подумал, что все в порядке ...

R zu 13.09.2018 18:35

Другие вопросы по теме