MATLAB计算方法迭代法牛顿法二分法实验报告.docx
《MATLAB计算方法迭代法牛顿法二分法实验报告.docx》由会员分享,可在线阅读,更多相关《MATLAB计算方法迭代法牛顿法二分法实验报告.docx(6页珍藏版)》请在冰豆网上搜索。
![MATLAB计算方法迭代法牛顿法二分法实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/7/eaa5c273-9b39-46e9-ae88-5b2fd5e3d93e/eaa5c273-9b39-46e9-ae88-5b2fd5e3d93e1.gif)
MATLAB计算方法迭代法牛顿法二分法实验报告
姓名实验报告成绩
评语:
指导教师(签名)
说明:
指导教师评分后,实验报告交院(系)办公室保存
实验一方程求根
一、实验目的
用各种方法求任意实函数方程f(x)0在自变量区间[a,b]上,或某一点附近的实根。
并比较方法的优劣。
二、实验原理
(1)、二分法
ba
x
对方程f(x)0在[a,b]内求根。
将所给区间二分,在分点2判
ba
x
断是否f(x)0;若是,贝y有根2。
否则,继续判断是否f(a)?
f(x)0,
若是,则令bx,否则令ax。
否则令ax。
重复此过程直至求出方程f(x)0在[a,b]中的近似根为止。
(2)、迭代法
将方程f(x)0等价变换为x=®(x)形式,并建立相应的迭代公式xk1Jx)。
(3)、牛顿法
若已知方程的一个近似根X。
,则函数在点X。
附近可用一阶泰勒多项
式pi(x)f(X0)f'(X0)(XX0)来近似,因此方程f(x)0可近似表示为f(X0)
f(X0)f'(X0)(XX)0设f'(X0)0,则xX0f'(X0)。
取x作为原方程新的近
f(Xk)
似根X1,然后将X1作为X0代入上式。
迭代公式为:
Xk1X0f'(Xk)。
三、实验设备:
MATLAB7.0软件
四、结果预测
(1)心=0.09033
(2)x5=o.o9O52(3)x2=0,09052
五、实验内容
(1)、在区间[0,1]上用二分法求方程ex10x20的近似根,要求误差不
六、实验步骤与实验程序
(1)二分法
第一步:
在MATLAB7.0软件,建立一个实现二分法的MATLAB函数文
件agui_bisect.m女口下:
functionx=agui_bisect(fname,a,b,e)
%fname为函数名,a,b为区间端点,e为精度
fa=feval(fname,a);%把a端点代入函数,求fa
fb=feval(fname,b);%把b端点代入函数,求fb
iffa*fb>0error('两端函数值为同号');
end
%如果fa*fb>0,则输出两端函数值为同号k=0x=(a+b)/2
while(b-a)>(2*e)%循环条件的限制
fx二feval(fname,x);%把x代入代入函数,求fx
iffa*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)=eAx+10x-2=0,即输入如下
>>fun=inline('exp(x)+10*x-2')
>>x=agui_bisect(fu门,0,1,0.5*10八-3)
第三步:
得到计算结果,且计算结果为
k
x
0
0.50000000000000
1
0.25000000000000
2
0.12500000000000
3
0.06250000000000
4
.0937********
5
0.07812500000000
6
.0859********
7
.0898********
8
.0917********
9
.0908********
10
.0903********
11
.0903********
(2)迭代法
第一步:
第一步:
在MATLAB7.0软件,建立一个实现迭代法的MATLAB函数文件agui_main.m如下:
functionx=agui_main(fname,x0,e)
%fname为函数名dfname的函数fname的导数,x0为迭代初值
%点为精度,N为最大迭代次数(默认为100)
N=100;
x=x0;%把x0赋给x,再算x+2*e赋给x0
x0=x+2*e;
k=0;
whileabs(x0-x)>e&kx0-x的绝对值大于某一精度,和迭代次数小于N
k=k+1%显示迭代的第几次
x0=x;
x=(2-exp(x0))/10%迭代公式
disp(x)%显示x
end
ifk==Nwarning('已达到最大迭代次数');end%如果K=N则输出已达到
最大迭代次数
第二步:
在MATLAB^令窗口求解方程f(x)=eAx+10x-2=0,即输入如下
>>fun=inline('exp(x)+10*x-2')
>>x=agui_main(fun,0,1,0.5*10八-3)
第三步:
得出计算结果,且计算结果为
k
x
1
0.10000000000000
2
0.08948290819244
3
.0906********
4
0.09051261667437
5
0.09051261667437
以下是结果的屏幕截图
(3)牛顿迭代法
第一步:
第一步:
在MATLAB7.0软件,建立一个实现牛顿迭代法的
MATLAB函数文件二agui_newton.m如下:
functionx=agui_newton(fname,dfname,x0,e)
%fname为函数名dfname的函数fname的导数,x0为迭代初值
%点为精度,N为最大迭代次数(默认为100)
N=100;
x=x0;%把x0赋给x,再算x+2*e赋给x0
x0=x+2*e;
k=0;
whileabs(xO-x)>e&kx0-x的绝对值大于某一精度,
和迭代次数小于N
k=k+1%显示迭代的第几次
x0=x;
x=xO-feval(fname,xO)/feval(dfname,xO);%牛顿迭代公式
disp(x)%显示x
end
ifk==Nwarning('已达到最大迭代次数');end%如果K=N则输出已达到
最大迭代次数
第二步:
在MATLAB^令窗口求解方程f(x)=eAx+10x-2=0,即输入如下
>>fun=inline('exp(x)+10*x-2')
>>dfun=inline('exp(x)+10')
>>x=agui_newton(fun,dfu门,0,0.5*10八-3)
第三步:
得出结果,且结果为
k
x
1
.0909********
2
0.09052510858339
3
0.09052510858339
以下是结果的屏幕截图
七、实验结果
(1)x11=0.09033
(2)x5=0.09052(3)x2=0,09052
八、实验分析与结论由上面的对二分法、迭代法、牛顿法三种方法的三次实验结果,我们可以得出这样的结论:
二分法要循环k=11次,迭代法要迭代k=5次,牛顿法要迭代k=2次才能达到精度为0.5103的要求,而且方程ex10x20的精确解经计算,为0.0905250,计算量从大到小依次是:
二分法,迭代法,牛顿法。
由此可知,牛顿法和迭代法的精确度要优越于二分法。
而这三种方法中,牛顿法不仅计算量少,而且精确度高。
从而可知牛顿迭代法收敛速度明显加快。
可是迭代法是局部收敛的,其收敛性与初值x0有关。
二分法收敛虽然是速度最慢,但也有自己的优势,可常用于求精度不高的近似根。
迭代法是逐次逼近的方法,原理简单,但存在收敛性和收敛速度的问题。
对与不同的题目,可以从三种方法的优缺点考虑用哪一种方法比较好。