2016-06-15 7 views
0

私はmatrix[7][7]ためeigenvalueを計算しようとしている、と私のコードは次のとおりです。固有値およびマトリックス配列

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として定義することにより、自分の行列を呼び出し、それをやっているのですか?

何のオペランド "=" マッチこのオペランド& oeprand種類がありません:MatrixXd =ダブル

答えて

0

は、私は推測、あなたが固有値を使用したい、私はラインW = MI[i][j]でエラーになってしまい

ライブラリを使用して行列の固有値を計算します。 あなたのコードからはっきりとは分かりませんが、すぐに修正する必要のあることがいくつかあります。

  1. MatrixXd Wはokです。あなたは次元を指定しませんが。私はあなたにそれをリサイズすることができ、推測し、Mは

    MatrixXd W 
    W.resize(M,M) 
    
  2. あなたのラインW = MI M.

    X [i]の[J]は非常に奇妙です。私はあなたが本当にM^2つの異なる行列の固有値を計算したい場合には、不明であるあなたが

    W(i,j)=MI[i][j] 
    
  3. を意味する、と思います。 2つのfor-loopsの内側にegiolverとmatrix宣言があります。これはあなたがしていることです。それがあなたの意図(非常に可能性が高い)でない場合は、for-loopsの前に行列の宣言を動かすことを検討してください。ループを使って行列を塗りつぶします。両方のループの後に固有値を呼び出します。それは1つの行列の固有値を計算します。

  4. また、Eigenライブラリベースの行列を使用するようにすべてのコードを変換している可能性があります。 (コードベースが大きすぎない場合)。

固有のウェブサイトには、基本的な操作方法の例がたくさんあります。これらの2つは、あなたのニーズをカバーする必要があります。

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

+0

私は、固有値を探していたので、私は、行列の3x3を持っている場合は、その後、私の固有値が3になることはありませおよびループの必要性べきで、あなたの迅速な返事なし3所与の感覚であなたのアントンありがとう、私は右? – h26

+0

あなたは私のステートメントや固有値の定義を誤解していると思います。行列の固有値がどういう意味かを見てください。 3×3行列は3つの固有値(多重度を数える)を有する。しかし、Eigenライブラリを使うと、3 * 3 = 9の固有値分解をせずにそれらを見つけることができます。 – Anton

関連する問題