2.2二分法
二分法又称为对分法,是求解非线性方程根的最简单的方法,他求解的基本思想是由介值定理得到的。设函数在内连续,且。根据连续函数的性质知道,方程在区间内至少有一个实根。
设区间[]是有根区间,令取区间中点。考察 点的函数值情况,若则由定理可知,,此时令否则(不考虑等号情况,否则,已得到方程的根),因此得到则,此时令再取
这就是二分法的基本思想。其示意图如图2-1
图2-1
二分法算法
由二分法的基本思想和收敛性质,得到相应的求解非线性方程根的二分法。
(1) 取初始有根区间[](满足),以及精度要求
(2) 若则停止计算
(3) 取若,则置否则
(4) 转(2)
根据算法及定义可以编写二分法MATLAB程序如下所示:
function [x,err,xx] = bisct(f,a,b,TolX,MaxIter)
fa = feval(f,a); fb = feval(f,b);
if fa*fb > 0, error('We must have f(a)f(b)<0!'); end
for k = 1: MaxIter
xx(k) = (a + b)/2;
fx = feval(f,xx(k)); err = (b-a)/2;
plot(xx(k),fx,'o');
hold on;
if abs(err)<TolX, break;
elseif fx*fa > 0, a = xx(k); fa = fx;
else b = xx(k);
end
end
x = xx(k);
if k == MaxIter, fprintf('The best in %d iterations\n',MaxIter), end
x
fx
plot(x,fx,'r*')