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

42次阅读

共计 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()    

正文完
 0