0

MathNet Numerics の Evd<> クラスを使用して行列の固有ベクトルを取得しましたが、型であることが判明し、それVector<Complex>を にキャストできませんでしたVector<double>。これは私の操作に必要なものです。

これは私が固有ベクトルを取得した方法です:

DenseMatrix processedData = someData;
Evd<> eigen = processedData.evd();
Vector<Complex> eigenvector = (Vector<Complex>)eigen.EigenValues;

' ' としてキャストしようとしたときVector<double>、プログラムはそれを受け入れませんでした。で行列の固有ベクトルを取得する方法はありVector<double>ますか?

注:以前にこの質問をしたことがありますが、コードのフォーマットを見落としていたため、<double>表示されなかったため、探していたものとは異なりました。

4

1 に答える 1

0

NxN の実数行列は必ず N の複素固有値を持ち、N が奇数の場合は 1 から N までの実数、N が偶数の場合は 0 から N の実数になります。

Vector<double>複素固有値のベクトルから実固有値のみを含む(場合によっては小さい) を作成するには、次のようにします。

  1. ベクター内の各複合アイテムを列挙します。
  2. IsRealプロパティをチェックして、実在しないものをすべて除外します。
  3. リアルなものはリアル成分を抽出し、
  4. DenseVector<double>列挙可能なものから新しいものを構築します。

(代わりに、実際の固有値に対応する場所にのみ値を持つ同じ次元の を作成することもできますSparseVector<double>。それがより便利な場合は、固有値をどうしたいのかわかりません。)

于 2014-07-13T06:12:28.043 に答える