MA AB计算方法迭代法牛顿法二分法实验报告
- 格式:docx
- 大小:52.62 KB
- 文档页数:7
MAAB计算方法迭代法牛顿法二分法实验报告实验目的:比较MAAB计算方法中迭代法、牛顿法和二分法的优缺点,探究它们在求解方程中的应用效果。
实验原理:1、迭代法:将方程转化为x=f(x)的形式,通过不断迭代逼近方程的根。
2、牛顿法:利用函数在特定点的切线逼近根的位置,通过不断迭代找到方程的根。
3、二分法:利用函数值在区间两端的异号性质,通过不断二分缩小区间,最终逼近方程的根。
实验步骤:1、选择一元方程进行求解,并根据方程选择不同的计算方法。
2、在迭代法中,根据给定的初始值和迭代公式,进行迭代计算,直到满足预设的迭代精度要求。
3、在牛顿法中,选择初始点,并根据切线方程进行迭代计算,直到满足预设的迭代精度要求。
4、在二分法中,选择区间,并根据函数值的异号性质进行二分,直到满足预设的迭代精度要求。
5、根据计算结果,比较三种方法的求解效果,包括迭代次数、计算时间、求解精度等指标。
实验结果与分析:通过对多个方程进行测试,得到了以下实验结果:1、迭代法的优点是简单易懂,适用范围广,但当迭代公式不收敛时会导致计算结果不准确。
2、牛顿法的优点是收敛速度较快,但需要计算函数的一阶导数和二阶导数,对于复杂函数较难求解。
3、二分法的优点是收敛性较好,不需要导数信息,但收敛速度较慢。
4、对于线性方程和非线性方程的求解,牛顿法和迭代法通常比二分法更快速收敛。
5、对于多重根的方程,二分法没有明显优势,而牛顿法和迭代法能更好地逼近根的位置。
6、在不同的方程和初值选择下,三种方法的迭代次数和求解精度略有差异。
7、在时间效率方面,二分法在收敛速度较慢的同时,迭代次数较少,牛顿法在收敛速度较快的同时,迭代次数较多,而迭代法对于不同方程有较好的平衡。
结论:1、对于不同类型的方程求解,可以根据具体情况选择合适的计算方法。
2、迭代法、牛顿法和二分法各有优缺点,没有绝对的最优方法,需要权衡各种因素选择最适合的方法。
3、在实际应用中,可以根据方程的特点和精度要求综合考虑不同方法的优劣势,以获得较好的求解效果。
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 給出常用的兩種解法。
本實驗是以解決一個方程解的問題說明兩種方法的精髓的。
具體之求解方程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求得的結果精度不夠。
数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))本科生实验报告实验课程数值计算方法学院名称信息科学与技术学院专业名称计算机科学与技术学生姓名学生学号指导教师实验地点实验成绩二〇一六年五月二〇一六年五月实验一非线性方程求根1.1问题描述实验目的:掌握非线性方程求根的基本步骤及方法,。
实验内容:试分别用二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法),求x5-3x3+x-1= 0 在区间[-8,8]上的全部实根,误差限为10-6。
要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较,第2章算法思想2.1二分法思想:在函数的单调有根区间内,将有根区间不断的二分,寻找方程的解。
步骤: 1.取中点mid=(x0+x1)/22.若f(mid)=0,则mid为方程的根,否则比较与两端的符号,若与f(x0)异号,则根在[x0,mid]之间,否则在[mid,x1]之间。
3并重复上述步骤,直达达到精度要求,则mid为方程的近似解。
开始读入a,b,emid=(a+b)/2F(a)*f(b)<0|a-b|<e?< p="">a=midb=mid结束是输出midyesno2.2 简单迭代法思想:迭代法是一种逐次逼近的方法,它是固定公式反复校正跟的近似值,使之逐步精确,最后得到精度要求的结果。
步骤:1.构造迭代公式f(x),迭代公式必须是收敛的。
2.计算x1,x1=f(x0).3.判断|x1-x0|是否满足精度要求,如不满足则重复上述步骤。
4.输出x1,即为方程的近似解。
开始输入x0,eX1=f(x0)|x1-x0|<e< p="">X1=x0;输出x1结束Noyesf为迭代函数2.3 Newton迭代法思想:设r是的根,选取作为r的初始近似值,过点做曲线的切线L,L的方程为,求出L与x轴交点的横坐标,称x1为r的一次近似值。
matlab 实验报告Matlab 实验报告引言:Matlab(Matrix Laboratory)是一种强大的科学计算软件,它为科学家、工程师和研究人员提供了一个强大的计算环境。
本实验报告旨在介绍我对Matlab的实验结果和使用体验,以及对其优点和局限性的思考。
一、Matlab的基本功能和特点Matlab是一种高级编程语言和开发环境,它具有广泛的数学和工程计算功能。
通过Matlab,我可以进行矩阵运算、数值计算、数据可视化、算法开发等一系列操作。
Matlab的语法简洁易懂,可以快速实现复杂的计算任务。
此外,Matlab还提供了大量的工具箱,如信号处理、控制系统、图像处理等,使得各种领域的科学研究和工程应用变得更加便捷。
二、实验结果与应用案例在本次实验中,我选择了一个经典的数值计算问题——求解非线性方程。
通过Matlab的数值计算能力,我可以使用不同的迭代方法来求解方程的根。
在实验中,我使用了牛顿迭代法、二分法和割线法来求解方程。
通过对比这些方法的收敛速度和精度,我得出了不同方法的优缺点。
在实际应用中,Matlab可以广泛应用于信号处理、图像处理、数据分析等领域。
例如,在信号处理中,我可以使用Matlab的信号处理工具箱来进行滤波、频谱分析等操作。
在图像处理中,我可以利用Matlab的图像处理工具箱进行图像增强、边缘检测等操作。
这些应用案例充分展示了Matlab在科学计算和工程应用中的重要性和灵活性。
三、Matlab的优点1. 强大的计算功能:Matlab提供了丰富的数学和工程计算函数,可以高效地进行复杂的计算任务。
2. 简洁的语法:Matlab的语法简洁易懂,使得编程变得更加高效和便捷。
3. 丰富的工具箱:Matlab提供了大量的工具箱,覆盖了各种领域的科学计算和工程应用需求。
4. 可视化能力强:Matlab提供了丰富的绘图函数,可以直观地展示数据和计算结果。
四、Matlab的局限性1. 高昂的价格:Matlab是一款商业软件,其价格较高,对于个人用户而言可能不太容易承受。
实验五一、实验目的与要求: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。
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 的近似根。
姓名 实验报告成绩
评语:
指导教师(签名) 年 月 日 说明:指导教师评分后,实验报告交院(系)办公室保存。
实验一 方程求根
一、 实验目的
用各种方法求任意实函数方程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 代入上式。
迭代公式为:=+1
k 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 ,用迭代公式=+1
k x -0x )(')
(k k x f x f ,求方程0210=-+x e x 的近似根。
要求误差不超过3105.0-⨯。
(3)、取初值00=x ,用牛顿迭代法求方程0210=-+x e x 的近似根。
要求误差
不超过3105.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)
第三步:得出结果,且结果为
以下是结果的屏幕截图
七、 实验结果
(1)11x =0.09033 (2)5x =0.09052 (3)2x =0,09052
八、 实验分析与结论
由上面的对二分法、迭代法、牛顿法三种方法的三次实验结果,我们可以得出这样的结论:二分法要循环k=11次,迭代法要迭代k=5次,牛顿法
要迭代k=2次才能达到精度为3105.0-⨯的要求,而且方程0210=-+x e x 的精确解经计算,为0.0905250, 计算量从大到小依次是:二分法,迭代法,牛顿法。
由此可知,牛顿法和迭代法的精确度要优越于二分法。
而这三种方法中,牛顿法不仅计算量少,而且精确度高。
从而可知牛顿迭代法收敛速度明显加快。
可是迭代法是局部收敛的,其收敛性与初值x0有关。
二分法收敛虽然是速度最慢,但也有自己的优势,可常用于求精度不高的近似根。
迭代法是逐次逼近的方法,原理简单,但存在收敛性和收敛速度的问题。
对与不同的题目,可以从三种方法的优缺点考虑用哪一种方法比较好。