Jama的特征值分解函数问题

时间:2009-04-06 02:01:32

标签: java jama eigenvector

当我使用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()输入的类型是否有任何问题 接受或任何其他相同的问题?请告诉我如何修复错误。提前谢谢。

2 个答案:

答案 0 :(得分:9)

这里没有错误,两个结果都是正确的 - 正如任何其他标量乘以特征向量一样。

有无数个特征向量可以工作 - 它只是大多数软件程序报告长度为1的向量的惯例。 Jama报告的特征向量等于Matlab的-1倍,可能只是他们使用的算法的一个人工产物。

答案 1 :(得分:0)

对于给定的矩阵,特征值是唯一的,如果考虑多个,则其特征数等于矩阵的维数。虽然相应的特征值可能会有所不同,因为矢量可以根据特定方向缩放。在您的发布结果中,JAVA和Matlab版本都是正确的。

此外,您可以检查特征值来自的D矩阵。您会发现它们是相同的。