关于算法:利用二分法求单调函数解python

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理