二分法的 MATLAB 主程序
function [k,x,wuca,yx]=erfen(a,b,abtol)
a(1)=a; b(1)=b;
ya=fun(a(1)); yb=fun(b(1)); %程序中调用的 fun.m 为函数
if ya* yb>0,
disp('注意:ya*yb>0,请重新调整区间端点 a 和 b.'), return
end
max1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil 是向
方向取整
for k=1: max1+1
a;ya=fun(a); b;yb=fun(b); x=(a+b)/2;
yx=fun(x); wuca=abs(b-a)/2; k=k-1;
[k,a,b,x,wuca,ya,yb,yx]
if yx==0
a=x; b=x;
elseif yb*yx>0
b=x;yb=yx;
else
a=x; ya=yx;
end
if b-a< abtol , return, end
end
k=max1; x; wuca; yx=fun(x);