我试图找到特征值和矩阵V的对角矩阵D,其列是三对角矩阵J的对应右特征向量(其中A V = V D)。我试图在java中实现现有的MATLAB代码,但是我在java中获得的结果与MATLAB中的结果不同(MATLAB结果是正确的结果)。我在MATALB和java的矩阵的google驱动器上创建了一个文件夹,这样你就可以看到差异了。
Java Code Snippet:
editor.on('change', function() {
MATLAB代码:
RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();
以下是每个变量的矩阵:
变量J:
变量V:
预期:
变量D:
预期:
答案 0 :(得分:1)
在这种情况下,你不能说一个结果是正确的,一个是错误的,因为Apache Commons Math和MATLAB的结果实际上是等价的。请记住:
0.5045259791
截断为5位小数,则会得到0.50452
。结果相同。-1
的任何标量多个特征向量,结果也将是特征向量。那是因为一组特征向量是线性子空间而在标量乘法 read on Wikipedia下是闭合的。请注意,第一个实际特征向量是最后一个预期乘以-1
D
似乎与预期的顺序相反。 2.22e-16
。您可以看到接近机器epsilon的数字的实际和预期结果之间看似很大的差异。这对于2种不同的特征分解实现是可以预期的。