二分法:
function [c,wcgj,yc]=bisect(f,a,b,wcj)
%f被求函数
%a和b为有根区间的左右限
%wcj是允许的误差界
%c为所求近似解
%yc为函数f在c上的值
%wcgj是c的误差估计
if nargin<4 wcj=1e-5;end
ya=feval('f',a);
yb=feval('f',b);
if yb==0,c=b,return,end
if ya*yb>0,
txt=sprintf('(%d %d)区间无根',a,b);
disp(txt);
return,end
max1=1+round((log(b-a)-log(wcj))/log(2));
for k=1:max1
c=(a+b)/2;
yc=feval('f',c);
if yc==0 a=c;b=c;break,
elseif yb*yc>0
b=c;yb=yc;
else
a=c;ya=c;
end
if(b-a)<wcj,break,end
end
k;c=(a+b)/2;wcgj=abs(b-a);yc=feval('f',c);
txt=sprintf('二分次数k=%d 近似解c=%f 误差估计wcgj=%e 函数f在c(=%f)点值yc=%e',k,c,wcgj,c,yc);
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载