【问题标题】:Issue with Jama's Eigenvalue decomposition functionJama 的特征值分解函数的问题
【发布时间】:2009-04-06 02:01:31
【问题描述】:

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

【问题讨论】:

    标签: java jama eigenvector


    【解决方案1】:

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

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

    【讨论】:

    • 请仔细查看....它不是标量乘以另一个特征向量,除最后一个之外的所有列都已反转符号..两者的最后一列相同...这是不正确的。跨度>
    • 据我了解用于结果的约定,每一列都是一个特征向量。所以其中 one 没有被翻转过。这使得每一列仍然是范数 1 的有效特征向量。问题出在哪里?
    • 因此,每个特征向量都可以翻转符号并且它仍然是安全的。至此,我的疑惑解开了。谢谢..
    • 谢谢你。与 Matlab 相比,我一直在努力弄清楚为什么我在 Jama 中得到翻转的标志。很高兴知道这与结果无关
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多