欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    数值分析实验报告.doc

    • 资源ID:90041       资源大小:3.53MB        全文页数:40页
    • 资源格式: DOC        下载积分:5
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要5
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数值分析实验报告.doc

    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的最后一个元素有扰动10-4,再求解Ax=b(3

    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) 返回方阵A的行列式inv(A)

    4、 返回可逆方阵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(条件数对应的范数是p-范数:p=)pp=

    5、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=i+1:n Ab(k,i:

    6、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) 现选择程序中手动选取主元的功能,观察并记录计算结果。 选取绝对值最大的元素为主元:程序运行开始如第一问的截图也是求范数故这里不在给出。The answer is :

    7、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.0000 0.0000

    8、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:r=)for i=1:n-

    9、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(n)=A

    10、b(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 NaN NaN -Inf

    11、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中提供有函数“condest

    14、可以用来估计矩阵的条件数,它给出的是按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;for i=1:n-1 p

    16、ivot=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加扰动后的系数矩阵A为:70.0000046

    17、 18.0000042 14.0000099 29.0000032 52.0000044 53.0000013 63.0000057 98.0000030 2.0000079 47.0000096 34.0000093 65.0000021 80.0000079 28.0000087 90.0000044 7.0000073 44.0000068 21.0000061 96.0000006 26.0000002 20.0000050 99.0000041 23.0000021 38.0000063 53.0000060 88.0000077 30.0000021 59.0000074 58.0

    18、000084 79.0000037 89.0000005 74.0000097 67.0000064 43.0000027 77.0000063 69.0000058 b值为:236309270302367419加扰动后的b值为:236.00000451309.00000044270.00000027302.00000313367.00000013419.00000384 data的值为:4.610951267E-064.153748604E-069.900825926E-063.200355775E-064.399243096E-061.337727485E-065.678287124E-0

    19、63.04998677E-067.888616922E-069.600986004E-069.333801082E-062.071327296E-067.942106514E-068.743671716E-064.386585338E-067.266317666E-066.833323243E-066.071989445E-065.91825935E-071.50094987E-074.983113034E-064.119532082E-062.125598643E-066.298878488E-066.028690857E-067.6795039E-062.139633316E-067.44

    20、5657831E-068.392382403E-063.704768261E-065.02688037E-079.708449393E-066.434922879E-062.679472507E-066.287846E-065.75147779E-06 datb的值为:4.514248268E-064.38953253E-072.7185123E-073.126850481E-061.28625747E-073.839672885E-06 xx的值为:0.999999684491.00000038780.999999143481.00000065171.00000221560.99999754

    21、53 x0的值为:1.146958549E-06 x1的值为:6.8990e-0075.2.1.3实验结果为:的计算结果为:6.8990e-0075.2.2.1 实验要求二的程序如下:function cond2(A) B=A*A;V1,D1=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 实验要求二的程序运行

    22、结果如下:NcondestAcond2AcondA2101.46E+0242.50783044142.507830441204.59E+021.23E+021.23E+02304.05E+0279.26495488579.264954885402.21E+034.26E+024.26E+02503.02E+034.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

    23、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,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 实验要求三的程序运行结

    24、果如下:给出对的估计是:7.310559817408125e-007的理论结果是: 3.828481757617297e-007结果相差: 3.482078059790828e-0075.2.4.1 实验要求四的程序如下:for n=4:11 n=n Hi=hilb(n); cond1Hi=cond(Hi,1) cond2Hi=cond(Hi,2) condinfHi=cond(Hi,inf) pauseend5.2.4.2 实验要求四的程序运行结果如下:ncond1Hicond2HicondinfHi42.84E+041.55E+042.84E+0459.44E+054.77E+059.44

    25、E+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讨论:线性代数方程组的性态与条件数有着很重要的关系,既矩阵的条件数是刻画矩阵性质的一个重要的依据,条件数越大,矩阵“病态”性越严重,在解线性代数方程组的过程中较容易产生比较大的误差,则在实际问题的操作过程中,我们必须要减少对条件数来求解,把条件数较大的矩阵化成条件数较小的矩阵来进行求解。

    26、实验总结:在本次实验中,使我们知道了矩阵条件数对线性代数方程组求解的影响,条件数越大,对最后解的影响的越大,hilbert矩阵是一个很”病态”的矩阵,他的条件数随着阶数的增加而增大,每增加一阶,条件数就增大一个数量级,在求解的过程中要尽量避免hilbert矩阵实验六 解线性方程组的迭代法实验6.1(病态的线性方程组的求解)问题提出:理论的分析表明,求解病态的线性方程组是困难的。实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b的求解,其中系数矩阵H为Hilbert矩阵, 这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端b的办法给出确定的问题。实验要求

    27、1)选择问题的维数为6,分别用Gauss消去法、J迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法由于本实验用到迭代法,故先给出迭代法相关资料: 迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点

    28、让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。一般可以做如下定义:对于给定的线性方程组(这里的同为矩阵,任意线性方程组都可以变换成此形式),用公式(括号中为上标,代表迭代k次得到的x,初始时k=0)逐步带入求近似解的方法称为迭代法(或称一阶定常迭代法)。如果k趋向无穷大时存在,记为,称此迭代法收敛。显然就是此方程组的解,否则称为迭代法发散。跟迭代法相对

    29、应的是直接法(或者称为一次解法),即一次性的快速解决问题,例如通过开方解决方程。一般如果可能,直接解法总是优先考虑的。但当遇到复杂问题时,特别是在未知量很多,方程为非线性时,我们无法找到直接解法(例如五次以及更高次的代数方程没有解析解,参见阿贝尔定理),这时候或许可以通过迭代法寻求方程(组)的近似解。最常见的迭代法是牛顿法。其他还包括最速下降法、共轭迭代法、变尺度迭代法、最小二乘法、线性规划、非线性规划、单纯型法、惩罚函数法、斜率投影法、遗传算法、模拟退火法等等。利用迭代算法解决问题,需要做好以下三个方面的工作: (1)确定迭代变量在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧

    30、值递推出新值的变量,这个变量就是迭代变量。 (2)建立迭代关系式所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。 (3)对迭代过程进行控制在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。实验过程:6.1.1.1 实验要求一的ga

    31、uss实现程序如下: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=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 i

    32、p=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(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

    33、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; 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=

    34、1:n; a02(i)=1; x2(i)=0;endb2=A2*a02;for i=1:100000; 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 endendx26.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)=

    35、0;endb3=A3*a03;for i=1:100000; 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(j); endendx36.1.4.2实验要求一的SOR程序运行结果如下:(注意由于运行结果迭代过程很长故不体现在实验报告中)6.2.1实验要求二的gauss程序运行结果如下: x = 0 0 0 0 0 0

    36、 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. 取初始向量为0,用J迭代方法迭代发散,无法求解;3. 取初始向量为0,用GS迭代方法迭代不发散,能求得解,但收敛非常缓慢,而且迭代次数越多,与准确解的偏差就越大,说明GS迭代适合迭代次数少的,但是通常我们无法得知需要迭

    37、代的次数。4. 取初始向量为0,用SOR迭代方法迭代不发散,能求得解,但同样收敛非常缓慢。总之,从上面的结果可以看出当病态问题的阶数升高时作为直接法的Gauss消去法又能求解变成不能求解。而GS和SOR迭代法在阶数升高时仍能求解。但在阶数较低时直接法能求得精确解而迭代发却总存在一定的误差。可见直接法与迭代法各有各的优势与不足。关于病态问题的求解,主要的方法是对原方程作某些预处理,以降低系数矩阵的条件数。可以采取将系数矩阵A的每一行本别乘上适当常数的方法。即找到可逆的对角阵和使方程组化为 理论上最好选择对角阵满足:。补充:本实验用到了Gauss消去法、J迭代法、GS迭代法、SOR迭代,故对其重新

    38、理解学习了一下:Gauss消去法:1 将其增广矩阵化为行阶梯形 2 若最后有形如0 0 . 0 a (a0)的行则无解3 若含有自由变量则有无穷组解 4 原方程有唯一解。采用回代求解。 至于有无穷组解的方程组的求解,需将其化为行最简形矩阵,其方法称为高斯-若尔当消元法。J迭代法:一、算法理论迭代格式的引出是依据迭代法的基本思想:构造一个向量系列,使其收敛至某个极限,则就是要求的方程组的准确解。迭代将方程组: 在假设,改写成 如果引用系数矩阵,及向量方程组(1)和(2)分别可写为:及,这样就得到了迭代格式用迭代解方程组时,就可任意取初值带入迭代可知式,然后求。但是,比较大的时候,写方程组(1)和

    39、2)是很麻烦的,如果直接由,能直接得到,就是矩阵与向量的运算了,那么如何得到,呢实际上,如果引进非奇异对角矩阵将分解成:要求的解,实质上就有,而是非奇异的,所以存在,从而有我们在这里不妨令,就得到迭代格式:现在考虑迭代法的计算程序 float a33=10,-2,-1,-2,10,-1,-1,-2,-5;float b3=3,15,10;分别代表的系数和等号右边的常数项,即 先输入方程,运行main函数,如果first不为null,则执行if括号里的,否则执行else里面的,最后会调用方法sum()。在sum()中sum=amn*xn+sum;y=(bm-sum)/amm,之后运行for循环

    40、最后输出结果,算法结束。二、算法框图 调用方法 开始读入输出 结束GS迭代法:1.高斯 - 塞德尔迭代法 公式的矩阵形式 首先将高斯 - 塞德尔迭代法的公式表示为矩阵形式,为此设 这里 是系数矩阵的对角部分,是严格下三角部分,是严格上三角部分,则高斯 - 塞德尔迭代法的公式可表示为 用矩阵 乘等式两边得 再用矩阵 乘等式两边得 其中矩阵 称为高斯塞德尔迭代矩阵。由此可见,高斯 - 塞德尔迭代法是一般迭代法中迭代矩阵为 的特殊情形。需要指出的是,由于矩阵 难于计算,所以式(2)多用在理论分析中。2. 高斯塞德尔迭代法计算框图(见图)高斯塞德尔迭代法计算框图松弛法:其中相当于在的基础上加个余项生成,下面令,希望通过选取来加速收敛,这就是松弛法。实验七 非线性方程求根实验7.1(迭代法、初始值与收敛性)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。问题提出:迭代法是求解


    注意事项

    本文(数值分析实验报告.doc)为本站会员(夺命阿水)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!




    宁ICP备18001539号-1

    三一文库
    收起
    展开