共计 605 个字符,预计需要花费 2 分钟才能阅读完成。
一个简略的 python 二分法求解函数
# 二分法
from typing import Callable
def bisection(function:Callable[[float],float],a:float,b:float)->float:
# Callable 示意回调函数
# 找出令函数在 [a,b] 区间内是 0 的值
start:float=a
end:float=b
if function(a)==0:
return a
elif function(b)==0:
return b
elif(function(a)*function(b)>0
):
raise ValueError("找不到解")
else:
mid:float=start+(end-start)/2.0
while abs(start-mid)>10**-7: #这个循环就是一直二分的过程。最细精度管制在 10 的 - 7 次
if function(mid)==0:
return mid
elif function(mid)*function(start)<0:
end=mid
else:
start=mid
mid=start+(end-start)/2.0
return mid
def f(x:float)->float:
return x**3-2*x-5
if __name__=="__main__":
print(bisection(f,1,1000))
import doctest
doctest.testmod()
正文完