function [c,err,yc] = regula(f,a,b,delata,epsilon,maxl)
%=================input==================================
%-f is the function input as a sting 'f'
%-a and b are the left and right end points
%-delta is the tolerance for the zero
%-maxl is the maximmum number of iterations
%=================output=================================
%-c is the zero
%yc = f(c)
%err is the error estimate for c
%========================================================
%计算端点a,b的函数值
ya = feval(f,a);
yb = feval(f,b);
% 如果a,b的函数值同号,则没有零点
if ya*yb >0
disp('Note: f(a)*f(b) >0');
break
end
% 试值法没有解析的迭代次数,需要预设,
%但是有误差限,在满足误差限时就会停止迭代
for k = 1: maxl
% 计算ab割线与x轴的交点c
% dx是c点与b点的差值
dx = yb(b-a)/(yb-ya);
c = b-dx;
% 计算c,a的差值
ac = c-a;
% 计算c的函数值
yc = feval(f,c);
% 如果c的函数值为0,则c为零点
if yc == 0
break;
% 若b,c的函数值异号,则收缩b到c
elseif yb*yc >0
b=c;
yb=yc;
else
% 若a,c的函数值异号,则收缩a到c
a=c;
ya=yc;
end
% 选取dx(bc)与ac较小的值为dx,这是为了比较误差限
dx = min(abs(dx),ac);
% 若dx的值小于误差限,则停止迭代
if abs(dx) <delta
break
end
% 若yc接近0,满足误差限,则停止迭代
if abs(yc) < epsilon
break
end
end
%计算相应的c,c的函数值,以及误差err
c;
err = abs(b-a);
yc=feval(f,c);
二分法 matlab_二分法的改进-试值法(matlab)
最新推荐文章于 2022-10-10 22:30:58 发布
本文介绍了如何使用Matlab实现经典的二分法,并探讨了二分法的一种改进——试值法。通过实例代码,详细阐述了这两种数值求解方法的运用,帮助读者更好地理解和应用在实际问题中。
摘要由CSDN通过智能技术生成