二分法求解单变量方程matlab
【精品】浅析二分法及其Matlab和C程序实现

浅析二分法及其Matlab和C程序实现第一部分:二分法浅析用二分法求方程的近似解是紧跟在“函数的零点”之后的教学内容。
从联系的角度看,前面一节,学生已经学习了方程的根与函数的零点之间存在着对立统一的关系,这一节则是介绍一种具体的方法来运用这一关系解决问题。
从整个教材来分析,这一部分的内容是在“函数的应用”这一大章节之下。
新课程标准中强调函数的应用性,这里包括两个方面:一方面是函数在生活实践中的应用,函数建模等内容属于这个范畴;另一方面则是函数在数学自身范围内的应用,“二分法”即是其中的代表。
基于以上的分析,笔者给出了以下的一些教学建议,与读者朋友们分享。
一、为什么要用二分法就通过试验缩小搜索区间来讲,试验点不一定取中点,取其他的点也可以,那么为什么取中点呢?下面以搜索区间为[0,1]的情况作讨论。
一种对所有搜索区间为[0,1]的方程f(x)=0都适用的方法,即对集合G={f(x)=0,f (x)连续,且f(0)·f(1)<0}中的所有方程都适用的方法.一个合理的假设是:G中所有方程f(x)=0的根在[0,1]上均匀分布.设试验点是c,那么c将[0,1]分成[0,c]和[c,1]两部分,它们的长度分别是c和1-c.由假设,通过试验保留的搜索区间是[0,c](即方程f(x)=0的根在[0,c]中)的概率是c,通过试验保留的搜索区间是[c,1]的概率是1-c.因此,通过一次试验保留的搜索区间的期望长度为c2+(1-c)2=2c2-2c+1=2(c-)2+,容易看出,当c=的时候,通过一次试验保留的搜索区间的期望长度最小。
这就是取中点作为试验点的原因。
二、引入方法方法1:已知商店里一件商品的利润y与它的价格x之间满足函数关系y=x2-4x+3,请画出这个函数的图像,并思考当价格为多少元的时候商店不盈也不亏.方法2:创设问题情景:蹦极运动.设下落的时间t秒.人离开参照点“礁石尖端”的位移为S(S=0表示人在礁石点处,向下取负,向上取正),开始下落时,时间t=0,在t ∈[4,6]时的变化如下表:问:这段时间内人有几次通过礁石尖端处?方法3:使用“幸运52”猜测商品价格的游戏作情景.方法4:(1)请同学们思考下面的问题:能否解下列的方程①x2-2x-1=0②lg x=3-x③x4-3x-1=0(2)特殊入手:不解方程求方程x2-2x-1=0的近似解(精确到0.01).方法1、2、3都是以“实际问题”为情境引入.方法4以学生已有的认知水平:会求一元二次方程的实数解,对应二次函数的图像与二轴的交点坐标.让学生探究具体的一元二次方程的根与其对应的一元二次函数的图像与二轴的交点的横坐标的关系,再探究一般的一元二次方程的根与其对应的一元二次函数的图像与x轴的交点的横坐标的关系.三、函数零点的处理用二分法求方程近似解的理论基础是零点存在定理.下面我们来看看教材上描述的零点存在定理.如果函数y=f(x)在区间[a,b]上的图像是连续不断的一条曲线,并且有f(a)f(b)<0,那么函数y=f(x)在区间[a,b]内有零点即存在c∈(a,b),使f(c)=0.由此可见,定理的题设部分有两个条件:(1)y=f(x)在区间[a,b]上的图象是连续不断的一条曲线;(2)f(a)f(b)<0.学生在运用这个定理时往往会存在以下疑问:①我怎样去判断某一函数的图像在某一区间是连续不断的呢?②y=f(x)满足条件(1)(2)就一定存在零点,那么是否只存在一个零点呢?③若把条件(2)改为f(a)f(b)>0,则y=f(x)在(a,b)是否就不存在零点呢?对于问题①,我们可以告诉学生我们前面所学的一次函数、二次函数、指数函数、对数函数、幂函数在它们各自的定义域内图像都是连续的.这些函数经过加减乘除或经过复合而成的新的函数在各自的定义域内图像仍然是连续的.对于问题②,主要通过观察函数图像来总结.(1)对全部零点为单重零点既对应方程无重根的情况.y=f(x)在区间[a,b]上的图象是连续不断的一条曲线且f(a)f(b)<0,则y=f(x)在(a,b)上有奇数个零点.若y=f(x)在区间[a,b]上单调则y=f(x)在(a,b)上有唯一零点.y=f(x)在区间[a,b]上的图象是连续不断的一条曲线且f(a)f(b)>0,则y=f(x)在(a,b)上有偶数个零点.若y=f(x)在区间[a,b]上单调则y=f(x)在(a,b)上有无零点.可以看出连续函数的零点具有一个很重要的性质:函数的图象如果是连续的,当它通过零点时,函数的值变号,也就是图象要经过该点要穿越x轴.(2)对多重零点的情况从图7、图8可以看出偶数重零点不穿过x轴;奇数重零点穿过x轴.函数若有一零点为多重零点,当该零点为偶重零点时,图象通过该零点时,函数值不变号,也就是图象经过该零点而不穿越x轴.当该零点为奇重零点时,图象经过该点时函数值要变号,也就是图象经过该零点且穿越x轴.处理好这个问题是本节课的关键.四、精度精确度的说明是一个无法避免的问题,而且需要和初中学习的“精确到”有所区分.教学中不可能让学生掌握严格的、形式化的定义,而且教科书对此也作了简化处理:对于达到精确度ε的界定是只要精确值所在区间的长度小于ε,那么这个区间的所有的值就都是满足精确度ε的近似值.那么,如何让学生明白这个含义呢?一个可行的方法就是通过简单例子来说明问题.最后,在学生思考、讨论及进一步分析的基础上给出精确度的含义:“一般地,对于数值x,如果要获得它的满足精确度0.01的近似值,就是找到一个包含x的区间[a,b],只要|a-b|<0.01即可.”五、二分法的定义与步骤利用二分法求方程的近似解时,学生用二分法求方程的近似解最大的困难就是第一步.第一步确定初始区间不好把握.要引导学生先研究函数的性质,画出函数大致图象,再确定初始区间.如果我们对函数的性质不了解,不能画出大致图象,问题比较麻烦,只能采用尝试的办法去搜索它的初始区间.六、信息技术的使用有意识借助计算器和几何画板帮助学生探究得到零点个数,下面以E xc el为例引导学生求y=ln(2x+6)+3-3x的零点.先用画函数图象工具画出函数图象.确定初始区间为[1,2],然后确定第一次迭代时每个单元格的公式,最后填充即可:x1(x1+x2)/2x2f(x1)f((x1+x2)/2)f(x2)f(x1)f(x2)f((x1+x2)/2)f(x1)f((x1+x2)/2)f(x2)精度迭代次数11.522.0794420.001072-3.69741-7.6885581540.002229483-0.00396111.51.7520.001072-1.58723-3.69741-0.003964201-0.0017017555.8686460.521.51.6251.750.001072-0.73642-1.58723-0.001701755-0.0007895521.1688620.2531.51.56251.6250.001072-0.35445-0.73642-0.000789552-0.0003800290.2610250.12541.51.531251.56250.001072-0.1735-0.35445-0.000380029-0.0001860160.0614970.062551.51.5156251.531250.001072-0.08543-0.1735-0.000186016-9.15918E-050.0148220.0312561.51.5078131.5156250.001072-0.04198-0.08543-9.15918E-05-4.50126E-050.0035870.01562571.51.5039061.5078130.001072-0.02041-0.04198-4.50126E-05-2.18796E-050.0008570.81.51.5019531.5039060.001072-0.00966-0.02041-2.18796E-05-1.03521E-050.0001970.91.51.5009771.5019530.001072-0.00429-0.00966-1.03521E-05-4.59805E-064.14E-050.001953125101.51.5004881.5009770.001072-0.00161-0.00429-4.59805E-06-1.72346E-066.89E-060.000976563111.51.5002441.5004880.001072-0.00027-0.00161-1.72346E-06-2.8677E-074.3E-070.000488281121.51.5001221.5002440.0010720.000402-0.00027-2.8677E-074.31423E-07-1.1E-070.000244141131.5001221.5001831.5002440.0004026.75E-05-0.00027-1.07627E-072.71495E-08-1.8E-080.141.5001831.5002141.5002446.75E-05-1E-04-0.00027-1.80465E-08-6.74688E-092.67E-086.10352E-05151.5001831.5001981.5002146.75E-05-1.6E-05-1E-04-6.74688E-09-1.09724E-091.63E-093.05176E-05161.5001831.5001911.5001986.75E-052.56E-05-1.6E-05-1.09724E-091.72755E-09-4.2E-101.52588E-05171.5001911.5001951.5001982.56E-054.67E-06-1.6E-05-4.16389E-101.19598E-10-7.6E-117.62939E-06181.5001951.5001961.5001984.67E-06-5.8E-06-1.6E-05-7.59619E-11-2.70718E-119.43E-113.8147E-06191.5001951.5001961.5001964.67E-06-5.6E-07-5.8E-06-2.70718E-11-2.62675E-123.26E-121.90735E-06201.5001951.5001951.5001964.67E-062.05E-06-5.6E-07-2.62675E-129.59574E-12 -1.2E-129.53674E-07211.5001951.5001951.5001962.05E-067.46E-07-5.6E-07-1.15526E-121.53249E-12-4.2E-134.76837E-0722七、二分法思想的应用注意用二分法的思想解决其他问题.(2006浙江16题)设f(x)=3ax,f(0)>0,f(1)>0,求证:(Ⅰ)a>0且-2<<-1;(Ⅱ)方程f(x)=0在(0,1)内有两个实根.证明:(I)(略)(II)解法1:抛物线的顶点坐标为,利用二分法思想在的两边乘以,得.又因为而所以方程在区间与内分别有一实根。
matlab方程求解实例

方程求根一、二分法1.用二分法求方程[]5.1,1013在区间=--x x 内的一个实根,要求两次近似值之间的误差不超过0.001。
解:用MA TLAB 求解:function rtn=bisection(fx,xa,xb,n,delta)x=xa;fa=eval(fx);x=xb;fb=eval(fx);disp(' [ n xaxb xc fc ]'); for i=1:nxc=(xa+xb)/2;x=xc;fc=eval(fx);X=[i,xa,xb,xc,fc];disp(X),if fc*fa<0xb=xc;else xa=xc;endif (xb-xa)<delta,break,endend输入:f='x^3-x-1';bisection(f,1,1.5,20,10^(-3))运行得:x0 =144 169 225y0 =12 13 15y =13.2302[ n xa xbxc fc ] 1.0000 1.0000 1.50001.2500 -0.29692.0000 1.2500 1.50001.3750 0.22463.0000 1.2500 1.37501.3125 -0.05154.0000 1.3125 1.37501.3438 0.08265.0000 1.3125 1.34381.3281 0.01466.0000 1.3125 1.3281 1.3203 -0.01877.0000 1.3203 1.3281 1.3242 -0.00218.0000 1.3242 1.3281 1.3262 0.00629.0000 1.3242 1.3262 1.3252 0.00202.求方程01)(3=--=x x x f 在区间[1,2]内的根,取精度510-=ε。
解:MATBLE 编程:function [x_star,it]=bisect(fun,a,b,ep)%%fun 为求根函数%%ep 为精度要求%%a ,b 为初始区间端点if nargin<4 ep=1e-5;endfa=feval(fun,a);fb=feval(fun,b);if fa*fb>0errorendk=0while abs(b-a)/2>=epx=(a+b)/2;fx=feval(fun,x);if fx==0breakendif fx*fa<0b=x;fb=fxelsea=x;fa=fxendk=k+1endx_star=(a+b)/2it=k输入:fun =@(x)(x^3-x-1);[x_star,it]=bisect(fun,1,2)运行得:x_star=1.3274It=16二、迭代法1.一般迭代法求解方程:.105.101)(5-03===--=ε附近的根,取精度在x x x x f 解:MATBLE 编程:function [x_star,it]=iterate(phi, x, ep, it_max) %% phi ()为迭代函数, %%x 为起始点, %%ep 为精度要求, %%it_max 为最大迭代次数。
二分法求根算法说明及Matlab代码实现

二分法求根算法说明及Matlab 代码实现定义:二分法(Bisection method ) 即一分为二的方法. 设[a ,b]为R 的闭区间. 逐次二分法就是造出如下的区间序列([an ,bn]):a0=a ,b0=b ,且对任一自然数n ,[an+1,bn+1]或者等于[an ,cn],或者等于[cn ,bn],其中cn 表示[an ,bn]的中点.(这个百度百科的定义,对于非专业人士来说,这个定义有点模糊,不好理解,下面我通过图形的方法来更好的理解二分法求解的过程。
)下面先看一下基本的定理定理:如果函数()y f x =在区间[,]a b 上的图象是连续不间断的一条曲线,并且有()(b)0f a f ⋅<,那么函数()y f x =在区间(),a b 内有零点,即存在(),c a b ∈使得()0f c =,这个c 也就是方程()=0f x 的实数根。
下面我们通过图形的方式进行说明以二次函数为例,通过下图可以清晰的看出,()f x 在区间(),a b 是单调的,并且()0f a <,(b)0f >,因此,存在一个c 点使得()0f c =,既存在一个实根c 。
图1 函数单根说明图2 二分法求解过程二分法求解过程如图2所示,()f x 在区间(),a b 是单调的,并且()0f a <,(b)0f >,因此存在一个实根c 。
下面分析一下求解过程:1、假设一个根,02a b x += 2、判断0()f x 的正负号,如果0()0f x <,012x b x += 如果0()0f x >,012a x x +=3、判断1()f x 的正负号,如果1()0f x <,122x b x += 如果1()0f x >,122a x x +=4、这样一直迭代下去,直至找到找(c)=0f 的那个c 点, 在数值计算是,得到精确的解往往是不现实的,通常设置一个误差范围,即(c)=0f δ>,当δ足够小的时候,也就认为c 是()f x 在区间(),a b 上的根了。
MATLAB计算方法迭代法牛顿法二分法实验报告

MATLAB计算方法迭代法牛顿法二分法实验报告实验报告一、引言计算方法是数学的一门重要应用学科,它研究如何用计算机来解决数学问题。
其中,迭代法、牛顿法和二分法是计算方法中常用的数值计算方法。
本实验通过使用MATLAB软件,对这三种方法进行实验研究,比较它们的收敛速度、计算精度等指标,以及它们在不同类型的问题中的适用性。
二、实验方法1.迭代法迭代法是通过不断逼近解的过程来求得方程的根。
在本实验中,我们选择一个一元方程f(x)=0来测试迭代法的效果。
首先,我们对给定的初始近似解x0进行计算,得到新的近似解x1,然后再以x1为初始近似解进行计算,得到新的近似解x2,以此类推。
直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。
本实验将通过对复杂方程的迭代计算来评估迭代法的性能。
2.牛顿法牛顿法通过使用函数的一阶导数来逼近方程的根。
具体而言,对于给定的初始近似解x0,通过将f(x)在x0处展开成泰勒级数,并保留其中一阶导数的项,得到一个近似线性方程。
然后,通过求解这个近似线性方程的解x1,再以x1为初始近似解进行计算,得到新的近似解x2,以此类推,直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。
本实验将通过对不同类型的方程进行牛顿法的求解,评估它的性能。
3.二分法二分法是通过将给定区间不断二分并判断根是否在区间内来求方程的根。
具体而言,对于给定的初始区间[a,b],首先计算区间[a,b]的中点c,并判断f(c)与0的大小关系。
如果f(c)大于0,说明解在区间[a,c]内,将新的区间定义为[a,c],再进行下一轮的计算。
如果f(c)小于0,说明解在区间[c,b]内,将新的区间定义为[c,b],再进行下一轮的计算。
直到新的区间的长度小于规定的误差阈值为止。
本实验将通过对复杂方程的二分计算来评估二分法的性能。
三、实验结果通过对一系列测试函数的计算,我们得到了迭代法、牛顿法和二分法的计算结果,并进行了比较。
二分法,牛顿迭代法,matlab

二分法、牛頓迭代法求方程近似解在一些科學計算中常需要較為精確的數值解,本實驗基於matlab 給出常用的兩種解法。
本實驗是以解決一個方程解的問題說明兩種方法的精髓的。
具體之求解方程e^(-x)+x^2-2*x=0,精度e<10^-5;;程序文本文檔如下%%%%%%二分法求近似解cleardisp('二分法求方程的近似解')format longsyms xf=inline('exp(-x)+x^2-2*x');%原函數%通過[x,y]=fminbnd(f,x1,x2)求出極小值點和極小值,進而確定%區間端點,從而確定解區間矩陣CX=[];C=[0 1.16;1.16 2] ; %C(:,1)為解區間的左端點,C(:,2)為解區間右端點ss=length(C); %統計矩陣C的行數,即為方程解的個數for i=1:ssa=C(i,1);b=C(i,2);%f(a)>=0,f(b)<=0e1=b-a;%解一的精度e0=10^-5;%精度ya=f(a);while e1>=e0x0=1/2*(a+b);y0=f(x0);if y0*ya<=0b=x0;elsea=x0;ya=y0;ende1=b-a;endA=[a,b,e1];%解的區間和精度X=[X;A];%解與精度構成的矩陣endX%%%%%%%牛頓迭代法disp('牛頓迭代法解方程的近似解')clear %清空先前變量syms x %定義變量y=exp(-x)+x^2-2*x;%原函數f=inline(y);f1=diff(y); %一階導函數g=inline(f1);format long %由於數值的默認精度為小數點后四位,故需要定義長形X=[];C=[0 1.16;1.16 2] ; %C(:,1)為解區間的左端點,C(:,2)為解區間右端點ss=length(C); %統計矩陣C的行數,即為方程解的個數for i=1:ssa=C(i,1);b=C(i,2);%f(a)>=0,f(b)<=0e0=10^-5; %要求精度i=1; %迭代次數x0=(a+b)/2;A=[i,x0]; %迭代次數,根值的初始方程t=x0-f(x0)/g(x0); %%%%迭代函數while abs(t-x0)>=e0 %%迭代循環i=i+1;x0=t;A=[A;i,x0];t=x0-f(x0)/g(x0);endA ;B=A(i,:);%迭代次數及根值矩陣X=[X;B];endX運行結果如下如若使用matal內置函數fzero,得到如下結果由兩者求得的結果知,使用函數fzero求得的結果精度不夠。
二分法求解单变量非线性方程及其应用与实现(精)

二分法求解单变量非线性方程及其应用与实现论文作者:任珊 2010-10-2720:32:00论文关键词:二分法单变量非线性方程收敛性误差论文摘要:本文主要通过一个实例来研究单变量非线性方程f(x)=0的二分法求解及此方法的收敛性,根据误差估计确定二分次数并进行求解。
同时实现matlab和C语言程序编写。
从而掌握过程的基本形式和二分法的基本思想,在以后的学习过程中得以应用。
1. 引言在科学研究与工程技术中常会遇到求解非线性方程f(x)=0的问题。
而方程f(x)是多项式或超越函数又分为代数方程或超越方程。
对于不高于四次的代数方程已有求根公式,而高于四次的代数方程则无精确的求根公式,至于超越方程就更无法求其精确解了。
因此,如何求得满足一定精度要求的方程的近似根也就成为了我们迫切需要解决的问题。
近年来,随着数学科学研究的不断进展,又更新了许多方程求解的方法。
我们知道,对于单变量非线性方程f(x)=0,一般都可采用迭代法求根,由此产生了二分法。
2. 二分法一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2], 现在假设f(a)<0,f(b)>0,a<b①如果f[(a+b)/2]=0,该点就是零点,如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用中点函数值判断。
如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b,从①开始继续使用中点函数值判断。
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。
二分法matlab

二分法matlab二分法是一种常用的数值计算方法,也被称为二分查找或折半查找。
它通过将搜索范围逐渐缩小一半来快速定位目标值。
在MATLAB中,我们可以利用二分法来解决一些数值计算问题,下面将介绍二分法的原理和应用。
二分法的基本思想是将搜索范围一分为二,然后确定目标值位于左半部分还是右半部分,然后继续将该部分一分为二。
重复这个过程直到找到目标值或者确定目标值不存在。
二分法的核心就是不断将搜索范围缩小一半。
首先,我们需要确定搜索范围的初始值。
通常情况下,我们会选择数组或者有序列表的首尾元素作为搜索范围的边界。
然后,我们计算出搜索范围的中间位置,并将中间位置的值与目标值进行比较。
如果中间位置的值等于目标值,那么我们就找到了目标值;如果中间位置的值大于目标值,那么目标值可能在左半部分;如果中间位置的值小于目标值,那么目标值可能在右半部分。
根据比较结果,我们可以缩小搜索范围,重复上述步骤直到找到目标值或者确定目标值不存在。
二分法在MATLAB中的应用非常广泛。
下面以两个例子来说明二分法在MATLAB中的使用。
第一个例子是求解方程的根。
假设我们需要求解方程f(x)=0的根,其中f(x)是一个连续函数。
我们可以利用二分法来逼近方程的根。
首先,我们需要确定一个初始搜索范围[a, b],使得f(a)和f(b)的符号不同。
然后,我们可以使用二分法来逐步缩小搜索范围,直到找到一个近似的根。
第二个例子是查找有序列表中的某个元素。
假设我们有一个有序列表A,我们需要查找其中的某个元素x。
我们可以利用二分法来快速确定x是否在列表中,并返回其索引位置。
首先,我们需要确定初始搜索范围的左右边界。
然后,我们可以使用二分法来逐步缩小搜索范围,直到找到x或者确定x不存在于列表中。
二分法是一种常用的数值计算方法,在MATLAB中也有广泛的应用。
通过将搜索范围一分为二,二分法可以快速定位目标值,解决方程的根或者查找有序列表中的元素。
熟练掌握二分法的原理和应用,对于解决一些数值计算问题非常有帮助。
二分法及其matlab程序-经典

避免数值不稳定性
对于涉及大量计算或迭代的过程,要注意数值稳定性问题, 采取适当的算法或技巧,如使用稳定的算法、增加迭代次 数等。
利用MATLAB内置函数
二分法及其matlab程序-经典
目录
• 二分法基本原理 • MATLAB编程实现二分法 • 二分法在数值计算中应用举例 • MATLAB程序优化与改进策略 • 总结与展望
01
二分法基本原理
二分法定义与思想
定义
二分法是一种求解非线性方程近似根的有效算法,其基本思想是通过不断将区间一分为二,逐步缩小求解范围, 直到满足精度要求为止。
end
root = (a + b) / 2;
VS
关键代码片段展示
end
```
运行结果分析与讨论
• 假设我们要求解非线性方程f(x)=x^3-2x-5=0在 区间[2, 3]内的根,可以调用上述bisection函数进 行求解
运行结果分析与讨论
```matlab f = @(x) x^3 - 2*x - 5;
精度控制
当区间长度|b - a|小于给定 精度时,可取中点或任一端 点作为近似最优解。
求解矩阵特征值问题
• 特征多项式构建:对于n阶矩阵A,构建特征多项式f(λ) = |A - λI|。 • 初始区间选择:确定包含特征值的初始区间[a, b]。 • 二分迭代:取中点c = (a + b) / 2,计算f(c)。若f(c) == 0,则c为特征值;否则根据f(a)、f(b)、f(c)的大小关
缺点
二分法收敛速度较慢,需要多次迭代才能得 到精确解,且对于多峰函数或者复杂函数可 能无法找到全局最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分法求解单变量方程matlab
1、问题:用二分法求解单变量连续函数f(x)在连续区间[a, b]间的零点。
2、Matlab程序2.1、Matlab脚本文件% 调用二分法函数求解[x, iteration] = Erfen(@myfun, -1, 3)2.2、Matlab函数文件function y = myfun(x)%目标求解函数y =
x^2-5; %测试二分法2.3、Matlab函数文件function [x, iteration] = Erfen(f, a, b, tol)% 二分法求解单变量连续函数f(x)在连续区间[a, b]间的零点% 要求f(a)f(b)% iteration = [n x fx a fa b fb]if nargin tol = 1e-4; %设置精度要求endfa = feval_r(f,
a); %f(a)的值fb = feval_r(f, b); %f(b)的值iteration = []; %迭代过程记录n = 0; %迭代步数if abs(fa) x = a;return;elseif abs(fb) x = b;return;elseif sign(fa) == sign(fb)error('fa has the same sign with fb'); %a,b同号endwhile abs(b-a) > toln = n + 1; %迭代步数x = a/2 + b/2; %二等分fx = feval_r(f, x);iteration = [iteration; n x fx a fa b fb];if abs(fx) return;elseif sign(fx) == sign(fa)a = x;elseif sign(fx) == sign(fb)b = x;endendend3、运行结果x
=2.2361iteration =1.0000 1.0000 -4.0000 -1.0000 -4.0000
3.0000
4.00002.0000 2.0000 -1.0000 1.0000 -4.0000 3.0000
4.00003.0000 2.5000 1.2500 2.0000 -4.0000 3.0000
4.00004.0000 2.2500 0.0625 2.0000 -4.0000 2.5000
4.0000
5.0000 2.1250 -0.4844 2.0000 -4.0000 2.2500
4.00006.0000 2.1875 -0.2148 2.1250 -4.0000 2.2500
4.00007.0000 2.2188 -0.0771 2.1875 -4.0000 2.2500
4.00008.0000 2.2344 -0.0076 2.2188 -4.0000 2.2500
4.00009.0000 2.2422 0.0274 2.2344 -4.0000 2.2500
4.000010.0000 2.2383 0.0099 2.2344 -4.0000 2.2422
4.000011.0000 2.2363 0.0012 2.2344 -4.0000 2.2383
4.000012.0000 2.2354 -0.0032 2.2344 -4.0000 2.2363
4.000013.0000 2.2358 -0.0010 2.2354 -4.0000 2.2363
4.000014.0000 2.2361 0.0001 2.2358 -4.0000 2.2363 4.0000。