Java ApacheCommons数学:三对角矩阵的特征分解产生错误的结果
我试图找到特征值的对角矩阵D和矩阵V,它们的列是三对角矩阵对应的右特征向量(其中AV=VD)。我试图用java实现现有的MATLAB代码,但是我用java得到的结果与MATLAB中的结果不同(MATLAB结果是正确的结果)。我已经在谷歌硬盘上创建了MATALB和java的矩阵文件夹,这样你就可以看到它们的区别了 Java代码片段:Java ApacheCommons数学:三对角矩阵的特征分解产生错误的结果,java,apache,matrix,apache-commons,apache-commons-math,Java,Apache,Matrix,Apache Commons,Apache Commons Math,我试图找到特征值的对角矩阵D和矩阵V,它们的列是三对角矩阵对应的右特征向量(其中AV=VD)。我试图用java实现现有的MATLAB代码,但是我用java得到的结果与MATLAB中的结果不同(MATLAB结果是正确的结果)。我已经在谷歌硬盘上创建了MATALB和java的矩阵文件夹,这样你就可以看到它们的区别了 Java代码片段: RealMatrix J2 = new Array2DRowRealMatrix(j); EigenDecomposition eig = new
RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();
[V,D]=eig(J);
MATLAB代码:
RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();
[V,D]=eig(J);
以下是每个变量的矩阵:
变量J:
RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();
[V,D]=eig(J);
变量V:
RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();
[V,D]=eig(J);
预期:
实际:
变量D:
RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();
[V,D]=eig(J);
预期:
实际:
在这种情况下,您不能说一个结果正确,一个结果错误,因为Apache Commons Math和MATLAB的结果实际上是等效的。请记住:
0.5045259791
截断为5位小数,则得到0.50452
。同样的结果-1
)相乘,结果也将是一个特征向量。这是因为特征向量集是线性子空间,在标量乘法下是闭合的。请注意,第一个实际特征向量是最后一个期望值乘以-1
D
的顺序似乎与预期的相反李>
2.22e-16
。对于接近机器ε的数字,您可以看到实际结果和预期结果之间似乎存在很大差异。这是两种不同的特征分解实现的预期结果请尽量把所有相关的信息都写在问题里。特别是J矩阵和预期输出。