二分法 matlab_二分法的改进-试值法(matlab)

本文介绍了如何使用Matlab实现经典的二分法,并探讨了二分法的一种改进——试值法。通过实例代码,详细阐述了这两种数值求解方法的运用,帮助读者更好地理解和应用在实际问题中。
摘要由CSDN通过智能技术生成

dfe212bfd5343012d8cab521ceea6f76.png
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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值