Java Jama和matlablmnn与特征值

Java Jama和matlablmnn与特征值,java,matlab,eigenvector,eigenvalue,jama,Java,Matlab,Eigenvector,Eigenvalue,Jama,我把LMNN(最大边际最近邻)度量学习算法的matlab代码改为java,并使用。 我得到了不同的结果, 出现这种差异,我认为是因为Matlab和Jama中的特征值分解(特征值和特征向量)。 如果你以前遇到过这样的问题,请给我点评。 此外,在这种情况下,必须得到类似的结果 在Matlab中: [V, L] = eig(M); Java(IdeM是PSD矩阵) 结果 示例结果: A = [2 4 2; 6 8 1; 5 7 5] Matlab结果: >> [V,L] = eig(

我把LMNN(最大边际最近邻)度量学习算法的matlab代码改为java,并使用。 我得到了不同的结果, 出现这种差异,我认为是因为Matlab和Jama中的特征值分解(特征值和特征向量)。 如果你以前遇到过这样的问题,请给我点评。 此外,在这种情况下,必须得到类似的结果

在Matlab中:

[V, L] = eig(M);
Java(IdeM是PSD矩阵)

结果 示例结果:

A = [2 4 2; 6 8 1; 5 7 5] 
Matlab结果:

>> [V,L] = eig(A)
V =
      -0.3486     -0.82756      0.19221
     -0.57978      0.56013     -0.40315
     -0.73643     0.037403      0.89472
L =
       12.878            0            0
            0      -0.7978            0
            0            0         2.92
使用Jama库的Java:

[[0.8275575078346545, -0.3493113857121139, 0.24597790205308678],
 [-0.5601335729999509, -0.5809634522691761, -0.5159207870175849],
 [-0.037402561741212, -0.7379374514853343, 1.144995023469712]] 
[[-0.7977988158677061,0.0, 0.0], 
 [0.0, 12.877769427129202, 0.0], 
 [0.0, 0.0,2.9200293887385067]]

由于某些原因,Jama是不正确的(列的范数不是1)。符号的重新排序和变化是正常的(您只需要得到映射到eigenval*本身的正交向量)。您可以尝试规范化列或使用jlapack。

您能否具体说明使用这两种语言得到的结果有什么不同?A=[2 4 2;6 8 1;5 7 5]Matlab结果:V=-0.3486-0.8276 0.1922-0.5798 0.5601-0.4032-0.7364 0.0374 0.8947 L=12.8778 0 0-0.7978 0 0 2.9200 Java使用Jama库[[0.8275575078346545,-0.3493113857121139,0.24597790205308678],[-0.5601335729999509,-0.5809634522691761,-0.5159207870175849], [-0.037402561741212,-0.7379374514853343,1.144995023469712]] [[-0.7977988158677061,0.0, 0.0], [0.0, 12.877769427129202, 0.0], [0.0, 0.0,2.9200293887385067]]我冒昧地将这些结果合并到您的问题中,并将它们格式化为代码,以便于可读。您还可以展示一下您是如何在Java代码中初始化
ideM
值的吗?值得一提的是,我下载了JAMA 1.0.3,可以用它和Matlab R2014a重现您的精确结果。但我不知道是什么导致了这些结果。
[[0.8275575078346545, -0.3493113857121139, 0.24597790205308678],
 [-0.5601335729999509, -0.5809634522691761, -0.5159207870175849],
 [-0.037402561741212, -0.7379374514853343, 1.144995023469712]] 
[[-0.7977988158677061,0.0, 0.0], 
 [0.0, 12.877769427129202, 0.0], 
 [0.0, 0.0,2.9200293887385067]]