当前位置:   article > 正文

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

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内即可)。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/822496
推荐阅读
相关标签
  

闽ICP备14008679号