import numpy as np #导入NumPy工具包
#定义几个不同的函数用于后续的二分法求解验证
f0=lambda x:2**x-4
f1=lambda x:np.log10(x)
f2=lambda x:x**0.3-1
f3=lambda x:x**2-x*2-1
# Python代码中的log函数如果没有设置底数的话,默认为e,即自然对数。
#文中其他非代码部分的log如果没有特别说明,一般也是指自然对数
#定义二分算法函数,其中a,b用于定义函数区间[a,b],sec=(a+b)/2为区间中点
def bisection(a,b,fun):
sec=(a+b)/2
while True:
if fun(sec)*fun(a)<0:
b=sec
elif fun(sec)*fun(a)>0:
a=sec
else:
return sec
least_sec=sec
sec=(a+b)/2
try:
#给定一个精度ε,用于函数求解的近似计算
if abs((sec-least_sec)/sec)<0.000005:
return sec
except ZeroDivisionError as e: #除数为0出错处理
pass
pass#输出上述几个函数基于给定精度的近似根
print(bisection(-5,5,f0))
print(bisection(0.5,5,f1))
print(bisection(0,15.0,f2))
print(bisection(-10.0,12.0,f3))
1.9999980926513672 1.000002384185791 1.0000026226043701 -0.41421449184417725
算法:二分法求解是对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!