前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MATLAB算法の二分法

MATLAB算法の二分法

作者头像
巴山学长
发布2019-07-15 14:58:43
1.2K0
发布2019-07-15 14:58:43
举报
文章被收录于专栏:巴山学长巴山学长

从今起准备连续多期介绍一些常用的算法,通过不断实践“算法到程序”这一过程来学习matlab编程,久而久之就可做到熟能生巧。

今天要介绍的是二分法,它是一种古老且经典的、蕴含深刻哲理的算法。我们知道现实物理世界是有限的,而抛开物理意义却又是无限可分的,而二分法就是基于这种无限可分思想,可以说它是连接有限与无限的纽带。今天主要介绍二分法在数学寻根中的应用,毕竟为的是将算法程序化。

二分法定义:对于在区间[a, b]上连续且单调的函数f(x),若满足条件f(a)*f(b)<0,则函数f(x)在此区间上必存在根。通过不断把此区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点准确值或近似值的方法。

要求单调函数f(x)在区间[a,b]上的根,且给定计算精度为e,用二分法寻根的过程大致如下:

1、分别计算f(a),f(b)的函数值,验证f(a)*f(b)是否小于0,若 小于0则说明在区间[a,b]上存在根。

2、计算区间求中点mid = (a+b)/2。

3、计算f(mid)的函数值,

① 若f(mid)=0,则mid就是函数的根;

② 若f(a)·f(mid)<0,则令b=mid;

③ 若f(mid)·f(b)<0,则令a=mid。

4、通过比较区间差绝对值与计算精度e的大小来判断是否达到预设条件,若|a-b|<e,则得到根的近似值a(或b),否则重复2至4步骤。

代码部分

问题定义:求函数f(x) = 3*x.^3-9*x.^2+5.6*x-7.5在区间[2,3]的根,计算精度为10^-6.

代码语言:javascript
复制
% 定义区间[2,3]
x = 2:0.1:3;
a = 2;
b = 3;
% 定义参考y值,即y=0的直线
ty = zeros(1,length(x));
% 定义在区间[2,3]上单调的函数fun
fun = @(x) 3*x.^3-9*x.^2+5.6*x-7.5;
y = fun(x);
% 绘制示意图
plot(x,y,'b.-',x,ty,'r--','LineWidth',3.5);
xlabel('x轴');
ylabel('y轴');
title('二分法寻根测试');
% 定义计算精度ep和临时变量tmp
ep = 1e-6;
tmp = 1;
% 对于不知道循环次数的,用whlie来实现
while(tmp>ep)
    if fun(a)*fun(b) < 0
       mid = (a+b)/2;
       if fun(a)*fun(mid) < 0
          b = mid;
       end
       if fun(b)*fun(mid) < 0
          a = mid;
       end
       tmp = abs(a-b);
    else
        disp('此区间不存在根!!!');
        break;
    end
end
JG = fun(mid);
disp(['在区间[2,3]的近似解为',num2str(JG)]);
hold on;
% 绘制近似交点
plot(mid,JG,'r.','MarkerSize',50);
hold off;

效果图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档