2009-04-06 12 views
1

matrix.eig()を使用しているときに、間違った固有ベクトル(確かに複数回実行してチェックしています)が発生しています。行列である:Jamaの固有値分解関数の問題

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用固有値ジャマはマッチングしていますが固有ベクトルは最初の5つの列が符号で反転され、最後の列だけが正確です。

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

答えて

7

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

ほとんどのソフトウェアプログラムが1の長さを持つベクトルを報告するという慣例に従えば、無数の固有ベクトルがあります。 JamaはMatlabの固有ベクトルの-1倍の固有ベクトルが、おそらくそれらが使用したアルゴリズムのアーティファクトであると報告しています。

+0

慎重に参照してください。スカラー倍ではない別の固有ベクトル最後の列を符号なしに反転しました。 最後の列は同じです...間違っています。 – BHS

+0

結果に使用されている規則を理解しているので、各列は固有ベクトルです。だから、それらのうちの1つがサインでひっくり返されていない。各列は依然としてノルム1の有効な固有ベクトルになります。問題はどこにありますか? – Varkhan

+0

固有ベクトはそれぞれ記号で反転されていても安全です。そして、私の疑いは解消されます。ありがとう.. – BHS