Я пытаюсь вычислить eigenvalue
за matrix[7][7]
и мой код:
for (i = 0; i<M; i++) //matrix + identity
{
for (j = 0; j<M; j++)
{
MI[i][j] = MX[i][j] + a[i][j];
cout << setw(7) << MI[i][j] << " ";
MatrixXd W;
W = MI[i][j];
SelfAdjointEigenSolver <MatrixXd> eigensolver (W);
cout << "The eigenvalues of A are:\n" << eigensolver.eigenvalues() << endl;
}
cout << endl;
}
Мой вопрос, я делаю это правильно, вызывая мою матрицу, определяя как matrixXd W
?
Я заканчиваю с ошибкой в строке W = MI[i][j]
:
нет операнда «=» соответствует этому операнду & Типы oeprand: MatrixXd = double
Думаю, вы хотите использовать собственную библиотеку для вычисления собственных значений матрицы.
Это не совсем понятно из вашего кода, но есть определенные вещи, которые нужно исправить сразу.
MatrixXd W в порядке. Хотя вы не указываете размеры. Я думаю, вы можете изменить его размер и M x M.
MatrixXd W
W.resize(M,M)
Ваша строка W = MI [i] [J] очень странная. Я думаю, ты имеешь в виду
W(i,j)=MI[i][j]
Непонятно, действительно ли вы хотите рассчитать собственные значения для M ^ 2 разных матриц. С egiensolver и матричным объявлением внутри обоих циклов for — это именно то, что вы делаете. Если это не ваши намерения (что весьма вероятно), рассмотрите возможность перемещения объявления матрицы перед циклами for. Заполните матрицу, используя ваши петли. И назовите eigensolver после обеих петель. Это рассчитает собственные значения для одной матрицы.
Кроме того, вы могли бы начать преобразование всего своего кода в матрицы на основе Eigen. (если кодовая база не слишком большая).
На веб-сайте Eigen есть множество примеров, показывающих, как выполнять основные операции. Эти два, должны покрывать ваши потребности.
http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html
http://eigen.tuxfamily.org/dox/classEigen_1_1EigenSolver.html
Других решений пока нет …