1、基于matlab的数学实验线代中的若干问题基于MATLAB的数学实验 线性代数中的若干问题(二)2 引言用迭代法(Iteration )寻求问题的答案,是逐步逼近思想的具体体现,其基本思想是:不追求“一下子”得到(非)线性方程(组)的解,而是在逐步逼近方程组的精确解的迭代过程中获得满足精度要求的近似解,这一点与直接法不同;通过对问题的转化,避免(困难的)矩阵求逆运算。在不能或者很难一下子求得结果的情况下,使用迭代法就是一种自然的选择,因此了解并学会使用迭代法是十分有益的。在本节你将了解到什么是迭代;什么样的迭代是可用的;线性迭代、非线性迭代以及二者的差异;22(非)线性方程的场合数列是我们熟知
2、的数学概念和对象,下面就是一例 (1)这个数列产生于这样的过程:从开始,计算函数在点处的值得到数列的第一项,然后将计算结果再代入函数的表达式中得到数列的第二项,数列(1)重复这种操作(迭代)的结果,其中称为迭代的初值。迭代公式(定义了一种迭代算法)为:。由此可见,任何函数(包括一元函数和多元函数)在其定义域内都对应一种迭代,线性函数、非线性函数确定的迭代分别称为线性迭代和非线性迭代。面对这无穷多的迭代算法,在实际使用时如何选择呢?下面我们通过一个具体的代数方程求根的例子来说明选择的依据和准则,例 用迭代法求代数方程根的例子:让我们来求如下方程的根 (2)首先要确定适当的包含根的区间,这可以依据
3、闭区间上连续函数的介值定理来确定,例如,所以方程 (2)至少有一个实根属于区间,图1表明区间中只含有一个根,显然方程 (2)的根不易直接求得。图 1下面,我们采用迭代法求方程 (2)位于区间中的根,为此构造迭代算法如下(原因稍后加以说明):, (3)在区间中任取一个迭代初值,如取初值。执行下面的程序:EqutIteration.m:x=;x(1)=2;n=100;for i=1:100; x(i+1)=(0.3+x(i)*sin(x(i)/(x(i)*(2.3-x(i); if abs(x(i+1)-x(i)1e-15; break else N=i+1; endendNxplot(1:len
4、gth(x),x)title(ITERATION FOR SOLVING EQUATION)gtext(Curve of Iteration)共迭代2次,得到结果如下: 2.0000 3.5310 0.2394 0.7233 0.6828 0.6618 0.6519 0.6473 0.6453 0.6444 0.6441 0.6439 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.643
5、8 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438 0.6438可以看出n=13以后,在取位有效数字时不再变化,下图也表明了这一事实,事实上(能够证明)用迭代所求方程的根,误差不超过9.91514e-020 ,这是相当精确的。图 2以上我们已经看到,按迭代算法(3)生成的数列不仅收敛而且收敛于所求方程的根,这种收敛性是对迭代算法的基本要求,下面的定理给出了迭代算法收敛的一个充分条件:定理设方程在上存在唯一解,是方程的等价形式,如果、在上连续可微;、对任何,;、,则对任何,由迭代算法, (4
6、)生成的序列收敛于方程在上的唯一解。问题与实验1:用迭代算法(3)能否求出方程(2)的所有解?不妨用程序EqutIteration.m先做实验,再说明原因。问题与实验2:就方程(2)或选择别的例子构造不同的收敛迭代法,通过实验和比较,你可能会有所感悟。23(非)线性方程组的场合用迭代法求解线性方程组,首先要把线性方程组写成等价的形式(5)式(5)的右端称为迭代格式,由迭代格式(5)确定如下的迭代算法:(6)对于给定的线性方程组,可以写成不同的(无穷多)迭代格式,有意义的(可用的)迭代格式应具有收敛性生成的解向量序列收敛于方程组的解;而好的迭代法应具有较高的收敛速度。关于迭代法收敛性的两个判别条
7、件:a、充分必要条件是:矩阵的谱半径b、充分条件是:矩阵的某个算子范数。设是方程组(5)的解,是迭代法(6)生成的任一序列,因为, 所以(7)设,其中矩阵是矩阵的Jordan标准型,那么容易验证,并且(8)此外,因为(9)所以(10)注:迭代格式(6)所确定的迭代法收敛与否,完全由系数矩阵决定,而与常数项无关例 用迭代法求线性方程组根的例子:让我们来求阶线性方程组:其中A= 4.3999 0.6686 -1.6041 0.5287 -1.0106; 0.6900 5.1908 0.2573 0.2193 0.6145; 0.8156 -1.2025 4.0565 -0.9219 0.5077;
8、0.7119 -0.0198 1.4151 3.1707 1.6924; 1.2902 -0.1567 -0.8051 -0.0592 5.5913b= -0.4326; -1.6656;0.1253;0.2877;-1.1465构造迭代法(Jacobi迭代法)如下:(5)其中,= 0 -0.1520 0.3646 -0.1202 0.2297 -0.1329 0 -0.0496 -0.0422 -0.1184 -0.2011 0.2964 0 0.2273 -0.1252 -0.2245 0.0062 -0.4463 0 -0.5338 -0.2308 0.0280 0.1440 0.010
9、6 0= -0.0983 -0.3209 0.0309 0.0907 -0.2051使用程序ITERA_J:A= 4.3999 0.6686 -1.6041 0.5287 -1.0106; 0.6900 5.1908 0.2573 0.2193 0.6145; 0.8156 -1.2025 4.0565 -0.9219 0.5077;0.7120 -0.0198 1.4151 3.1707 1.6924; 1.2902 -0.1567 -0.8051 -0.0592 5.5913;b= -0.4326; -1.6656;0.1253;0.2877;-1.1465D=diag(diag(A);L
10、U=D-A;M=DLU;f=Db;x=;z=;x(:,1)=eye(5,1);N=2000;for i=1:N; if norm(A*x(:,i)-b)1e-010; m=i; break else x(:,i+1)=M*x(:,i)+f; z=x(:,i+1); endendme=norm(A*z-b)plot(1:length(x),x)title(JACOBI ITERATION OF LINEAR EQUATIONS)gtext(x1)gtext(x2)gtext(x3)gtext(x4)gtext(x5)迭代次,误差向量7.0162e-011,并且看出以后,在取位有效数字时不再变化,
11、迭代过程如图3所示。图3问题与实验3: 一元线性迭代的收敛性条件怎样表述?问题与实验4: 在本例中,这时迭代序列是收敛的,就本例或选择别的例子,按和构造不同的迭代法,通过实验和比较,并给出你对实验结果的解释(如关于收敛性、收敛速度等),当然这需要你首先知道矩阵范数的概念,并且对它有比较好的理解。14不动点、k循环与混沌我们已经知道任何函数(包括一元函数和多元函数)在其定义域内都对应一种迭代,对于非线性函数迭代来说,不动点是下面所定义的循环的特例(循环):定义: 设由迭代算法,生成的序列具有如下性质:(自然数集合),当时,(6)那么称是由迭代算法生成的循环。引例关于迭代(7)实验与讨论。容易求得
12、迭代(7)有两个不动点:和,图4给出了及迭代初值分别取和时,迭代收敛于的情形:使用程序(ITERA1:)a=2;x=;y=;x(1)=input(please input the firse value of iteration x(1)=:);%x(1)=0.01y(1)=input(please input the firse value of iteration y(1)=:);%y(1)=0.9n=input(please input the total number of iteration n=:);%n=150for i=1:n-1; x(i+1)=a-(x(i)-sqrt(a)
13、2; y(i+1)=a-(y(i)-sqrt(a)2;endsubplot(2,1,1)plot(1:n,x,bo)title(ITERATION FOR SOLVING EQUATION)subplot(2,1,2)plot(1:n,y,r*)title(ITERATION FOR SOLVING EQUATION)图 4图5给出了时,出现循环的情形:使用程序(ITERA2:)a=3;x=;x(1)=input(please input the firse value of iteration x(1)=:);%2.5n=input(please input the total number
14、 of iteration n=:);%n=200for i=1:n-1; x(i+1)=a-(x(i)-sqrt(a)2;endplot(1:n,x,r*)title(ITERATION FOR SOLVING EQUATION)图 图6给出了时,出现8循环的情形:使用程序(ITERA3:)a=3.16;x=;x(1)=input(please input the firse value of iteration x(1)=:);%1.5n=input(please input the total number of iteration n=:);%n=500for i=1:n-1; x(i+1)=a-(x(i)-sqrt(a)2;endplot(1:n,x,r*)title(ITERATION FOR SOLVING EQUATION)图 6 图7给出了时,出现混沌现象的情形,迭代初值分别取、和。使用程序(ITERA4:)a=4;x=;y=;x(1)=input(please
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1