gpt4 book ai didi

java - Apache 共享数学 : Eigendecomposition of a tridiagonal matrix yields wrong result

转载 作者:行者123 更新时间:2023-11-30 07:11:27 25 4
gpt4 key购买 nike

我试图找到特征值的对角矩阵 D 和矩阵 V,其列是三对角矩阵 J 的相应右特征向量(其中 AV = VD) 。我正在尝试在 java 中实现现有的 MATLAB 代码,但是我在 java 中得到的结果与 MATLAB 中的结果不同(MATLAB 结果是正确的结果)。我在 google 驱动器上创建了一个来自 MATALB 和 java 矩阵的文件夹,以便您可以看到差异。

Variables

Java 代码片段:

    RealMatrix J2 = new Array2DRowRealMatrix(j);
EigenDecomposition eig = new EigenDecomposition(J2);
RealMatrix V = eig.getV();
RealMatrix D = eig.getD();

Apache Documentation

MATLAB 代码:

[V,D]=eig(J);

MATLAB Documentation

以下是每个变量的矩阵:

变量 J:

J

变量 V:

预期:

V Expected

实际: V Actual

变量 D:

预期:

D Expected

实际: D Actual

最佳答案

在这种情况下,您不能说一个结果是正确的,一个结果是错误的,因为 Apache Commons Math 和 MATLAB 的结果实际上是等效的。请记住:

  1. 在这两种情况下,您都可以打印具有特定精度的结果。如果将 0.5045259791 截断为 5 位十进制数字,则会得到 0.50452。结果相同。
  2. 您可以将特征向量与包括 -1 在内的任何标量相乘,结果也将是特征向量。这是因为特征向量集是线性子空间,并且在标量乘法下是封闭的 read on Wikipedia 。请注意,第一个实际特征向量是最后一个预期特征向量乘以 -1
  3. 特征分解的不同实现对结果中特征值的排序使用不同的约定。实际的 D 似乎与预期的顺序相反。
  4. machine epsilon即,对于 double float ,由于浮点算术舍入而导致的相对误差上限为2.22e-16。您可以看到接近机器 epsilon 的数字的实际结果和预期结果之间看似存在巨大差异。对于 2 种不同的特征分解实现来说,这是可以预料的。

关于java - Apache 共享数学 : Eigendecomposition of a tridiagonal matrix yields wrong result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com