python epsilon错误的计算
问题描述:
epsilon设置为0.1,但它给我的结果,直到1.2。我不知道是什么原因造成的。谁能帮忙?python epsilon错误的计算
def evaluate_poly(poly, x):
total = 0.0
for i in range(len(poly)):
total += poly[i] * (x ** i)
return total
def compute_deriv(poly):
deriv = []
if len(poly) < 2:
return [0.0]
else:
for i in range(1, len(poly)):
deriv.append(float(poly[i] * i))
return deriv
def compute_root(poly, x_0, epsilon):
num = 0
root = x_0
while abs(evaluate_poly(poly, root)) >= epsilon:
root = root - evaluate_poly(poly, root)/evaluate_poly(compute_deriv(poly), root)
num += 1
return [root, num]
print(compute_root((1.0,-2.0,1.0), 14, 0.1))
答
小量为Y错误(如果你愿意评价多),但是你的1.2结果......是x值,其中y是0。在这种情况下,你y是0.0412和低于0.1这样的代码没问题。
在compute_root改变你的回报:
return [root, num, abs(evaluate_poly(poly, root))]
答
你正在试图解决数字X - 2 * X + 1 = 0。我们知道这个方程在x = 1双根。但是在那个点(x = 1),导数(2 * x - 2)是0.这意味着y中的误差总是比x中的误差低一个数量级,所以x = 1.2,y 〜0.04 < 0.1毫无意外。
该差值X ñ - X N-1将是错误的X一个更好的猜测:
def compute_root1(poly, x_0, epsilon):
num = 0
root = x_0
while True:
root1 = root - evaluate_poly(poly, root)/evaluate_poly(compute_deriv(poly), root)
if abs(root1 - root) < epsilon: break
num += 1
root = root1
return [root1, num+1]
它提供:
>>> print(compute_root1((1.0,-2.0,1.0), 14, 0.1))
[1.05078125, 8]
请首先确定您的问题:什么是epsilon,你想要计算什么,... –
“epsilon设置为1.1” - 你的代码似乎使用0.1。 “但它给我的结果,直到1.2。” - 那有什么意思?如果你想说服任何人,你所看到的不仅仅是浮点四舍五入错误,你需要提供更多细节。 –
@SergeBallesta我明白(虽然看起来更像牛顿的方法),但他们的代码使用epsilon = 0.1,而在问题中他们说他们已经将epsilon设置为1.1。 –