主程序:
function [k,x,wuca,yx]=erfenfa(a,b,tol)
%a、b 为区间左右端点值,tol 是精度,k 为计算次数,x 为使用 k 次二分法得到的小区间
[ak,bk]的中点值,y(x)为 x 的函数值,wuca=|ak-bk|/2。
a1=a; b1=b;
ya=fun(a1); yb=fun(b1); %程序中调用的 fun.m 为函数
if ya* yb>0,
disp('注意:ya*yb>0,请重新调整区间端点 a 和 b.'), return
end
max1=-1+ceil((log(b1-a1)- log(tol))/ log(2)); % ceil 是上取整
for k=1: max1+1
ya=fun(a1);
yb=fun(b1);
x=(a1+b1)/2;
yx=fun(x);
wuca=abs(b1-a1)/2;
k=k-1;
[k,a,b,x,wuca,ya,yb,yx];
if yx==0
a1=x; b1=x;
elseif yb*yx>0
b1=x;
yb=yx;
评论1