MATLAB计算方法迭代法牛顿法二分法实验报告要点

合集下载

MATLAB二分法和牛顿迭代法实验报告

MATLAB二分法和牛顿迭代法实验报告
(1)计算f(x)在有解区间[a, b]端点处的值。
(2)计算 在区间中点处的值 。
(3)判断若 ,则 即是根,否则检验:
①若 与 异号,则知道解位于区间 ,
②若 与 同号,则知道解位于区间, ,
反复执行步骤2、3,便可得到一系列有根区间:
(4)当 ,则 即为根的近似值。
Newton迭代法原理:设已知方程 的近似根 ,则在 附近 可用一阶泰勒多项式 近似代替.因此,方程 可近似地表示为 .用 表示 的根,它与 的根差异不大.
3.在MATLAB命令行窗口求解方程f(x)
4.得出计算结果
设 ,由于 满足 解得
重复这一过程,得到迭代格式
实验所用软件及版本:MATLAB R2014a
主要内容(要点):
实验过程记录(含:基本步骤、主要程序清单及异常情况记录等):
二分法:
1.在MATLAB编辑器中建立一个实现二分法的M文件bisect.m
2.在MATLAB命令行窗口求解方程f(x)
3.得出计算结果
数学应用软件大型实验实验报告
实验序号:日期:年月日
班级
姓名
学号
实验
名称
二分法和Newton迭代法
问题背景描述:
分别编写一个用二分法和用Newton-Raphson法求连续函数的零点通用程。
实验目的:
用以求方程x^2-3*x+exp(X)=2的正根(要求精度ε=10^-6)。
实验原理与数学模型:
二分法原理:如果函数y=f(x)在闭区间[a,b]上连续,且已知函数在两端点的函数f(a)与f(b)取异号,即两端点函数值的乘积f(a)*f(b)<0,则函数y=f(x)在区间(a,b)内至少有一个零点,即至少存在一点c,使得f(x)=0的解。

MATLAB计算方法迭代法牛顿法二分法实验报告

MATLAB计算方法迭代法牛顿法二分法实验报告

完美WORD格式姓名实验报告成绩评语:指导教师(签名)年月日说明:指导教师评分后,实验报告交院(系)办公室保存。

实验一 方程求根一、 实验目的用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。

并比较方法的优劣。

二、 实验原理 (1)、二分法对方程0)(=x f 在[a ,b]内求根。

将所给区间二分,在分点2a b x -=判断是否0)(=x f ;若是,则有根2a b x -=。

否则,继续判断是否0)()(<∙x f a f ,若是,则令x b =,否则令x a =。

否则令x a =。

重复此过程直至求出方程0)(=x f 在[a,b]中的近似根为止。

(2)、迭代法将方程0)(=x f 等价变换为x =ψ(x )形式,并建立相应的迭代公式=+1k x ψ(x )。

(3)、牛顿法若已知方程 的一个近似根0x ,则函数在点0x 附近可用一阶泰勒多项式))((')()(0001x x x f x f x p -+=来近似,因此方程0)(=x f 可近似表示为+)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(')(00x f x f 。

取x 作为原方程新的近似根1x ,然后将1x 作为0x 代入上式。

迭代公式为:=+1k x -0x )(')(k k x f x f 。

三、 实验设备:MATLAB 7.0软件四、 结果预测(1)11x =0.09033 (2)5x =0.09052 (3)2x =0,09052 五、 实验内容(1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不超过3105.0-⨯。

(2)、取初值00=x ,用迭代公式=+1k x -0x )(')(k k x f x f ,求方程0210=-+x e x的近似根。

要求误差不超过3105.0-⨯。

牛顿迭代、割线法、二分法算法实验报告

牛顿迭代、割线法、二分法算法实验报告

三、牛顿法计算实验
3.1 牛顿法算法思想和简要描述 我们有一个函数 f,其零点由数值计算得出,设 r 是 f 的一个零点,x 是 r 的一个近似。若 f 的二阶导数存在并且连续,则有泰勒定理,得 0=f(r)=f(x+h)=f(x)+hf ’(x)+o(h^2) 其中 h=r-x。若 h 较小(即 x 在 r 附近) ,则有理由略去 o(h^2)项并且 在余下方程中求 h。即得到 h=-f(x)/f ’(x)。故 x-f(x)/f ’(x)是比 x 更好的一个 近似。牛顿法从 r 的一个估计 x0 开始,得到更加准确的近似值 xn。递推 式定义为: f(xn ) xn+1 = xn − ′ f (xn ) 3.2 MATLAB 运行牛顿法程序 牛顿法求解 f=x^3-9 的根 参数设置:x0 设置为函数 f 零点的近似。 n 设置为牛顿法 for 语句迭代次数。 alpha 设置为最后结果 f(x)的精度。 delta 设置为最后结果 x 的精度。 (若 alpha,delta 都符合设置的计算精度时,结束迭代并得 出计算结果,否则一直迭代到 n 次) 设置初始值:设置参数 x0 分别为为 3;迭代次数 n 为 50 次;alpha 和 delta 都设置为 0.001。 列出计算结果: >> newton(f,50,3,0.001,0.001) n x f(x) delta alpha 1.0000 2.3333 3.7037 0.6667 3.7037 2.0000 2.1066 0.3483 0.2268 0.3483 3.0000 2.0804 0.0043 0.0262 0.0043 Elapsed time is 0.166680 seconds.
4.0000 2.0625 2.1250 5.0000 2.0625 2.0938 6.0000 2.0781 2.0938 7.0000 2.0781 2.0859 8.0000 2.0781 2.0820 9.0000 2.0801 2.0820 10.0000 2.0801 2.0811 11.0000 2.0801 2.0806 12.0000 2.0801 2.0803 13.0000 2.0801 2.0802 14.0000 2.0801 2.0801 elapsed time is 0.316426 seconds.

MAAB计算方法迭代法牛顿法二分法实验报告

MAAB计算方法迭代法牛顿法二分法实验报告

MAAB计算方法迭代法牛顿法二分法实验报告实验目的:比较MAAB计算方法中迭代法、牛顿法和二分法的优缺点,探究它们在求解方程中的应用效果。

实验原理:1、迭代法:将方程转化为x=f(x)的形式,通过不断迭代逼近方程的根。

2、牛顿法:利用函数在特定点的切线逼近根的位置,通过不断迭代找到方程的根。

3、二分法:利用函数值在区间两端的异号性质,通过不断二分缩小区间,最终逼近方程的根。

实验步骤:1、选择一元方程进行求解,并根据方程选择不同的计算方法。

2、在迭代法中,根据给定的初始值和迭代公式,进行迭代计算,直到满足预设的迭代精度要求。

3、在牛顿法中,选择初始点,并根据切线方程进行迭代计算,直到满足预设的迭代精度要求。

4、在二分法中,选择区间,并根据函数值的异号性质进行二分,直到满足预设的迭代精度要求。

5、根据计算结果,比较三种方法的求解效果,包括迭代次数、计算时间、求解精度等指标。

实验结果与分析:通过对多个方程进行测试,得到了以下实验结果:1、迭代法的优点是简单易懂,适用范围广,但当迭代公式不收敛时会导致计算结果不准确。

2、牛顿法的优点是收敛速度较快,但需要计算函数的一阶导数和二阶导数,对于复杂函数较难求解。

3、二分法的优点是收敛性较好,不需要导数信息,但收敛速度较慢。

4、对于线性方程和非线性方程的求解,牛顿法和迭代法通常比二分法更快速收敛。

5、对于多重根的方程,二分法没有明显优势,而牛顿法和迭代法能更好地逼近根的位置。

6、在不同的方程和初值选择下,三种方法的迭代次数和求解精度略有差异。

7、在时间效率方面,二分法在收敛速度较慢的同时,迭代次数较少,牛顿法在收敛速度较快的同时,迭代次数较多,而迭代法对于不同方程有较好的平衡。

结论:1、对于不同类型的方程求解,可以根据具体情况选择合适的计算方法。

2、迭代法、牛顿法和二分法各有优缺点,没有绝对的最优方法,需要权衡各种因素选择最适合的方法。

3、在实际应用中,可以根据方程的特点和精度要求综合考虑不同方法的优劣势,以获得较好的求解效果。

二分法、牛顿迭代法、普通迭代法

二分法、牛顿迭代法、普通迭代法

数值球根试验报告《数值计算方法》专业班级软件08-1姓名熊文成学号08083117时间2010年10月24日星期天一、 实验目的熟悉二分法以及牛顿迭代法求方程近似根的数值方法,掌握各种迭代方法,自己扩张研究迭代法的效率与收敛性和初始值的关系。

二、 实验内容1.已知0104)(23=-+=x x x f 在[]21,上有一个实根*x ,14)2(5)1(=-=f f ,,用二分法和牛顿迭代法求该实根,要求精度满足条件:321*1021-+⨯≤-k x x 。

2.条件允许的话,扩展研究各种迭代法的效率,以及迭代的效率和收敛性与初始值的关系,并通过比较采用两点加速的方法与普通的方法的效率体验加速迭代的优点。

总而言之,本实验中的用到的求根方法有①二分法,②牛顿迭代法,③迭代函数为213)10(21)(x x -=ϕ的迭代方法,以及④对函数213)10(21)(x x -=ϕ采用两点加速迭代的方法。

三、 主函数流程程序是按顺序运行的,流程图如下图所示:四、源程序#include <stdio.h>#include <conio.h>#include <math.h>//根据x的值计算函数值//函数f(x)=x*x*x+4*x*x-10double func(double x){double value;value=x*x*x+4*x*x-10;return value;}//根据参数x的值计算函数f(x)的导数值double divFunc(double x){return 3*x*x+8*x;}//二分法计算方程f(x)=0在[1,2]上的跟//二份迭代结束条件由参数precision精度给出void biSectionMethod(double precision){int k=0; //均分次数double x1=1.0,x2=2.0; //区间[1.0,2.0]double midx; //二分之后的值printf("\n\t k 有根区间k+1 f(x(k+1)) ");do{printf("\n\t%3d",k);printf(" [%.3f,%.3f]",x1,x2);midx=(x1+x2)/2;printf(" %f",midx);printf(" %.6f",func(midx));if (func(midx)<0)x1=midx;else x2=midx;k++;if (k%3==0) //每次输出4个等用户审查getch();} while (x2-x1>=precision); //区间的长度超过5e-3就一直迭代printf("\n\t二分法分区间的次数:%d,所求的根是:%lf",k-1,x2);}//牛顿迭代法//根据初值值x0,在区间[1.0,2.0]上迭代求根//迭代次数由参数precision精度决定void NewTonMethod(double x0,double precision){int k=0; //迭代次数double x1,x2=x0;printf("\n\t k x(k) f(x(k)) |x(k+1)-x(k)|");do{printf("\n\t%2d",k);printf(" %.6f",x2);printf(" %.6f",func(x2));x1=x2;x2=x2-func(x1)/divFunc(x1);if (x2-x1>0)printf(" %.6f",x2-x1); //输出两次迭代的差值else printf(" %.6f",x1-x2);k++;if (k%3==0) //每次输出4个等用户审查getch();} while (x2-x1>precision||x1-x2>precision);printf("\n\t牛顿迭代初值:%lf,次数:%d,所求的根是:%lf",x0,k-1,x2); }//迭代函数g(x)=(sqrt(10-x*x*x))/2;double funcTwo(double x){return (sqrt(10-x*x*x))/2;}//普通迭代函数void ordinaMethod(double x0,double precision){int k=0; //迭代次数double x1,x2=x0;printf("\n\t k x(k) f(x(k)) |x(k+1)-x(k)|");do{printf("\n\t%2d",k);printf(" %.6f",x2);printf(" %.6f",func(x2));x1=x2;x2=funcTwo(x1);if (x2-x1>0)printf(" %.6f",x2-x1); //输出两次迭代的差值else printf(" %.6f",x1-x2);k++;if (k%3==0) //每次输出4个等用户审查getch();} while (x2-x1>precision||x1-x2>precision);printf("\n\t普通迭代初值:%lf,次数:%d,所求的根是:%lf",x0,k-1,x2); }//使用两个跌代值的组合加速跌代//对迭代函数f(x)=(sqrt(10-x*x*x))/2的加速void twoValue(double x0,double precision){int k=0; //迭代次数double x1,x2=x0;printf("\n\t k x(k) f(x(k)) |x(k+1)-x(k)|");do{printf("\n\t%2d",k);printf(" %.6f",x2);printf(" %.6f",func(x2));x1=x2;x2=(funcTwo(x1)+x1)/2;if (x2-x1>0)printf(" %.6f",x2-x1); //输出两次迭代的差值else printf(" %.6f",x1-x2);k++;if (k%3==0) //每次输出4个等用户审查getch();} while (x2-x1>precision||x1-x2>precision);printf("\n\t两点加速迭代初值:%lf,次数:%d,根:%lf",x0,k,x2);}void main(){double orgin=1.5; //初始值double precision=5e-6; //精度char sel=0; //操作符while(1){printf("\n\t选择:");printf("\n\t1.二分法\n\t2.迭代法\n\t");sel=getch();printf("\n\n\t注:程序停止处按任意键继续");if (sel=='1'){printf("\n\n\t ************二分法求解过程***********");biSectionMethod(precision); //测试函数}else{printf("\n\t输入迭代的初值:");scanf("%lf",&orgin);//if (orgin>2.0||orgin<1.0) //限制迭代初值范围,根据情况决定//orgin=1.5; //如果输入非法,则按1.5计算printf("\n\n\t ************牛顿迭代法求解过程************");NewTonMethod(orgin,precision);printf("\n\t任何键继续:");getch();printf("\n\n\t *******普通迭代g(x)=(sqrt(10-x*x*x))/2*****");ordinaMethod(orgin,precision);printf("\n\t任何键继续:");getch();printf("\n\n\t ************两个值组合加速迭代x=(g(x)+x)/2***********");twoValue(orgin,precision);}printf("\n\t任何键继续:");getch();}}五、运行结果1、选择求根方法2、 选择二分法下面给出二分法的结果:3、 选择迭代法查看结果:首先显示的是牛顿迭代法的结果:然后是普通迭代法函数是:213)10(21)(x x -=ϕ,结果如下:接着可以看到的是用两点加速法对函数213)10(21)(x x -=ϕ的加速:下面采用不同的初值查看普通迭代函数的收敛性与效率: 各个结果如下:上图对应的是收敛性:收敛的。

用Matlab编写二分法和Newton迭代法求解非线性函数

用Matlab编写二分法和Newton迭代法求解非线性函数

⽤Matlab编写⼆分法和Newton迭代法求解⾮线性函数1、⼆分法原理:若f的值在C[a, b]中,且f (a) · f (b) < 0,则f在 (a, b) 上必有⼀根。

实现算法流程:2、Newton迭代法迭代公式:⼏何意义:3、求解问题⽤Newton法和⼆分法求的解。

4、代码实现1 clear;close;clc2 a=0;b=1;%根区间3 e=10^(-6);%根的容许误差4 [X , N]=dichotomy(e,a,b);%⼆分法5 p0=0.5;%初始值6 N=15;%迭代次数7 [X1]=Newdon(p0,e,N);%Newton迭代法89 function [X , N]=dichotomy(deta,a,b)10 % 函数dichotomy:⼆分法11 %输⼊值:12 %fun:⽅程函数13 %deta:根的容许误差14 %有根区间:[a,b]15 %输出值16 %X:求解到的⽅程的根17 %N:总的迭代次数18 N=1+fix(log2((b-a)/deta));%由公式7.2求得,取整数|X_N-X*|<=(b-a)/2^N<deta,求N19 n=1;20 f1=myfunction(a);21 f2=myfunction(b);22if (f1*f2>0)23 disp('根不在输⼊的区间⾥,请重新输⼊区间');24else25while n <= N26 x=(a+b)/2;27if myfunction(a)*myfunction(x)>028 a=x;29else30 b=x;31 end32 n=n+1;33 end34 X=x;35 fprintf('第%d次⼆分法求出的⽅程的根:\n',N);36 fprintf('X=\n');37 disp(X);38 end39 end4041 function [P]=Newdon(p0,TOL,N)42 %求⽅程组的解43 %输⼊参数44 %初始值:p045 %误差容限:TOL46 %最⼤迭代次数:N47 %输出参数:48 %⽅程近似解:p49 %或失败信息“Method failed”50 format long;51 n=1;%初始迭代次数52 syms x;53while n<=N54if abs(subs(diff(myfunction(x)),x,p0))<TOL55 P=p0;56break;57else58if subs(diff(myfunction(x),2),x,p0)==059 disp('Method failed');60break;61else62 p=p0-myfunction(p0)/subs(diff(myfunction(x)),x,p0);63 p=eval(p);%将exp的值转为⼩数值64if(abs(p-p0)<TOL)65 P=p;66break;67else68 p0=p;69 end70 end71 end72 n=n+1;73 end74 % P=vpa(P,10);%将分数转为⼩数并保留8位⼩数75 fprintf('第%d次NeWton迭代法求出的⽅程的根:\n',N);76 fprintf('P=\n');77 disp(P);78 end7980 function f=myfunction(x)81 f=x*exp(x)-1;82 end5、求解结果。

MATLAB计算方法迭代法牛顿法二分法实验报告

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

二分法、牛頓迭代法求方程近似解在一些科學計算中常需要較為精確的數值解,本實驗基於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求得的結果精度不夠。

实验1:二分法和迭代法

实验1:二分法和迭代法

Ex=(k+1)( 1-0.99995^k)+ 0.99995^k=k(1-0.99995^k)+1 设 f(k)=Ex/k=1-0.99995^k+1/k 当 f(k)最小时,总共所需的化验次数最少,即 f ’(k*)=0 时,k*所需化验次数最少 f ’(k)=(-0.99995^k)*(ln0.99995)-1/(k^2) f’(100)= -5.0248e-05 f’(200)= 2.4504e-05 利用二分法,程序如下: f=@(k)(-0.99995^k)*(log(0.99995))-1/(k^2); a=100;b=200; tol=1e-12;maxit=100; my_bisection(f,a,b,tol,maxit) 结果为 1.419222563505173e+02 即 k=141 或 142 时,f(k)最小 代入得 f(141)= 0.014117580646837
四、实验结果: (1) 取有根区间为 [3, 4], 利用二分法求得的根为: 3.262983107765649 取迭代初值为 3, 利用迭代法求得的根为: 3.262983107764216(2来自 二分法和迭代法的迭代图像为:
(3) 结论: … …
任课教师:鲍亮
2017 年 3 月 19 日
(2) 迭代法的程序:
function Vx=my_iteration(phi,x0,tol,maxit) Vx=zeros(1,maxit);k=2;Vx(1)=x0; while abs(phi(x0)-x0)>tol&&k<=maxit+1 x0=phi(x0); Vx(k)=x0; k=k+1; if k>3 if abs(Vx(k-1)-Vx(k-2))>abs(Vx(k-2)-Vx(k-3)) '不收敛' break else end else end end Vx=Vx(1:k-1);

数值分析实验五(二分法,牛顿迭代法)

数值分析实验五(二分法,牛顿迭代法)

实验五一、实验目的与要求:1、通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;2、比较二者的计算速度和计算精度。

二、实验内容:通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点。

二分法算法:给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。

(1)令c=(a+b)/2(2)如果(c-a)<或,则输出,结束;否则执行(3)(3)如果,则令;否则则令,重复(1),(2),(3)。

牛顿迭代法算法:给定初值 , 为根的容许误差,为 的容许误差,N 为迭代次数的容许值。

(1)如果 =0或迭代次数大于N ,则算法失败,结束;否则执行(2)。

(2)计算 = - (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。

x 0εη)(x f )('x f x 1x 0)()('0x x o f f x x 01-ε)(1x f ηx 1x0x1(4)令= ,转向(1)。

三、实验题目:1、用二分法求方程f(x)=x^3+4*x*x-10在区间[1,1.5]上的根,要求求出具有3位有效数的近似根。

2、用牛顿法求方程x^3-3x-1=0在x=2附近的根。

四、程序:一、二分法#include<stdio.h>float f(float x){return x*x*x+4*x*x-10;}void main(){float a,b,c;a=1.0;b=1.5;for(;b-a>=0.01;){c=(a+b)/2;if(f(a)*f(c)==0)break;else if(f(a)*f(c)<0)b=c;elsea=c;}printf("方程的近似根为%f\n",c);printf("保留三位有效数字为%0.2f\n",c); }二、牛顿迭代法#include<stdio.h>#include<math.h>float f(float x){return x*x*x-3*x-1;}float g(float x){return 3*x*x-3;}void main(){float x0,x1,a,b,N;int i;i=0;printf("请输入初值X0,根的容许误差,|f(x)|的容许误差,迭代次数的容许值N。

MATL新编计算方法迭代法牛顿法二分法实验报告

MATL新编计算方法迭代法牛顿法二分法实验报告

M A T L新编计算方法迭代法牛顿法二分法实验报告 Prepared on 22 November 2020姓名 实验报告成绩评语:指导教师(签名)年 月 日说明:指导教师评分后,实验报告交院(系)办公室保存。

实验一 方程求根一、 实验目的用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。

并比较方法的优劣。

二、 实验原理(1)、二分法对方程0)(=x f 在[a ,b]内求根。

将所给区间二分,在分点2a b x -=判断是否0)(=x f ;若是,则有根2ab x -=。

否则,继续判断是否0)()(<•x f a f ,若是,则令x b =,否则令x a =。

否则令x a =。

重复此过程直至求出方程0)(=x f 在[a,b]中的近似根为止。

(2)、迭代法将方程0)(=x f 等价变换为x =ψ(x )形式,并建立相应的迭代公式=+1k x ψ(x )。

(3)、牛顿法若已知方程 的一个近似根0x ,则函数在点0x 附近可用一阶泰勒多项式))((')()(0001x x x f x f x p -+=来近似,因此方程0)(=x f 可近似表示为+)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(')(00x f x f 。

取x 作为原方程新的近似根1x ,然后将1x 作为0x 代入上式。

迭代公式为:=+1k x -0x )(')(k k x f x f 。

三、 实验设备:MATLAB 软件四、 结果预测 (1)11x = (2)5x = (3)2x =0,09052五、 实验内容(1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不超过3105.0-⨯。

(2)、取初值00=x ,用迭代公式=+1k x -0x )(')(k k x f x f ,求方程0210=-+x e x 的近似根。

数值分析实验报告三

数值分析实验报告三
plot(x,y)
grid
[k,x,wuca,yx]=erfen (﹣1,1,10^-5)
2)运行结果
ans =
0 -1.0000 1.0000 0 1.0000 -11.6321 10.7183 -1.0000
ans =
1.0000 0 1.0000 0.5000 0.5000 -1.0000 10.7183 4.6487
ans =
11.0000 0.0898 0.0908 0.0903 0.0005 -0.0076 0.0033 -0.0021
ans =
12.0000 0.0903 0.0908 0.0906 0.0002 -0.0021 0.0033 0.0006
ans =
13.0000 0.0903 0.0906 0.0905 0.0001 -0.0021 0.0006 -0.0008
ans =
7.0000 0.1256 0.0008 0.0033 0.0262
ans =
8.0000 0.1240 0.0002 0.0016 0.0129
ans =
9.0000 0.1233 0.0000 0.0007 0.0056
ans =
9.0000 0.1233 0.0000 0.0007 0.0056
(2)、Use the iteration method ,the initial value .
2、The equation has two roots near 0.1.
Determine them by means ofNewton’s method.
(with accuracy )
3、用迭代法求方程 附近的一个根。方程写成下
k = 9

MATLAB数值分析实验四(雅各比、高斯赛德尔迭代,以及二分法和牛顿迭代解非线性方程)

MATLAB数值分析实验四(雅各比、高斯赛德尔迭代,以及二分法和牛顿迭代解非线性方程)

佛山科学技术学院实 验 报 告课程名称 数值分析实验项目 迭代法专业班级 机械工程 姓 名 余红杰 学 号 2111505010指导教师 陈剑 成 绩 日 期 月 日一. 实验目的1、 在计算机上用Jacobi 迭代法和Gauss-Seidel 迭代法求线性方程组 。

2、 在计算机上用二分法和Newton 迭代法求非线性方程 的根。

二. 实验要求1、按照题目要求完成实验内容;2、写出相应的Matlab 程序;3、给出实验结果(可以用表格展示实验结果);4、分析和讨论实验结果并提出可能的优化实验。

5、写出实验报告。

三. 实验步骤1、用Matlab 编写Jacobi 迭代法和Gauss-Seidel 迭代法求线性方程组Ax b =的程序。

2、用Matlab 编写二分法和Newton 法求非线性方程()0f x =的根程序。

3、设⎪⎪⎪⎭⎫ ⎝⎛--=212120203A ,T b )1,3,1(=,对于线性方程组b Ax =,考虑如下问题: (1)分别写出Jacobi 迭代矩阵和Gauss-Seidel 迭代矩阵(2)用Jacobi 迭代法和Gauss-Seidel 迭代法解该方程时,是否收敛?谁收敛的更快?(3)用实验步骤1编好的两种迭代法程序进行实验,通过数值结果验证(2)的结论。

4、用调试好的二分法和Newton 迭代法程序解决如下问题求020sin 35=-+-x x e x 的根,其中控制精度810-=eps ,最大迭代次数50=M 。

四. 实验结果1.%Jacob.mfunction [x,B] = Jacob(A,b,n)%Jacobi迭代求解方程组Ax=b,系数矩阵A,迭代次数n%求解的准备工作,构建各迭代系数阵等:m = length(A);D = diag(diag(A));L = -tril(A,-1);U = -triu(A, 1);J = D^(-1)*(L+U);B = J;f = D^(-1)*b;%初始化x即启动值:x = zeros(m,1);%根据x(k+1)=Jx(k)+f进行矩阵运算:for i=1:nx = J*x + f;end%GauSeid.mfunction [x,G] = GauSeid(A,b,n)%Gauss-Seidel迭代求解方程组Ax=b,系数矩阵A,迭代次数n %求解的准备工作,构建各迭代系数阵等:m = length(A);D = diag(diag(A));L = -tril(A,-1);U = -triu(A, 1);G = inv(D-L)*U;f = inv(D-L)*b;%初始化矩阵:%根据x(k+1)=Gx(k)+f进行矩阵运算:x = zeros(m,1);for i = 1:nx = G*x + f;end2.%Dichotomy.mfunction x=Dichotomy(x1,x2,p,n)%利用二分法求根,区间[x1,x2]%p为精度a = x1;b = x2;%进行n次二分:%第一个条件判断根在a,b区间内%第二个条件判断是否中间点就是根,是则迭代终止;%第三个条件判断二分后根在中点左侧还是右侧;%第四个条件判断精度是否达标,用区间长度代替for i=1:nif f(a)*f(b)<0x0 = (a+b)/2;p0 = (b-a)/(2^i);if f(x0)==0x = x0;elseif f(a)*f(x0)<0b = x0;else a= x0;endendendif p0>pcontinue;elsex = x0;break;endend%NewIterat.mfunction x=NewIterat(x0,p,n)%利用牛顿迭代法求根;%x0为启动点,估计的靠近根的值,p为精度,n为迭代次数;syms x1;%设置一个自变量x1,方便后面的求导:f1 = diff(f(x1));%进行n次迭代,精度达标会提前终止;%第一个判断是根据控制条件来确定真实误差是选绝对还是相对误差;%第二个判断是确定精度是否满足要求for i=1:nx1 = x0;x = x0-f(x0)/eval(f1);if x<1RealDiv = abs(x-x0);else RealDiv = abs(x-x0)/abs(x); endif RealDiv>px0 = x;else break;endend3.run43.mclc,clear;A = [3 0 -2;0 2 1;-2 1 2];b = [1;3;1];n1 = 50;n2 =100;%输入A,b矩阵,设置迭代次数为50次;%调用迭代函数,返回迭代矩阵;[x,B] = Jacob(A,b,n1);xj50 = x;f1 = max(abs(eig(B)))%显示谱半径,确定收敛性;[x,B] = GauSeid(A,b,n1);xg50 = x;f2 = max(abs(eig(B)))%谱半径;xj100 = Jacob(A,b,n2);xg100 = GauSeid(A,b,n2); Jacobi= [xj50,xj100]%对比迭代50次和100次的结果GauSei= [xg50,xg100]%很容易看出准确解为[1;1;1]4.f.mfunction y = f(x)%所有f(x)=0中f(x)函数;y = exp(5*x)-sin(x)+x^3-20; 下页是具体解时的程序:%run44.mclc,clear;%很容易看出在[0,1]间有解;x = Dichotomy(0,1,10^(-8),50)x = NewIterat(0,10^(-8),50)五. 讨论分析4.3实验中的迭代矩阵在上个部分,分别为J 和G ;对于收敛性,看下图中的f1,f2,也就是迭代矩阵的谱半径,都是小于1的,但是可以看出后者的谱半径更小,就是说它的收敛速度更快;最终求x 的值,每种迭代方法分别迭代50次(第一列)和100次(第二列); 实际值为[1;1;1]可以看出用高斯赛德尔迭代更精确,速度更快。

计算方法matlab实验报告

计算方法matlab实验报告

计算方法matlab实验报告计算方法MATLAB实验报告引言:计算方法是一门研究如何用计算机来解决数学问题的学科。

在计算方法的学习过程中,MATLAB作为一种强大的数值计算软件,被广泛应用于科学计算、工程计算、数据分析等领域。

本实验报告将介绍在计算方法课程中使用MATLAB 进行的实验内容和实验结果。

一、二分法求方程根在数值计算中,求解非线性方程是一个常见的问题。

二分法是一种简单而有效的求解非线性方程根的方法。

在MATLAB中,可以通过编写函数和使用循环结构来实现二分法求解方程根。

实验步骤:1. 编写函数f(x),表示待求解的非线性方程。

2. 设定初始区间[a, b],满足f(a) * f(b) < 0。

3. 利用二分法迭代求解方程根,直到满足精度要求或迭代次数达到预设值。

实验结果:通过在MATLAB中编写相应的函数和脚本,我们成功求解了多个非线性方程的根。

例如,对于方程f(x) = x^3 - 2x - 5,我们通过二分法迭代了5次,得到了方程的一个根x ≈ 2.0946。

二、高斯消元法解线性方程组线性方程组的求解是计算方法中的重要内容之一。

高斯消元法是一种常用的求解线性方程组的方法,它通过矩阵变换将线性方程组化为上三角矩阵,从而简化求解过程。

在MATLAB中,可以利用矩阵运算和循环结构来实现高斯消元法。

实验步骤:1. 构建线性方程组的系数矩阵A和常数向量b。

2. 利用高斯消元法将系数矩阵A化为上三角矩阵U,并相应地对常数向量b进行变换。

3. 利用回代法求解上三角矩阵U,得到线性方程组的解向量x。

实验结果:通过在MATLAB中编写相应的函数和脚本,我们成功求解了多个线性方程组。

例如,对于线性方程组:2x + 3y - z = 13x - 2y + 2z = -3-x + y + 3z = 7经过高斯消元法的计算,我们得到了方程组的解x = 1,y = -2,z = 3。

三、数值积分方法数值积分是计算方法中的重要内容之一,它用于计算函数在给定区间上的定积分。

二分法和牛顿迭代法求解方程的比较

二分法和牛顿迭代法求解方程的比较

二分法和牛顿迭代法求解方程的比较200822401018 徐小良一、问题叙述求解12 -3x +2COS X =0的解;通过编写 matlab程序分别用分析二分法和牛顿迭代法求解方程,通过两种方法的比较,分析二者求解方程的快慢程度。

二、问题分析由matlab画图命令,容易得到此方程解的范围为(2,4);两种迭代方法,在使用相同的误差(0.00001 )的情况下,得出 matlab迭代次数,通过次数的比较得出二者求解速度快慢比较。

三、实验程序及注释(1)、二分法程序:clear;f=inlin e('12-3*x+2*cos(x)'); format long%清除所有内存数据;%数据显示格式设为长型;a=2;b=4;er=b-a;ya=f(a);k=0;er0=0.00001; while er>er0x0=.5*(a+b); y0=f(x0);if ya*y0<0b=x0;elsea=x0;ya=y0;enddis p([a,b]);er=b-a;k=k+1%求解区间;%误差分析;%二分法求解程序;%显示各个区间值和求解次数;enddis %显示最后一个区间值;(2)、牛顿迭代法程序:clear;f=inlin e('12-3*x+2*cos(x)'); %清除所有内存数据;%数据显示格式设为长型;b=3;a=4;k=0;y0=f(b);y=f(a);while abs(b-a)>0.00001 t=a-y*(a-b)/(y-y0); b=a;y0=y;%求解区间;、%牛顿迭代法求解程序;四、实验数据结果及分析五、实验结论通过表1可知,在二分法下,程序迭代了 17次后和第18次的结果一致,即程序迭代了 17次达到要求的试验误差;通过表 2可知,在牛顿迭代法下,程序迭代了 4次后和第5次的结果一致,即程序迭代了 4次达到要求的试验误差;二者比较明显可以看出牛顿迭代法的求解效率要远远优于二分法。

matlab实验十七__牛顿迭代法

matlab实验十七__牛顿迭代法

实验十七牛顿迭代法【实验目的】1.了解牛顿迭代法的基本概念。

2.了解牛顿迭代法的收敛性和收敛速度。

3.学习、掌握MATLAB软件的有关命令。

【实验内容】用牛顿迭代法求方程3210x x x10-。

++-=的近似根,误差不超过3【实验准备】1.牛顿迭代法原理2.牛顿迭代法的几何解析3.牛顿迭代法的收敛性4.牛顿迭代法的收敛速度5.迭代过程的加速6.迭代的MATLAB命令MATLAB中主要用for,while等控制流命令实现迭代。

【实验重点】1.牛顿迭代法的算法实现2.牛顿迭代法收敛性和收敛速度【实验难点】1.牛顿迭代法收敛性和收敛速度【实验方法与步骤】练习1用牛顿迭代法求方程3210++-=在x=0.5附近的近似x x x根,误差不超过310-。

牛顿迭代法的迭代函数为322()1()()321f x x x xg x x x f x x x ++-=-=-'++ 相应的MATLAB 代码为>>clear;>>x=0.5;>>for i=1:3>>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1)>>end可算的迭代数列的前3项0.5455,0.5437,0.5437。

经三次迭代,就大大超过了精度要求。

练习2 用牛顿迭代法求方程2(0)x a a =>的近似正实根,由此建立一种求平方根的计算方法。

由计算可知,迭代格式为1()()2a g x x x =+,在实验12的练习4中已经进行了讨论。

【练习与思考】1.用牛顿迭代法求方程ln 1x x =的近似根。

2.为求出方程310x x --=的根,在区间[1,2]内使用迭代函数进行迭代,纪录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果。

3.使用在不动点*x 的泰勒公式,证明牛顿迭代法收敛原理。

数值分析上机实验报告

数值分析上机实验报告

一、实验目的通过本次上机实验,掌握数值分析中常用的算法,如二分法、牛顿法、不动点迭代法、弦截法等,并能够运用这些算法解决实际问题。

同时,提高编程能力,加深对数值分析理论知识的理解。

二、实验环境1. 操作系统:Windows 102. 编程语言:MATLAB3. 实验工具:MATLAB数值分析工具箱三、实验内容1. 二分法求方程根二分法是一种常用的求方程根的方法,适用于连续函数。

其基本思想是:从区间[a, b]中选取中点c,判断f(c)的符号,若f(c)与f(a)同号,则新的区间为[a, c],否则为[c, b]。

重复此过程,直至满足精度要求。

2. 牛顿法求方程根牛顿法是一种迭代法,适用于可导函数。

其基本思想是:利用函数在某点的导数值,求出函数在该点的切线方程,切线与x轴的交点即为方程的近似根。

3. 不动点迭代法求方程根不动点迭代法是一种迭代法,适用于具有不动点的函数。

其基本思想是:从初始值x0开始,不断迭代函数g(x)的值,直至满足精度要求。

4. 弦截法求方程根弦截法是一种线性近似方法,适用于可导函数。

其基本思想是:利用两点间的直线近似代替曲线,求出直线与x轴的交点作为方程的近似根。

四、实验步骤1. 二分法求方程根(1)编写二分法函数:function [root, error] = bisection(a, b, tol)(2)输入初始区间[a, b]和精度要求tol(3)调用函数计算根:[root, error] = bisection(a, b, tol)2. 牛顿法求方程根(1)编写牛顿法函数:function [root, error] = newton(f, df, x0, tol)(2)输入函数f、导数df、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = newton(f, df, x0, tol)3. 不动点迭代法求方程根(1)编写不动点迭代法函数:function [root, error] = fixed_point(g, x0, tol)(2)输入函数g、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = fixed_point(g, x0, tol)4. 弦截法求方程根(1)编写弦截法函数:function [root, error] = secant(f, x0, x1, tol)(2)输入函数f、初始值x0和x1,以及精度要求tol(3)调用函数计算根:[root, error] = secant(f, x0, x1, tol)五、实验结果与分析1. 二分法求方程根以方程f(x) = x^2 - 2 = 0为例,输入初始区间[a, b]为[1, 3],精度要求tol 为1e-6。

MATLAB计算方法迭代法牛顿法二分法实验报告

MATLAB计算方法迭代法牛顿法二分法实验报告

MATLAB计算方法迭代法牛顿法二分法实验报告实验目的:本实验旨在通过MATLAB编程实现迭代法、牛顿法和二分法,并通过实例验证其准确性和收敛速度。

实验原理:迭代法是一种通过不断迭代逼近根的方法,其基本原理是选择一个初始值,然后通过迭代公式不断逼近根的值,直到满足给定的精度要求。

牛顿法是一种通过不断迭代求函数的零点的方法,其基本原理是通过当前点的切线与x轴的交点来逼近根的值,直到满足给定的精度要求。

二分法是一种通过不断将区间一分为二来逼近根的方法,其基本原理是通过判断根是否落在区间的两个端点之间,然后将区间一分为二,直到满足给定的精度要求。

实验步骤:1.编写迭代法的MATLAB代码,实现对给定函数的根的逼近。

2.编写牛顿法的MATLAB代码,实现对给定函数的根的逼近。

3.编写二分法的MATLAB代码,实现对给定函数的根的逼近。

4.针对不同的函数,分别使用迭代法、牛顿法和二分法进行根的逼近,并记录每种方法的迭代次数和逼近结果。

5.对比三种方法的迭代次数和逼近结果,分析其准确性和收敛速度。

实验结果:以求解方程x^3-2x-5=0为例,使用迭代法、牛顿法和二分法进行根的逼近。

迭代法:迭代公式:x(n+1)=(2x(n)+5)^(1/3)初始值:x(0)=2迭代次数:6逼近结果:2.0946牛顿法:初始值:x(0)=2迭代次数:4逼近结果:2.0946二分法:初始区间:[1,3]迭代次数:11逼近结果:2.0946实验结论:通过对比三种方法的迭代次数和逼近结果可以发现,迭代法和牛顿法的收敛速度都要快于二分法,并且迭代法和牛顿法的逼近结果也更为接近真实根。

这是因为迭代法和牛顿法都是通过不断逼近根的值来求解,而二分法则是通过将区间一分为二来逼近根的值,所以迭代法和牛顿法的收敛速度更快。

总结:本实验通过MATLAB编程实现了迭代法、牛顿法和二分法,并通过实例验证了它们的准确性和收敛速度。

实验结果表明,迭代法和牛顿法在求解根的过程中具有更快的收敛速度和更接近真实根的逼近结果,而二分法的收敛速度较慢。

MAAB计算方法迭代法牛顿法二分法实验报告

MAAB计算方法迭代法牛顿法二分法实验报告

姓名 实验报告成绩评语:指导教师(签名) 年 月 日 说明:指导教师评分后,实验报告交院(系)办公室保存。

实验一 方程求根一、 实验目的用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。

并比较方法的优劣。

二、 实验原理(1)、二分法对方程0)(=x f 在[a ,b]内求根。

将所给区间二分,在分点2a b x -=判断是否0)(=x f ;若是,则有根2ab x -=。

否则,继续判断是否0)()(<•x f a f ,若是,则令x b =,否则令x a =。

否则令x a =。

重复此过程直至求出方程0)(=x f 在[a,b]中的近似根为止。

(2)、迭代法将方程0)(=x f 等价变换为x =ψ(x )形式,并建立相应的迭代公式=+1k x ψ(x )。

(3)、牛顿法若已知方程 的一个近似根0x ,则函数在点0x 附近可用一阶泰勒多项式))((')()(0001x x x f x f x p -+=来近似,因此方程0)(=x f 可近似表示为+)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(')(00x f x f 。

取x 作为原方程新的近似根1x ,然后将1x 作为0x 代入上式。

迭代公式为:=+1k x -0x )(')(k k x f x f 。

三、 实验设备:MATLAB 7.0软件四、 结果预测 (1)11x =0.09033 (2)5x =0.09052 (3)2x =0,09052五、 实验内容(1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不超过3105.0-⨯。

(2)、取初值00=x ,用迭代公式=+1k x -0x )(')(k k x f x f ,求方程0210=-+x e x 的近似根。

要求误差不超过3105.0-⨯。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

姓名实验报告成绩
评语:
指导教师(签名)
年月日
说明:指导教师评分后,实验报告交院(系)办公室保存。

实验一 方程求根
一、 实验目的
用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。

并比较方法的优劣。

二、 实验原理 (1)、二分法
对方程0)(=x f 在[a ,b]内求根。

将所给区间二分,在分点2a b x -=

断是否0)(=x f ;若是,则有根
2a b x -=。

否则,继续判断是否0)()(<•x f a f ,
若是,则令x b =,否则令x a =。

否则令x a =。

重复此过程直至求出方程
0)(=x f 在[a,b]中的近似根为止。

(2)、迭代法
将方程0)(=x f 等价变换为x =ψ(x )形式,并建立相应的迭代公式
=
+1k x ψ(x )。

(3)、牛顿法
若已知方程 的一个近似根0x ,则函数在点0x 附近可用一阶泰勒多项式))((')()(0001x x x f x f x p -+=来近似,因此方程0)(=x f 可近似表示为
+)(0x f 0
))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(')
(00x f x f 。

取x 作为原方程新的近
似根1x ,然后将1x 作为0x 代入上式。

迭代公式为:=+1k x -0x )
(')
(k k x f x f 。

三、 实验设备:MATLAB 7.0软件 四、 结果预测
(1)11x =0.09033 (2)5x =0.09052 (3)2x =0,09052 五、 实验内容
(1)、在区间[0,1]上用二分法求方程0210=-+x e x
的近似根,要求误差不
超过
3
105.0-⨯。

(2)、取初值00=x ,用迭代公式=+1k x -0x )
(')
(k k x f x f ,求方程0210=-+x e x 的
近似根。

要求误差不超过
3
105.0-⨯。

(3)、取初值00=x ,用牛顿迭代法求方程0210=-+x e x 的近似根。

要求误
差不超过
3
105.0-⨯。

六、 实验步骤与实验程序 (1) 二分法
第一步:在MATLAB 7.0软件,建立一个实现二分法的MATLAB 函数文件agui_bisect.m 如下:
function x=agui_bisect(fname,a,b,e) %fname 为函数名,a,b 为区间端点,e 为精度 fa=feval(fname,a); %把a 端点代入函数,求fa fb=feval(fname,b); %把b 端点代入函数,求fb if fa*fb>0 error('两端函数值为同号'); end
%如果fa*fb>0,则输出两端函数值为同号 k=0 x=(a+b)/2
while(b-a)>(2*e) %循环条件的限制
fx=feval(fname,x);%把x代入代入函数,求fx
if fa*fx<0%如果fa与fx同号,则把x赋给b,把fx赋给fb
b=x;
fb=fx;
else
%如果fa与fx异号,则把x赋给a,把fx赋给fa
a=x;
fa=fx;
end
k=k+1
%计算二分了多少次
x=(a+b)/2 %当满足了一定精度后,跳出循环,每次二分,都得新的区间断点a和b,则近似解为x=(a+b)/2
end
第二步:在MATLAB命令窗口求解方程f(x)=e^x+10x-2=0,即输入如下>>fun=inline('exp(x)+10*x-2')
>> x=agui_bisect(fun,0,1,0.5*10^-3)
第三步:得到计算结果,且计算结果为
(2)迭代法
第一步:第一步:在MATLAB 7.0软件,建立一个实现迭代法的MATLAB 函数文件agui_main.m如下:
function x=agui_main(fname,x0,e)
%fname为函数名dfname的函数fname的导数, x0为迭代初值
%e为精度,N为最大迭代次数(默认为100)
N=100;
x=x0; %把x0赋给x,再算x+2*e赋给x0
x0=x+2*e;
k=0;
while abs(x0-x)>e&k<N %循环条件的控制:x0-x的绝对值大于某一精度,和迭代次数小于N
k=k+1 %显示迭代的第几次
x0=x;
x=(2-exp(x0))/10 %迭代公式
disp(x)%显示x
end
if k==N warning('已达到最大迭代次数');end %如果K=N则输出已达到最大迭代次数
第二步:在MATLAB命令窗口求解方程f(x)=e^x+10x-2=0,即输入如下>>fun=inline('exp(x)+10*x-2')
>> x=agui_main(fun,0,1,0.5*10^-3)
第三步:得出计算结果,且计算结果为
以下是结果的屏幕截图
(3)牛顿迭代法
第一步:第一步:在MATLAB 7.0软件,建立一个实现牛顿迭代法的MATLAB函数文件=agui_newton.m如下:
function x=agui_newton(fname,dfname,x0,e)
%fname为函数名dfname的函数fname的导数, x0为迭代初值
%e为精度,N为最大迭代次数(默认为100)
N=100;
x=x0; %把x0赋给x,再算x+2*e赋给x0
x0=x+2*e;
k=0;
while abs(x0-x)>e&k<N %循环条件的控制:x0-x的绝对值大于某一精度,和迭代次数小于N
k=k+1 %显示迭代的第几次
x0=x;
x=x0-feval(fname,x0)/feval(dfname,x0);%牛顿迭代公式
disp(x)%显示x
end
if k==N warning('已达到最大迭代次数');end %如果K=N则输出已达到最大迭代次数
第二步:在MATLAB命令窗口求解方程f(x)=e^x+10x-2=0,即输入如下>>fun=inline('exp(x)+10*x-2')
>> dfun=inline('exp(x)+10')
>> x=agui_newton(fun,dfun,0,0.5*10^-3)
第三步:得出结果,且结果为
2 0.09052510858339
3 0.09052510858339
以下是结果的屏幕截图
七、实验结果
(1)11x=0.09033 (2)5x=0.09052 (3)2x=0,09052
八、实验分析与结论
由上面的对二分法、迭代法、牛顿法三种方法的三次实验结果,我们可以得出这样的结论:二分法要循环k=11次,迭代法要迭代k=5次,牛
顿法要迭代k=2次才能达到精度为3105.0-⨯的要求,而且方程0
210=-+x e x 的精确解经计算,为0.0905250, 计算量从大到小依次是:二分法,迭代法,牛顿法。

由此可知,牛顿法和迭代法的精确度要优越于二分法。

而这三种方法中,牛顿法不仅计算量少,而且精确度高。

从而可知牛顿迭代法收敛速度明显加快。

可是迭代法是局部收敛的,其收敛性与初值x0有关。

二分法收敛虽然是速度最慢,但也有自己的优势,可常用于求精度不高的近似根。

迭代法是逐次逼近的方法,原理简单,但存在收敛性和收敛速度的问题。

对与不同的题目,可以从三种方法的优缺点考虑用哪一种方法比较好。

相关文档
最新文档