2016-06-15 2 views
0

Я пытаюсь вычислить eigenvalue для matrix[7][7], и мой код:собственных значений и Matrix массив

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 = двойной

ответ

0

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

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

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

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

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

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

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

+0

Спасибо, Антон за быстрый ответ, нет смысла 3 поддавков, потому что я, ищу собственное значение, если у меня есть матрица 3х3, то мои собственные должна быть 3 и нет необходимости в циклю, я я правильно? – h26

+0

Я думаю, вы либо неправильно истолковываете мои утверждения, либо определение собственного значения. Пожалуйста, взгляните на то, что означает собственное значение матрицы. 3 x 3 матрица имеет 3 собственных значения (с учетом кратностей). Но, используя Eigen library, вы можете найти их, не делая 3 * 3 = 9 разложений на собственные значения. – Anton