一个简单的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()    

我的元宇宙
1 声望0 粉丝

下一篇 »
敏捷 101