2

を使用しているときに、間違った固有ベクトルを取得しています (確実に複数回実行して確認することもできます) matrix.eig()。マトリックスは次のとおりです。

1.2290 1.2168 2.8760 2.6370 2.2949 2.6402
1.2168 0.9476 2.5179 2.1737 1.9795 2.2828
2.8760 2.5179 8.8114 8.6530 7.3910 8.1058
2.6370 2.1737 8.6530 7.6366 6.9503 7.6743
2.2949 1.9795 7.3910 6.9503 6.2722 7.3441 
2.6402 2.2828 8.1058 7.6743 7.3441 7.6870

この関数は固有ベクトルを返します。

-0.1698  0.6764  0.1442 -0.6929 -0.1069  0.0365
-0.1460  0.6478  0.1926  0.6898  0.0483 -0.2094
-0.5239  0.0780 -0.5236  0.1621 -0.2244  0.6072
-0.4906 -0.0758 -0.4573 -0.1279  0.2842 -0.6688
-0.4428 -0.2770  0.4307  0.0226 -0.6959 -0.2383
-0.4884 -0.1852  0.5228 -0.0312  0.6089  0.2865

Matlab は、同じ入力に対して次の固有ベクトルを提供します。

0.1698 -0.6762 -0.1439  0.6931  0.1069  0.0365
0.1460 -0.6481 -0.1926 -0.6895 -0.0483 -0.2094
0.5237 -0.0780  0.5233 -0.1622  0.2238  0.6077
0.4907  0.0758  0.4577  0.1278 -0.2840 -0.6686
0.4425  0.2766 -0.4298 -0.0227  0.6968 -0.2384
0.4888  0.1854 -0.5236  0.0313 -0.6082  0.2857

matlab と jama の固有値は一致していますが、固有ベクトルの最初の 5 列の符号が反転しており、最後の列のみが正確です。

受け入れる入力の種類に問題はありますJama.Matrix.EigenvalueDecomposition.eig() か、それとも他の問題はありますか? エラーを修正する方法を教えてください。前もって感謝します。

4

2 に答える 2

9

ここにはエラーはありません。両方の結果が正しいです。他のスカラー倍の固有ベクトルと同様です。

機能する固有ベクトルは無数にあります。ほとんどのソフトウェア プログラムは、長さが 1 のベクトルを報告するという規則にすぎません。Jama が固有ベクトルを Matlab の固有ベクトルの -1 倍と報告しているのは、おそらく彼らが使用したアルゴリズムの成果物にすぎません。

于 2009-04-06T03:35:21.780 に答える