二分法是什麼呢?百度上的定義是:「對於區間[a,b]上連續不斷且f(a)·f(b)<0的函數y=f(x),通過不斷地把函數f(x)的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。」
這個定義比較複雜,我們把它分成幾部分來看。
一、二分法的用途
二分法可以讓我們在一個區間[a,b]上取得函數f(x)的一個零點的近似值。
二、使用二分法的條件
想要在區間[a,b]上使用二分法求零點,我們必須要保證區間[a,b]上有零點。想起來去年Dijkstra對我說,你看這個二分法他蠢的一批,萬一區間裡沒有零點怎麼辦?我當時覺得好有道理。今天才知道原來二分法要滿足「零點存在定理」。所謂零點存在定理,就是說函數在區間[a,b]上連續不斷且f(a)·f(b)<0。
為什麼滿足零點存在定理就可以使用二分法呢?因為既然f(a)·f(b)<0,那麼f(a)和f(b)必定是一正一負。又因為函數圖像連續不斷,所以函數值由正變負或由負變正,必然會經過x軸,使得區間[a,b]上存在零點。
三、二分法的實現過程
二分法是怎麼實現的呢?簡單地說,每次取區間[a,b]的中點,判斷(a+b)/2是不是零點。如果是,那麼我們就直接找到了零點,算法結束。如果不是,那麼我們就要分情況討論。如果f((a+b)/2)與f(a)同號,那麼區間[(a+b)/2,b]滿足零點存在定理,也就是說,零點存在於區間[(a+b)/2,b]上,我們可以繼續在區間[(a+b)/2,b]上使用二分法;否則,f((a+b)/2)必定與f(b)同號,那麼同理我們可以在區間[a,(a+b)/2]上使用二分法。