非线性方程求根

  • 格式:doc
  • 大小:349.00 KB
  • 文档页数:7

实验七 非线性方程求根
实验7.1(迭代法、初始值与收敛性)
实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨
迭代法及初始值与迭代收敛性的关系。
问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况
一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收
敛速度。
实验内容:考虑一个简单的代数方程

012xx
针对上述方程,可以构造多种迭代法,如
)1.7(121nnxx

)2.7(111nnxx

)3.7(11nnxx
在实轴上取初始值x0,请分别用迭代(7.1)-(7.3)作实验,记录各算法
的迭代过程。
实验要求:
(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性
如何?重复选取不同的初始值,反复实验。请自选设计一种比较形象的记录方式
(如利用MATLAB的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分
析迭代法对不同的初值是否有差异?
(3)线性方程组迭代法的收敛性是不依赖初始值选取的。比较线性与非线
性问题迭代的差异,有何结论和问题。

实验过程:
第一问:
针对迭代函数

11nnxx

程序
disp(' 请输入初始迭代值为')
x=[];
a=[];
b=[];
x(1)=input('');
for i=2:30
x(i)=x(i-1)^2-1;
end
for i=2:30
a(i-1)=x(i-1);
b(i)=x(i);
end
a
b
i=1:30;
plot(i,x)
title('x(n+1)=x(n)^2-1')
数值实验结果及分析:
选择初始值为1时,每次迭代的波动情况如下:

每次的迭代函数值为:
x1 1 x11 0 x21 -1
x2 0 x12 -1 x22 1
x3 -1 x13 1 x23 0
x4 1 x14 0 x24 -1
x5 0 x15 -1 x25 1
x6 -1 x16 1 x26 0
x7 1 x17 0 x27 -1
x8 0 x18 -1 x28 1
x9 -1 x19 1 x29 0
x10 1 x20 0 x30 -1
这里同时给出迭代初始值为2,3的函数图象:
针对迭代函数
111nnxx

disp('请输入迭代的初始值')
float x=[];
a=[];
b=[];
x(1)=input('');
for i=2:30
x(i)=1+1/x(i-1);
end
for i=2:30
a(i-1)=x(i-1);
b(i)=x(i);
end
a
b
i=1:30;
plot(i,x)
title('x(n+1)=x(n)^2-1')
数值实验结果及分析:
选择初始值为1时,每次迭代的波动情况如下:

每次的迭代函数值为:
x1 1.0000 x11 1.6180 x21 1.6180
x2 2.0000 x12 1.6181 x22 1.6180
x3 1.5000 x13 1.6180 x23 1.6180
x4 1.6667 x14 1.6180 x24 1.6180
x5 1.6000 x15 1.6180 x25 1.6180
x6 1.6250 x16 1.6180 x26 1.6180
x7 1.6154 x17 1.6180 x27 1.6180
x8 1.6190 x18 1.6180 x28 1.6180
x9 1.6176 x19 1.6180 x29 1.6180
x10 1.6182 x20 1.6180 x30 1.6180
这里同时给出迭代初始值为2,3的函数图象:

针对迭代函数
11nnxx

disp('请输入迭代的初始值')
double x=[];
a=[];
b=[];
x(1)=input('');
for i=2:30
x(i)=sqrt(x(i-1)+1);
end
for i=2:30
a(i-1)=x(i-1);
b(i)=x(i);
end
a
b
i=1:30;
plot(i,x)
title('x(n+1)=sqrt(x(n)+1)')
数值实验结果及分析:
选择初始值为1时,每次迭代的波动情况如下:
每次的迭代函数值为:
x1 0.0000 x11 1.6180 x21 1.6180
x2 1.4142 x12 1.6180 x22 1.6180
x3 1.5538 x13 1.6180 x23 1.6180
x4 1.5981 x14 1.6180 x24 1.6180
x5 1.6161 x15 1.6180 x25 1.6180
x6 1.6174 x16 1.6180 x26 1.6180
x7 1.6179 x17 1.6180 x27 1.6180
x8 1.6180 x18 1.6180 x28 1.6180
x9 1.6180 x19 1.6180 x29 1.6180
x10 1.6180 x20 1.6180 x30 1.6180
这里同时给出迭代初始值为2,3的函数图象:

讨论
由上面的比较结果可以看到,无论取什么初始值,迭代法211nnxx所得
到的解是发散的,并且随着初始值选取的不同,发散的程度将会呈现指数型的增
长,表明这种迭代法是没有意义的。

而后面两种迭代法111nnxx和11nnxx则可以收敛到方程的解,说明
利用这两种方法来解此方程是可行的。并且可以看到,二者趋近于解的过程并不
相同, 111nnxx的前期迭代过程中是很不稳定的,而迭代法11nnxx更平
缓地方式趋近于方程的解。为三种迭代方法中最优。
第二问:
程序
迭代法111nnxx取初始值1——5,步长为0.5,迭代30次的图像:
for j=1:9
disp('请输入初始值:')
x=[];
x(1)=input('');
for i=2:30
x(i)=1/x(i-1)+1;
end
subplot(3,3,j)
i=1:30;
plot(i,x)
hold on
end
数值实验结果及分析:
讨论
如上图所示,选取不同的初值,解随着迭代次数的增加会收敛到一个稳定值,
说明运用此迭代法求解非线性方程组是可行的。选取初始值的不同,只会导致收
敛速度的不同。这就提示我们在求解非线性方程的时候,需要选取合理的初始值,
可以加快其收敛速度。

第三问:
线性方程组迭代法的收敛性是不依赖初始值选取的。比较线性与非线性问
题迭代的差异,有何结论和问题
综合课本上所学过的知识可以知道,线性方程组的迭代法和非线性方程的迭
代法是有所差异的。线性方程组迭代法的收敛性是不依赖初始值选取的。用迭代
法求解线性方程组,收敛性取决于迭代系数矩阵的谱半径,若谱半径小于1,则
无论从什么初始条件出发,线性方程组都是收敛的;若谱半径大于1,则方程组
不收敛这些判断与初值的选取无关。
用迭代法求解线性方程的时候,迭代法的收敛性取决于迭代区间里面的迭代
函数的一阶导数值。若在整个迭代区间里面对该迭代函数的一阶导数值小于一,
这在这个区间里面任选一个初始迭代值,那么都可以最终收敛到函数的精确解。
但是若在该区间里面该迭代函数的导数值不满足衡小于一的条件,则可能不收
敛。但是这并不能保证从该区间的任何一个初始值开始迭代,都不能能到其收敛
解。

实验总结:
通过本次试验的操作,针对同一个函数,运用了三种不同的方法进行迭代求
解。通过具体的实践发现,针对方程的不同迭代格式,有的可以得到最终的收敛
解,有的不能得到最后的收敛解。使得求线性方程的理论和技巧有了进一步的理
解。求解非线性方程不仅与迭代格式有关,还与选取的初始值有关。实验提示我
选择合适的初始值,可以加快迭代的过程。