【发布时间】: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-17是0 -
@jodag 这是真的。只是 python 选择将其显示为零