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?
答案 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
在数值方法中,舍入误差会导致涉及数百万浮点计算的操作问题,因此您会发现许多此类数值方法都涉及设置精度限制。