matlab二分法程式程式碼?

二分法

主程式:

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

相關問題答案