二分法
主程式:
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;
else
a1=x;
ya=yx;
end
if b1-a1< tol , return, end
end
k=max1;
x;
wuca;
yx=fun(x);
End、
分程式:
function y1=fun(x)
y1=sqrt(x^2+1)-tan(x);
end
結果:
[k,x,wuca,yx]=erfenfa(0,pi/2,10^-5)
k =17
x =0.9415
wuca =5.9921e-06
yx =-2.6595e-06