【问题标题】:Got different answer from python numpy and Matlab for solving linear equations从 python numpy 和 Matlab 得到不同的答案来求解线性方程
【发布时间】:2019-08-18 22:36:44
【问题描述】:

我使用 python 和 Matlab 运行相同的算法。当他们求解同一个线性系统时,结果略有不同,最终会导致完全不同的结果。我想知道如何修复 python 以获得与 Matlab 相同的结果。谢谢!

Ax=b,蟒蛇:

A=[[ 1.,  0.,  0.,  0.,  1.,  1.,  1.,  2.],
   [ 0.,  0.,  0.,  0., -0., -1., -0., -0.],
   [ 0.,  0.,  0.,  0., -0., -0., -1., -0.],
   [ 0.,  0.,  0.,  0., -0., -0., -0., -1.],
   [ 1., -0., -0., -0., -1., -0., -0., -0.],
   [ 1., -1., -0., -0., -0., -1., -0., -0.],
   [ 1., -0., -1., -0., -0., -0., -1., -0.],
   [ 2., -0., -0., -1., -0., -0., -0., -1.]]
b=[[ 1.],[ 0.],[ 0.],[ 0.],[-1.],[ 0.],[ 0.],[ 0.]]

res_py = numpy.linalg.solve(A,b)

和 Matlab:

res_m  = A\b 

python 输出:

[[-0.],[ 0.],[ 0.],[-0.],[-1.],[ 0.],[ 0.],[ 0.]]

Matlab 输出:

[ 0; -4.163336342344337e-17; -4.163336342344337e-17; 0; -1.000000000000000e+00; 0; 2.775557561562891e-17; 0]

【问题讨论】:

  • 也许 Matlab 是错误的。确实非零值非常小,可能是数值舍入问题。
  • 如果这些微小的差异导致后来完全不同的结果,那是你以后做的事情是错误的。计算需要考虑浮点运算的有限精度。
  • 我也不相信 python 在这里没有类似的精度差异,只是没有显示出来。负 0 输出是可疑的。
  • -4.163336342344337e-170
  • @jodag 这是真的。只是 python 选择将其显示为零

标签: python matlab numpy


【解决方案1】:

Matlab 可能使用比您的 Python 脚本更高精度的浮点数,或者使用不同的浮点精度模式(例如,快速与严格)。

在大多数情况下,让结果偏离 x*10-17 不会造成太大的麻烦 - 需要多次操作才能使这种规模的错误累积到显着的程度.

您还可以在打印值时尝试强制使用指数表示法,以查看它们是否真的是四舍五入的 (usual stuff)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多