对于二分法网上大量充斥着一些写二分法的代码,都很相似,但是往往不便于理解。
偶然的时候看到一个比较有意思且贴近理科生思维理解的答案,在这里分享一下。首先,我们对于函数是不会陌生的。对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。 解方程的话,就是要求我们找到所有零点。
那么零点所在的区间我们要怎么去找,我们先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点。这就是二分法核心的思想。
在这个区间内,我们不断求f[(a+b)/2]。
那么接下来判定f[(a+b)/2]的值:
如果f[(a+b)/2]=0,该点就是零点。
如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a
如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。