准确性:Python 与 Matlab 和奇怪的行为

Accuracy Python vs. Matlab and strange behaviour

提问人:Archimedes_91 提问时间:4/6/2022 最后编辑:Archimedes_91 更新时间:4/6/2022 访问量:144

问:

我发现Matlab和Python之间有一种非常奇怪的行为。首先,我试着解释一下:

我正在将 Matlab 代码翻译成 Python,它似乎运行良好。我需要确定矩阵 A 的特征值进行计算,经过一些代数后,我发现一个量与 matlab 中的量不同。因此,我将矩阵 A 从 Python 复制到 Matlab,其中包含 4 位数字,结果与 Python 相同。所以我现在从 Python 复制了相同的矩阵 A,但这次是 15 位数字,Matlab 中的结果是正确的。其次,我将矩阵 A 从 Python 复制到 Matlab,有 20 位数字,结果是“错误”的。我不明白为什么 Matlab 只显示 15 位数字的正确结果。有趣的是,如果我取 4 位或 20 位数字,matlab 会导致相同的结果。仅针对小数点后分隔符 matlab 计算所需结果的 15 位数字。

有什么方法可以解决这个问题吗?Matlab 确定结果是正确的(因为我知道答案),但 Python 是错误的。

如果有人需要更多解释,我会尝试扩展我的问题,但整个计算非常复杂,所以我无法上传整个代码。

今天,我试图找到问题所在,我发现,结果来自 . 我需要计算对称 Toeplitz 矩阵 A 的特征值和特征向量eigh

    w, v = np.linalg.eigh(A, UPLO='U')

我的特征值为零,该特征值的结果不同:vs。尽管矩阵 A 在两种情况下都相同,但结果各不相同。怎么会这样呢?7.13188e-143.33955e-14

python matlab 浮动精度

评论

1赞 ToolmakerSteve 4/6/2022
您可以包括您尝试的各种输入和输出。如果它是一个大矩阵,你可以用一些简单的案例(小矩阵)进行测试,并显示这些案例。这些症状表明,您的值接近于某种情况,因此轻微的数值错误(舍入)会导致不同的结果。例如,值可能会在一个计算中“抵消”,但在另一个计算中不会。你需要表明什么是“对的”,什么是“错的”,让任何人都能说得更多。如果最高精度是“错误的”,那么你可能需要重新设计你的方法,以避免任何造成麻烦的情况。
0赞 Cris Luengo 4/6/2022
请阅读最小可重复示例。如果不确切知道您在做什么,我们就无法为您提供帮助。向我们展示复制了数据的代码。但是您的问题可能是您的矩阵条件较差,这意味着非常小的变化将对特征值分析的结果产生巨大影响。
0赞 Archimedes_91 4/6/2022
我扩展了我的问题,我发现特征值的确定是不同的,尽管代码和矩阵是相同的(我已经检查了矩阵是否完全相同)。不幸的是,这会影响我的后处理并导致不同的结果。

答: 暂无答案