折查法(bisection method)是一種求解非線性方程的迭代算法,也被稱為二分法。它采用了分治的思想,在每次迭代中將問題規模縮小一半,直到收斂到某個確定的解。
def bisection(f, a, b, tol): """ Inputs: f: 函數 a, b: 區間左右端點 tol: 最大誤差 Outputs: c: 函數f(x)=0的解 """ if f(a)*f(b) >0: raise ValueError("函數f在區間[a,b]內沒有根") while (b-a)/2 >tol: c = (a+b)/2 if f(c) == 0: return c elif f(a)*f(c)< 0: b = c else: a = c return (a+b)/2
該算法的時間復雜度為O(log(n)),因此它適用于求解一些復雜的非線性方程,如三角函數、指數函數等。其中最重要的是保證函數在區間[a, b]內存在唯一的可導解,否則算法可能會出現不收斂的情況。
使用折查法還可以求解一些實際問題,如求解一個曲線和x軸的交點、求解某一時刻的物理系統狀態等。