Собственное значение и матричный массив

Я пытаюсь вычислить 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

0

Решение

Думаю, вы хотите использовать собственную библиотеку для вычисления собственных значений матрицы.
Это не совсем понятно из вашего кода, но есть определенные вещи, которые нужно исправить сразу.

  1. MatrixXd W в порядке. Хотя вы не указываете размеры. Я думаю, вы можете изменить его размер и M x M.

    MatrixXd W
    W.resize(M,M)
    
  2. Ваша строка W = MI [i] [J] очень странная. Я думаю, ты имеешь в виду

    W(i,j)=MI[i][j]
    
  3. Непонятно, действительно ли вы хотите рассчитать собственные значения для M ^ 2 разных матриц. С egiensolver и матричным объявлением внутри обоих циклов for — это именно то, что вы делаете. Если это не ваши намерения (что весьма вероятно), рассмотрите возможность перемещения объявления матрицы перед циклами for. Заполните матрицу, используя ваши петли. И назовите eigensolver после обеих петель. Это рассчитает собственные значения для одной матрицы.

  4. Кроме того, вы могли бы начать преобразование всего своего кода в матрицы на основе Eigen. (если кодовая база не слишком большая).

На веб-сайте Eigen есть множество примеров, показывающих, как выполнять основные операции. Эти два, должны покрывать ваши потребности.

http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html
http://eigen.tuxfamily.org/dox/classEigen_1_1EigenSolver.html

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector