一个简单的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()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。