讲解视频:可以在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)在区间[6,10]严格递增且f(6)< 0 ,f(10)>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) < epsilonbreakend
% 否则根据函数值的正负来调整搜索区间
fa = a^3 - 8*a^2 + a - 5;if fa * fc < 0 % f(a) × f(c)<0b = c; % 区间更换为[a,c]else % f(c) × f(b)<0a = c; % 区间更换为[c,b]end
end
% 找到的零点估计值
x0 = c;
disp(x0)