初值的选取对迭代法的影响实验报告
- 格式:doc
- 大小:89.50 KB
- 文档页数:4
初值的选取对迭代法的影响
实验目的:通过具体的数值实验,体会选取不同的初值对同一迭代法
的影响。
实验内容:用牛顿迭代法求方程013xx在x=1.5附近的根。
实验要求:
(1)对牛顿迭代公式: 131231kkkkkxxxxx,编写程序进行实验,分
别取00x,5.10x迭代10次,观察比较其计算值,并分析原因。
(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)
的结果进行比较。
试验过程:
①首先保存牛顿切线法的MATLAB程序为M文件,命名为
newtonqx.m.
function
[k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax)
x(1)=x0;
for i=1: gxmax
x(i+1)=x(i)-fnq(x(i))/(dfnq(x(i))+eps);
piancha=abs(x(i+1)-x(i));
xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1;
xk=x(i);yk=fnq(x(i)); [(i-1) xk yk piancha xdpiancha]
if (abs(yk)
return;
end
end
if i>gxmax
disp('请注意:迭代次数超过给定的最大值gxmax。')
k=i-1; xk=x(i);[(i-1) xk yk piancha xdpiancha]
return;
end
[(i-1),xk,yk,piancha,xdpiancha]';
②建立名为fnq.m的M文件
function y=fnq(x)
y=x^3-x-1;
③建立名为dfnq.m的M文件
function y=dfnq(x)
y=3*x^2-1;
a.当初始值取00x时,迭代次数为10,要求精度为310,在MATLAB
工作窗口输入程序为
[k,xk,yk,piancha,xdpiancha]=newtonqx(0,1e-3,1e-3,10)
运行后输出结果如表1-1
表1-1
k
kx k
y
1kkxx 1/kkkxxx
1.0000 -1.0000 -1.0000 1.0000 1.0000
2.0000 -0.5000 -0.6250 0.5000 1.0000
3.0000 -3.0000 -25.0000 2.5000 0.8333
4.0000 -2.0385 -7.4320 0.9615 0.4717
5.0000 -1.3903 -2.2970 0.6482 0.4662
6.0000 -0.9116 -0.8460 0.4787 0.5251
7.0000 -0.3450 -0.6960 0.5666 1.6421
8.0000 -1.4278 -2.4827 1.0827 0.7583
9.0000 -0.9424 -0.8946 0.4853 0.5150
10.0000 -0.4049 -0.6615 0.5375 1.3272
由以上可知初始值取00x时,迭代次数为10时,迭代次数超过给定
的最大值gxmax。根的近似值xk=-0.4049,函数值yk=-0.6615,偏差
piancha=0.5375和相对偏差xdpiancha=1.3272。
b.当初始值01.5x,迭代次数为10,要求精度为310,在MATLAB
工作窗口输入程序为
[k,xk,yk,piancha,xdpiancha]=newtonqx(1.5,1e-3,1e-3,10)
运行后输出结果如表1-1
表1-2
k
kx k
y
1kkxx 1/kkkxxx
1.0000 1.3478 0.1007 0.1522 0.1129
2.0000 1.3252 0.0021 0.0226 0.0171
3.0000 1.3247 0.0000 0.0005 0.0004
由以上可知初始值取01.5x时,迭代次数为10时,迭代次数k=3。根
的近似值xk= 1.3247,函数值yk= 9.2438e-007,偏差piancha=
4.8222e-004和相对偏差xdpiancha=3.6402e-004。
c.用solve函数直接计算方程013xx的所有根,在MATLAB工作窗
口输入程序
solve('x^3-x-1');roots([1 -1 -1])
运行后输出结果为
ans=-0.6180
1.6180
实验结果分析:
比较初始值分别为0x=0和1.5的两组结果,在0x=0处迭代10次,
迭代次数超过给定的最大值gxmax,得到根的近似值xk=-0.4049,函
数值yk=-0.6615。在0=1.5x处迭代3次就得到根的近似值,根的近似
值xk= 1.3247,函数值yk= 9.2438e-007。由此可见牛顿迭代法在初始
值接近于近似根处的迭代速度要比远离近似根初始值的迭代速度快
很多,而且近似值和函数近似值要精确很多,所以在进行牛顿迭代法
进行根的近似求解时,初始值的选择非常重要。
用MATLAB内部函数solve直接求出方程的所有根,得到
ans=-0.6180和1.6180,与(1)的结果进行比较时可以发现其两个根
分别和初始值和近似根差别很大时和接近近似根的两个值相差不大。
虽然用MATLAB内部函数solve直接求出方程的根的方法比较快,但是
其计算结果和用迭代法求方程的根的方法相比存在一定的误差,即没
有迭代法求解方程时精确值高。