《数值分析实验报告(共40页).doc》由会员分享,可在线阅读,更多相关《数值分析实验报告(共40页).doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性)问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss消去过程。实验要求:(1)取矩阵,则方程有解。取n=10计算矩阵的条件数。让程序自动选取主元,结果如何?(2)现选择程序中
2、手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。思考题一:(Vadermonde矩阵)设 ,其中,(1)对n=2,5,8,计算A的条件数;随n增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b;设A的最后一个元素有扰动1
3、0-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。(4)你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插值法的原因吗?相关MATLAB函数提示:zeros(m,n) 生成m行,n列的零矩阵ones(m,n) 生成m行,n列的元素全为1的矩阵eye(n) 生成n阶单位矩阵rand(m,n) 生成m行,n列(0,1)上均匀分布的随机矩阵diag(x) 返回由向量x的元素构成的对角矩阵tril(A) 提取矩阵A的下三角部分生成下三角矩阵triu(A) 提取矩阵A的上三角部分生成上三角矩阵rank(A) 返回矩阵A的秩det(A) 返回
4、方阵A的行列式inv(A) 返回可逆方阵A的逆矩阵V,D=eig(A) 返回方阵A的特征值和特征向量norm(A,p) 矩阵或向量的p范数cond(A,p) 矩阵的条件数L,U,P=lu(A) 选列主元LU分解R=chol(X) 平方根分解Hi=hilb(n) 生成n阶Hilbert矩阵5.1实验过程:5.1.1程序:function x=gauss(n,r)n=input(请输入矩阵A的阶数:n=)A=diag(6*ones(1,n)+diag(ones(1,n-1),1)+diag(8*ones(1,n-1),-1)b=A*ones(n,1)for i=1:4p=input(条件数对应的范
5、数是p-范数:p=)pp=cond(A,p)endpausem,n=size(A);nb=n+1;Ab=A br=input(请输入是否为手动,手动输入1,自动输入0:r=)for i=1:n-1 if r=0 pivot,p=max(abs(Ab(i:n,i); ip=p+i-1; if ip=i Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end end if r=1 i=i ip=input(输入i列所选元素所处的行数:ip=); Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end pivot=Ab(i,i); for k=
6、i+1:n Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb); end disp(Ab); pauseendx=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n);for i=n-1:-1:1 x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n)/Ab(i,i);end5.1.2实验结果如下: 1.按照实验要求一:取矩阵A的阶数:n=10且自动选取主元,程序结果运行如下:(2) 现选择程序中手动选取主元的功能,观察并记录计算结果。 选取绝对值最大的元素为主元:程序运行开始如第一问的截图也是求范数故这里不在给出。Th
7、e answer is :1 1 1 1 1 1 1 1 1 1 选取绝对值最小的元素为主元:The answer is: 1.0e+003*(INF 0.007 0.0057 -0.0410 -0.0303 0.3430 0.2577 -2.7290 -2.0463 2.7308)取矩阵A的阶数:n=20,手动选取主元: 选取绝对值最大的元素为主元:The answer is :1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 选取绝对值最小的元素为主元:The answer is: 1.0e+007*(-Inf 0.0000 0.0000 -0.0000 -0
8、.0000 0.0000 0.0000 -0.0003 -0.0002 0.0022 0.0016 -0.0175 -0.0131 0.1398 0.1049 -1.1185 -0.8389 8.9478 6.7109 -8.9478)修改程序如下:function x=gaussong(n,r)n=input(请输入矩阵A的阶数:n=)A=hilb(n)b=A*ones(n,1)for i=1:4p=input(条件数对应的范数是p-范数:p=)pp=cond(A,p)endpausem,n=size(A);nb=n+1;Ab=A br=input(请输入是否为手动,手动输入1,自动输入0:
9、r=)for i=1:n-1 if r=0 pivot,p=max(abs(Ab(i:n,i); ip=p+i-1; if ip=i Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end end if r=1 i=i ip=input(输入i列所选元素所处的行数:ip=); Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end pivot=Ab(i,i); for k=i+1:n Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb); end disp(Ab); pauseendx=zero
10、s(n,1);x(n)=Ab(n,nb)/Ab(n,n);for i=n-1:-1:1 x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n)/Ab(i,i);end所求范数为:自动输入结果为:ans = 1.0000 1.00001 .0000 1.0000 1.0002 0.9996 1.0007 0.9993 1.0004 0.9999选取绝对值最大的元素为主元结果为:The answer is :NaN NaN NaN NaN NaN Inf -Inf -Inf 281.3945 -283.3708选取绝对值最小的元素为主元结果为:The answer is :NaN
11、NaN NaN -Inf -5.8976 -1.9243 -2.0291 -4.9972 23.4548 -11.10125.1.3 对实验结果进行分析:5.1.3.1 对实验要求一的结果进行分析:对于Gauss消去法就是用行的初等变换将原线性方程组系数矩阵转化为简单形式,从而进行求解,缺点是迭代次数可能较多,效率不高,且在消去过程中不可以将主元素很小的做除数,否则将导致其他元素数量级的严重增长和舍入误差的扩散,使得计算解不可靠。5.1.3.2 对实验要求二的结果进行分析:通过每次选取最大或最小的主元可以发现取绝对值大的元素作为主元比取绝对值小的元素作为主元时产生的结果比较准确,即选取绝对值小
12、的主元时结果产生了较大的误差,条件数越大产生的误差就越大。所以应尽量避免很小的数作为除数。5.1.3.3 对实验要求三的结果进行分析:此要求是对要求一和要求二的一个延续,通过实验结果可以看出若采用很小的数作为主元迭代次数越多导致的结果越不可靠,甚至出现错误。5.1.3.4 对实验要求四的结果进行分析:对新矩阵进行实验发现依然符合上述规律,可以知道,在进行迭代时主元的选择与算法的稳定性有密切的联系选取绝对值大的元素作为主元比绝对值小的元素作为主元时对结果产生的误差较小。条件数越大对用gauss消去法解线性方程组时,对结果产生的误差就越大。5.1.4实验总结:1. 在用gauss消去法解线性方程组
13、时,主元的选取与算法的稳定性有密切的联系,选取适当的主元有利于得出稳定的算法,2. 在算法的过程中,选取绝对值较大的主元比选取绝对值较小的主元更有利于算法的稳定,选取绝对值最大的元素作为主元时,得出的结果相对较准确较稳定。3. 条件数越小,对用这种方法得出的结果更准确。4. 在算除法的过程中要尽量避免使用较小的数做为除数,以免发生结果数量级加大,使大数吃掉小数,产生舍入误差。实验5.2(线性代数方程组的性态与条件数的估计)问题提出:理论上,线性代数方程组的摄动满足 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算通常要比求解方程还困难。实验内容:Matlab中
14、提供有函数“condest”可以用来估计矩阵的条件数,它给出的是按1-范数的条件数。首先构造非奇异矩阵A和右端,使得方程是可以精确求解的。再人为地引进系数矩阵和右端的摄动,使得充分小。实验要求:(1)假设方程Ax=b的解为x,求解方程,以1-范数,给出的计算结果。(2)选择一系列维数递增的矩阵(可以是随机生成的),比较函数“condest”所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“eig”很容易给出cond2(A)的数值。将它与函数“cond(A,2)”所得到的结果进行比较。(3)利用“condest”给出矩阵A条件数的估计,针对(1)中的结果给出的理论估计,并将它与(1)给出的计
15、算结果进行比较,分析所得结果。注意,如果给出了cond(A)和的估计,马上就可以给出的估计。(4)估计著名的Hilbert矩阵的条件数。5.2 实验过程如下: 5.2.1.1 实验要求一的程序如下:function n=jisuan(n)a=fix(100*rand(n)+1 x=ones(n,1) b=a*x data=rand(n)*0.00001 datb=rand(n,1)*0.00001 A=a+dataB=b+datbx0=get(A,B) x1=norm(x0-x,1)/norm(x,1) function x=get(A,B)m,n=size(A);nb=n+1;AB=A B;
16、for i=1:n-1 pivot=AB(i,i); for k=i+1:n AB(k,i:nb)=AB(k,i:nb)-(AB(k,i)/pivot)*AB(i,i:nb); endendx=zeros(n,1);x(n)=AB(n,nb)/AB(n,n);for i=n-1:-1:1 x(i)=(AB(i,nb)-AB(i,i+1:n)*x(i+1:n)/AB(i,i);End5.2.1.2 实验要求一程序运行结果如下:系数矩阵a为:7018142952536398247346580289074421962620992338538830595879897467437769加扰动后的系数矩阵
17、A为:70. 18. 14. 29. 52. 53. 63. 98. 2. 47. 34. 65. 80. 28. 90. 7. 44. 21. 96. 26. 20. 99. 23. 38. 53. 88. 30. 59. 58. 79. 89. 74. 67. 43. 77. 69. b值为:236309270302367419加扰动后的b值为:236.309.270.302.367.419. data的值为:4.E-064.E-069.E-063.E-064.E-061.E-065.E-063.E-067.E-069.E-069.E-062.E-067.E-068.E-064.E-067
18、.E-066.E-066.E-065.E-071.E-074.E-064.E-062.E-066.E-066.E-067.E-062.E-067.E-068.E-063.E-065.E-079.E-066.E-062.E-066.E-065.E-06 datb的值为:4.E-064.E-072.E-073.E-061.E-073.E-06 xx的值为:0.1.0.1.1.0. x0的值为:1.E-06 x1的值为:6.8990e-0075.2.1.3实验结果为:的计算结果为:6.8990e-0075.2.2.1 实验要求二的程序如下:function cond2(A) B=A*A;V1,D1=
19、eig(B);V2,D2=eig(B(-1);cond2A=sqrt(max(max(D1)*sqrt(max(max(D2)endfor n=10:10:100n=n A=fix(100*randn(n); condestA=condest(A) cond2(A) condA2=cond(A,2) pause end5.2.2.2 实验要求二的程序运行结果如下:NcondestAcond2AcondA2101.46E+0242.42.204.59E+021.23E+021.23E+02304.05E+0279.79.402.21E+034.26E+024.26E+02503.02E+034.
20、08E+024.08E+02604.75E+037.78E+027.78E+02704.69E+035.14E+025.14E+02805.47E+034.89E+024.89E+02905.66E+035.50E+025.50E+021004.47E+035.06E+025.06E+025.2.3.1 实验要求三的程序如下:function bijiao(n) a=fix(100*rand(n)+1; x=ones(n,1); b=a*x; data=rand(n)*0.00001; datb=rand(n,1)*0.00001; A=a+data;B=b+datb;xx=geshow(A,
21、B); x1=norm(xx-x,1)/norm(x,1) x2=cond(A)/(1-norm(inv(A)*norm(xx-x)*(norm(xx-x)/(norm(A)+norm(datb)/norm(B) datx=abs(x1-x2) 5.2.3.2 实验要求三的程序运行结果如下:给出对的估计是:7.8125e-007的理论结果是: 3.7297e-007结果相差: 3.0828e-0075.2.4.1 实验要求四的程序如下:for n=4:11 n=n Hi=hilb(n); cond1Hi=cond(Hi,1) cond2Hi=cond(Hi,2) condinfHi=cond(
22、Hi,inf) pauseend专心-专注-专业5.2.4.2 实验要求四的程序运行结果如下:ncond1Hicond2HicondinfHi42.84E+041.55E+042.84E+0459.44E+054.77E+059.44E+0562.91E+071.50E+072.91E+0779.85E+084.75E+089.85E+0883.39E+101.53E+103.39E+1091.10E+124.93E+111.10E+12103.54E+131.60E+133.54E+13111.23E+155.22E+141.23E+15讨论:线性代数方程组的性态与条件数有着很重要的关系,既
23、矩阵的条件数是刻画矩阵性质的一个重要的依据,条件数越大,矩阵“病态”性越严重,在解线性代数方程组的过程中较容易产生比较大的误差,则在实际问题的操作过程中,我们必须要减少对条件数来求解,把条件数较大的矩阵化成条件数较小的矩阵来进行求解。实验总结:在本次实验中,使我们知道了矩阵条件数对线性代数方程组求解的影响,条件数越大,对最后解的影响的越大,hilbert矩阵是一个很”病态”的矩阵,他的条件数随着阶数的增加而增大,每增加一阶,条件数就增大一个数量级,在求解的过程中要尽量避免hilbert矩阵实验六 解线性方程组的迭代法实验6.1(病态的线性方程组的求解)问题提出:理论的分析表明,求解病态的线性方
24、程组是困难的。实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b的求解,其中系数矩阵H为Hilbert矩阵, 这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端b的办法给出确定的问题。实验要求:(1)选择问题的维数为6,分别用Gauss消去法、J迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法由于本实验用到迭代法,故先给出迭代法相关资料: 迭代法也称辗转法,是一种不断用变量的旧值递推新值
25、的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。一般可以做如下定义:对于给定的线性方程组(这里的同为矩阵,任意线性方程组都
26、可以变换成此形式),用公式(括号中为上标,代表迭代k次得到的x,初始时k=0)逐步带入求近似解的方法称为迭代法(或称一阶定常迭代法)。如果k趋向无穷大时存在,记为,称此迭代法收敛。显然就是此方程组的解,否则称为迭代法发散。跟迭代法相对应的是直接法(或者称为一次解法),即一次性的快速解决问题,例如通过开方解决方程。一般如果可能,直接解法总是优先考虑的。但当遇到复杂问题时,特别是在未知量很多,方程为非线性时,我们无法找到直接解法(例如五次以及更高次的代数方程没有解析解,参见阿贝尔定理),这时候或许可以通过迭代法寻求方程(组)的近似解。最常见的迭代法是牛顿法。其他还包括最速下降法、共轭迭代法、变尺度
27、迭代法、最小二乘法、线性规划、非线性规划、单纯型法、惩罚函数法、斜率投影法、遗传算法、模拟退火法等等。利用迭代算法解决问题,需要做好以下三个方面的工作: (1)确定迭代变量在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 (2)建立迭代关系式所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。 (3)对迭代过程进行控制在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需
28、的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。实验过程:6.1.1.1 实验要求一的gauss实现程序如下:Gauss消去法程序:function x=gaussong(n,r)A=hilb(n)b=A*ones(n,1)for i=1:4p=input(条件数对应的范数是p-范数:p=)pp=cond(A,p)endpausem,n=size(A);nb=n+1;Ab=A br=input(请输入是否为手动,手动输入1,自动输入0:r=)for i
29、=1:n-1 if r=0 pivot,p=max(abs(Ab(i:n,i); ip=p+i-1; if ip=i Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end end if r=1 i=i ip=input(输入i列所选元素所处的行数:ip=); Ab(i ip,:)=Ab(ip i,:);disp(Ab); pause end pivot=Ab(i,i); for k=i+1:n Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb); end disp(Ab); pauseendx=zeros(n,1);x
30、(n)=Ab(n,nb)/Ab(n,n);for i=n-1:-1:1 x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n)/Ab(i,i);end6.1.1.2实验要求一的gauss实现程序运行结果如下:6.1.2.1实验要求一的J程序如下:function n=JD(n)A=hilb(n);for i=1:n; a0(i)=1; x(i)=0;endb=A*a0; for i=1:100; y=x; for j=1:n; x(j)=b(j)/A(j,j); for k=1:j-1; x(j)=x(j)-A(j,k)*y(k)/A(j,j); endfor k=j+1:n;
31、 x(j)=x(j)-A(j,k)*y(k)/A(j,j);end endendx6.1.2.2实验要求一的J程序运行结果如下:6.1.3.1实验要求一的GS程序如下:function n=GS(n)A2=hilb(n);for i=1:n; a02(i)=1; x2(i)=0;endb2=A2*a02;for i=1:; for j=1:n; x2(j)=b2(j)/A2(j,j); for k=1:j-1; x2(j)=x2(j)-A2(j,k)*x2(k)/A2(j,j); endfor k=j+1:n; x2(j)=x2(j)-A2(j,k)*x2(k)/A2(j,j);end end
32、endx26.1.3.2实验要求一的GS程序运行结果如下:6.1.4.1实验要求一的SOR程序如下:function n ss=SOR(n,ss)A3=hilb(n);for i=1:n; a03(i)=1; x3(i)=0;endb3=A3*a03;for i=1:; for j=1:n; rc=x3(j); x3(j)=b3(j)/A3(j,j); for k=1:j-1; x3(j)=x3(j)-A3(j,k)*x3(k)/A3(j,j); endfor k=j+1:n; x3(j)=x3(j)-A3(j,k)*x3(k)/A3(j,j);endx3(j)=(1-ss)*rc+ss*x3
33、(j); endendx36.1.4.2实验要求一的SOR程序运行结果如下:(注意由于运行结果迭代过程很长故不体现在实验报告中)6.2.1实验要求二的gauss程序运行结果如下: x = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.99756.2.2实验要求二的J程序运行结果如下:6.2.3实验要求二的GS程序运行结果如下:6.2.4实验要求二的SOR程序运行结果如下:实验要求二的结果分析:选择问题的维数为20时:1. 用Gauss消去法求得的解与精确解相差很大,说明能否得到优秀的解取决于算法的稳定性,如果算法不够稳定产生的结果将变的无法理喻。2. 取初始向
34、量为0,用J迭代方法迭代发散,无法求解;3. 取初始向量为0,用GS迭代方法迭代不发散,能求得解,但收敛非常缓慢,而且迭代次数越多,与准确解的偏差就越大,说明GS迭代适合迭代次数少的,但是通常我们无法得知需要迭代的次数。4. 取初始向量为0,用SOR迭代方法迭代不发散,能求得解,但同样收敛非常缓慢。总之,从上面的结果可以看出当病态问题的阶数升高时作为直接法的Gauss消去法又能求解变成不能求解。而GS和SOR迭代法在阶数升高时仍能求解。但在阶数较低时直接法能求得精确解而迭代发却总存在一定的误差。可见直接法与迭代法各有各的优势与不足。关于病态问题的求解,主要的方法是对原方程作某些预处理,以降低系
35、数矩阵的条件数。可以采取将系数矩阵A的每一行本别乘上适当常数的方法。即找到可逆的对角阵和使方程组化为 理论上最好选择对角阵满足:。补充:本实验用到了Gauss消去法、J迭代法、GS迭代法、SOR迭代,故对其重新理解学习了一下:Gauss消去法:1 将其增广矩阵化为行阶梯形 2 若最后有形如0 0 . 0 a (a0)的行则无解3 若含有自由变量则有无穷组解 4 原方程有唯一解。采用回代求解。 至于有无穷组解的方程组的求解,需将其化为行最简形矩阵,其方法称为高斯-若尔当消元法。J迭代法:一、算法理论迭代格式的引出是依据迭代法的基本思想:构造一个向量系列,使其收敛至某个极限,则就是要求的方程组的准
36、确解。迭代将方程组: 在假设,改写成 如果引用系数矩阵,及向量方程组(1)和(2)分别可写为:及,这样就得到了迭代格式用迭代解方程组时,就可任意取初值带入迭代可知式,然后求。但是,比较大的时候,写方程组(1)和(2)是很麻烦的,如果直接由,能直接得到,就是矩阵与向量的运算了,那么如何得到,呢实际上,如果引进非奇异对角矩阵将分解成:要求的解,实质上就有,而是非奇异的,所以存在,从而有我们在这里不妨令,就得到迭代格式:现在考虑迭代法的计算程序 float a33=10,-2,-1,-2,10,-1,-1,-2,-5;float b3=3,15,10;分别代表的系数和等号右边的常数项,即 先输入方程
37、,运行main函数,如果first不为null,则执行if括号里的,否则执行else里面的,最后会调用方法sum()。在sum()中sum=amn*xn+sum;y=(bm-sum)/amm,之后运行for循环,最后输出结果,算法结束。二、算法框图 调用方法 开始读入输出 结束GS迭代法:1. - 迭代法 公式的矩阵形式 首先将高斯 - 塞德尔迭代法的公式表示为矩阵形式,为此设 这里 是系数矩阵的对角部分,是严格下三角部分,是严格上三角部分,则高斯 - 塞德尔迭代法的公式可表示为 用矩阵 乘等式两边得 再用矩阵 乘等式两边得 其中矩阵 称为高斯塞德尔迭代矩阵。由此可见,高斯 - 塞德尔迭代法是
38、一般迭代法中迭代矩阵为 的特殊情形。需要指出的是,由于矩阵 难于计算,所以式(2)多用在理论分析中。2. (见图)松弛法:其中相当于在的基础上加个余项生成,下面令,希望通过选取来加速收敛,这就是松弛法。实验七 非线性方程求根实验7.1(迭代法、初始值与收敛性)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。实验内容:考虑一个简单的代数方程针对上述方程,可以构造多种迭代法,如 在实轴上取初始值x0,请分别用
39、迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。实验要求:(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。请自选设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)线性方程组迭代法的收敛性是不依赖初始值选取的。比较线性与非线性问题迭代的差异,有何结论和问题。实验过程:7.1程序:7.1.1 对于第一个迭代方程的程序:保存为:diedai71clearclca=-1.5;b=2.5; y00=0; x00=input(请输入第一个函数的初值:x00=);x=linspace(a,b,80);y0=x; %计算直线y=xy1=diedai7f1(x); %计算迭代函数y=f(x)clear y;y=y0;y1;plot(x,y,linewidth,1)legend(y=x,y=f1)title(x(n+1)=x(n)2-1) %输出标题hold onplot(a b,0,0,k-,0 0,a b,k-)axis(a,b,a,b)
限制150内