Python错误地解决矩阵联立方程

时间:2018-03-22 00:05:09

标签: python arrays numpy matrix

A = array([[  1., 0., 0.], [ -9., 28., -9.], [ 0., 0., 1.]])

X = array([-0., -0.125,  0. ])

y = np.linalg.solve(A, X)

有没有解释为什么python一直给我答案:

y = array([-1.92747053e-18, -4.46428571e-03,  0.00000000e+00])

当y [0]和y [2]显然都应为0?

1 个答案:

答案 0 :(得分:0)

计算机永远无法为浮点运算提供准确的结果,并且此行为不仅限于python。浮点精度因计算机而异。

你可以在numpy中找到双浮点的精度

print (np.finfo(np.double).precision)

print (np.finfo(float).precision)

如果您希望只需输入即可更改numpy的显示精度。

np.set_printoptions(suppress=True)

print(np.array_str(y, suppress_small=True))

这将抑制计算精度限制内的结果。

点击此处查看一些说明 https://docs.python.org/3.6/tutorial/floatingpoint.html

https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems

在数值方法中,舍入误差会导致涉及数百万浮点计算的操作问题,因此您会发现许多此类数值方法都涉及设置精度限制。