我用带循环条件的python进行了二分计算。循环以两个条件停止,达到最大迭代或最大误差。
但是当我运行时,它总是以两个迭代结束。
当我删除最大错误需求时,迭代运行到最大迭代,而当我删除迭代需求时,迭代只重复2次。
请帮帮我。谢谢。
def bisection(f, Xl, Xu, max_eA, iteration):
x_l = Xl
x_u = Xu
eA = 0
Xr = (x_l + x_u)/2
total_iter = 0
if f(Xl)*f(Xu) >= 0:
print("Bisection method fails.")
return None
while eA < max_eA and total_iter < iteration+1:
print("iteration", total_iter+1)
xr_old = Xr
print("xr old",xr_old)
Xr = (x_l + x_u)/2
print("Xr now", Xr)
f_xr = f(Xr)
if f_xr == 0:
print("Found exact solution.")
print("Xr fix", Xr)
return Xr
elif f(x_l)*f_xr < 0:
x_l = x_l
x_u = Xr
print("x_l use",x_l)
print("x_u use",x_u)
elif f(x_l)*f_xr > 0:
x_l = Xr
x_u = x_u
else:
print("Bisection method fails.")
return None
xr_new = Xr
print("xr new",xr_new)
print("xr old 2", xr_old)
print("ea use",eA)
eA = abs((xr_new-xr_old)/xr_new)
print("max ea",max_eA)
print("eA after calculate", eA)
total_iter=total_iter+1
return (x_l + x_u)/2
f = lambda x: ((10000000 * (1.2 ** x)) / ((1.2 ** x) - 1))\
+\
((-10000000*x) / ((1.2 ** x) - 1))\
+\
10000000
bisection(f,5,10,0.0001,20)发布于 2020-05-30 08:12:26
代码只迭代两次,因为在第二次迭代中,eA的值比max_eA大,这是显而易见的。在从while循环中删除eA的条件后,您将获得21次迭代所需的输出。
代码的输出是
iteration 1
xr old 7.5
Xr now 7.5
xr new 7.5
xr old 2 7.5
ea use 0
max ea 0.0001
eA after calculate 0.0
iteration 2
xr old 7.5
Xr now 8.75
x_l use 7.5
x_u use 8.75
xr new 8.75
xr old 2 7.5
ea use 0.0
max ea 0.0001
eA after calculate 0.14285714285714285从输出中可以看到,在第二次迭代中,eA的值是0.14285714285714285,max_ea的值是0.0001。所以,while循环失败了。
https://stackoverflow.com/questions/62099466
复制相似问题