function [n,an,bn,rn,f]=half(a,b,tol)
n=0;rn=NaN;f=NaN;
ya=fun(a);yb=fun(b);
an=a;bn=b;
fprintf('------------------------------------------------------------\n')
fprintf(' n an bn rn f \n')
fprintf('------------------------------------------------------------\n')
if ya==0
rn=a;f=ya;
fprintf(' %d %f %f %f %f \n',n,an,bn,rn,f)
return
end
if yb==0
rn=b;f=yb;
fprintf(' %d %f %f %f %f \n',n,an,bn,rn,f)
return
end
if (ya*yb)>0
disp('error:a and b have the same sign!')
return
else
fprintf(' %d %f %f %f %f \n',n,an,bn,rn,f)
end
while (b-a)>tol
rn=(a+b)/2;
f=fun(rn);
n=n+1;
fprintf(' %d %f %f %f %f \n',n,an,bn,rn,f)
if f==0
return
end
if sign(ya)==sign(f)
a=rn;ya=f;
elseif sign(yb)==sign(f)
b=rn;yb=f;
end
end
matlab------二分法求一元非线性方程的解
最新推荐文章于 2023-01-08 08:00:00 发布