MATLAB知识点:循环语句的经典练习题:二分搜索

 ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


节选自​第4章:MATLAB程序流程控制

这个例题我们介绍二分搜索法求函数零点。若函数f(x)在区间[a,b]上连续严格单调,且满足f(a)×f(b)<0,那么f(x)在区间[a,b]上有且仅有一个零点。

二分搜索法的基本思想是不断将区间[a,b]一分为二,然后判断零点位于哪一半区间内,接着继续将包含零点的那一半区间一分为二,如此循环,直到得到足够精确的零点的估计值。以下是二分搜索法的一般步骤:

步骤1:选择函数零点所在的初始区间[a,b],确保f(a)×f(b)<0。

步骤2:计算区间的中点c = (a + b) / 2,并计算函数在c处的值f(c)。

步骤3:如果f(c)的值恰好等于零,或者f(c)的绝对值小于某个给定的误差阈值,那么c就可以当成零点,迭代结束。

步骤4:如果f(c)与零的差异较大,那么需要根据f(c)的正负号,将原来包含零点的区间[a,b]更换为[a,c]或[c,b],确保零点仍然在新的区间内(例如: f(a)×f(c)<0则更换为[a,c])。

步骤5:重复步骤2到4,直到找到零点或者达到所需的精度停止迭代。

下面看一个具体的题目:函数f(x) =x^{3} - 8x^{2}+x - 5, f(x)在区间[6,10]严格递增且f(6)< 0 ,f(10)>0,请用二分搜索法求零点x_0f(x_0)和0的误差控制在1e-8内即可)。

% 设置初始搜索区间
a = 6;  b = 10;
% 设置误差阈值
epsilon = 1e-8;
% 开始二分搜索
while 1
    % 计算区间中点
    c = (a + b) / 2;
    % 计算中点处的函数值
    fc = c^3 - 8*c^2 + c - 5;
    % 如果中点处的函数值已经足够接近零,停止搜索
    if abs(fc) < epsilon
        break
    end
% 否则根据函数值的正负来调整搜索区间
fa = a^3 - 8*a^2 + a - 5;
    if fa * fc < 0  % f(a) × f(c)<0
        b = c;   % 区间更换为[a,c]
    else   % f(c) × f(b)<0
        a = c;   % 区间更换为[c,b]
    end
end
% 找到的零点估计值
x0 = c;
disp(x0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值