数值分析课程设计终结版_第1页
数值分析课程设计终结版_第2页
数值分析课程设计终结版_第3页
数值分析课程设计终结版_第4页
数值分析课程设计终结版_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值分析课程设计FORMTEXT求解线性方程组何斌200930980106指导教师张昕讲师学院名称FORMTEXT理学院专业名称统计学提交日期2011年6月10日问题的提出1.1根本情况求解线性方程组1.2需要解决的问题〔1〕自定义函数SOR(A,B,w,MAXN,TOL),以实现SOR方法求解线性方程组AX=B,其中A——系数矩阵;B——常数列向量;w——松弛因子;MAXN——迭代的最大次数TOL——到达的精度上限返回值有以下四种可能:-2:SOR方法不收敛;〔不收敛的依据为的某个分量值超出区间[-108,108]。〕-1:矩阵有一列全为0;0:算法经过MAXN次迭代还未收敛;k:SOR方法经k次迭代收敛,求得方程组的解向量X记录下来.〔2〕自定义函数Direct(A,B),以实现高斯LU分解的方法求解线性方程组AX=B,其中A——系数矩阵;B——常数列向量;返回值有两种可能:“LUdecompsitionfailed.”:分解过程中U的对角线元素至少一个为0;X:分解过程中〔3〕分别使用函数SOR(A,B,w,MAXN,TOL)和函数Direct(A,B)进行测试,记录返回值及X值。〔4〕对于的测试结果,有条理地写出你所发现的求解方程组的直接法和迭代法的特点。实验内容测试1:MAXN=1000,TOL=10-9,w分别取1,1.05,1.1,1.2,1.3,1.6,1.95;测试2:MAXN=1000,TOL=10-9,w=1;测试3:MAXN=1000,TOL=10-9,w=1.2;测试4:MAXN=1000,TOL=10-9,w=1,1.1,1.3,1.8;测试5::n阶Hilbert矩阵定义为取n=3,MAXN=1000,TOL=10-9,w=1,1.3,1.6,1.9;测试6:A为4阶Hilbert矩阵,MAXN=10000,TOL=10-6,w=1,1.3,1.6,1.8,1.9.实验结果及分析表1测试1的实验结果及分析SEQ表1_测试1的实验结果及分析\*ARABIC1相应程序>>A=[4-10-100;-14-10-10;0-1400-1;-1004-10;0-10-14-1;00-10-14;];B=[0;5;0;6;-2;6;];>>MAXN=1000;TOL=1e-9;>>[xk]=SOR(A,B,w,MAXN,TOL)>>Direct(A,B,TOL)w取值11.051.21.31.61.95SOR方法求得结果x=1.00002.00001.00002.00001.00002.0000k=22x=1.00002.00001.00002.00001.00002.0000k=19x=1.00002.00001.00002.00001.00002.0000k=15x=1.00002.00001.00002.00001.00002.0000k=20x=1.00002.00001.00002.00001.00002.0000k=44x=1.00002.00001.00002.00001.00002.0000k=430高斯LU方法求得结果x=1.00002.00001.00002.00001.00002.0000结果分析SOR迭代方法能求解出此线性方程组AX=B的解,且松弛因子w的不同会造成迭代次数k的不同;高斯LU直接求解方法也能求出同样精度的解。表2测试2的实验结果及分析相应程序>>A=[3-10;360;330];>>B=[1;0;4];>>MAXN=1000;TOL=1e-9;>>[xk]=SOR(A,B,w,MAXN,TOL)>>Direct(A,B,TOL)w取值1SOR方法求得结果-1:矩阵有一列全为0-2:SOR方法不收敛x=0.6667-0.3333Infk=1高斯LU方法求得结果LUdecompsitionfailed.结果分析SOR迭代方法、高斯LU直接求解方法均不能求出线性方程组AX=B的解表3测试3的实验结果及分析相应程序>>A=[3-13;363;333];>>B=[1;0;4];>>MAXN=1000;TOL=1e-9;>>[xk]=SOR(A,B,w,MAXN,TOL)>>Direct(A,B,TOL)w取值1.2SOR方法求得结果0算法经过1000次迭代还未收敛x=1.0e+003*-1.5620-0.00001.5636k=1000残差法检验SOR方法求得的结果:>>A*x-Bans=3.90634.68750.7813高斯LU方法求得结果LUdecompsitionfailed.结果分析SOR迭代方法在有限的迭代次数内不能求出线性方程组AX=B的精确解,通过残差法检验可知此迭代解精度很低;高斯LU直接求解方法不能求出线性方程组AX=B的解。表4测试4的实验结果及分析相应程序>>A=[1020304;3-10.582.21.60;0004.53.221;2350002;-2-311003.3;2.54.500100;-0.5-1.53201-1];B=[3;8;2;4;1;-2;5];MAXN=1000;TOL=10-9;>>[xk]=SOR(A,B,w,MAXN,TOL)>>Direct(A,B,TOL)w取值11.11.31.8SOR方法求得结果-2:SOR方法不收敛x=-6.0000-13.7000-InfInfNaNNaNNaNk=1-2:SOR方法不收敛x=-6.7000-17.4800-InfInfNaNNaNNaNk=1-2:SOR方法不收敛x=-6.0000-13.7000-InfInfNaNNaNNaNk=1-2:SOR方法不收敛x=-11.6000-55.7000-InfInfNaNNaNNaNk=1高斯LU方法求得结果ans=2.7882-1.78490.5663-0.9072-0.93824.30560.4735残差法检验高斯LU方法求得的结果:>>A*ans-Bans=1.0e-014*000.1776-0.08880.1110-0.31090结果分析SOR迭代方法不能求出线性方程组AX=B的解;高斯LU直接求解方法能求出线性方程组AX=B的解且通过残差法检验得知此解的精度较高。表5测试5的实验结果及分析相应程序>>A=hilb(3);B=[1;1;1];MAXN=1000;TOL=1e-9;>>[xk]=SOR(A,B,w,MAXN,TOL)>>Direct(A,B,TOL)w取值11.31.61.9SOR方法求得结果0算法经过1000次迭代还未收敛x=3.0000-24.000030.0000k=1000x=3.0000-24.000030.0000k=572x=3.0000-24.000030.0000k=211x=3.0000-24.000030.0000k=547高斯LU方法求得结果x=3.0000-24.000030.0000残差法检验求得的结果:>>A*x-Bans=1.0e-010*-0.98730.52360.4211结果分析SOR迭代方法能求出线性方程组AX=B的解且随着松弛因子的不同迭代次数会发生变化;高斯LU直接求解方法能求出线性方程组AX=B的解。表6测试6的实验结果及分析相应程序>>A=hilb(4);B=[1;1;1;1];MAXN=10000;TOL=1e-6;>>[xk]=SOR(A,B,w,MAXN,TOL)>>[xk]=SOR(A,B,w,MAXN,TOL)>>Direct(A,B,TOL)w取值11.31.61.81.9SOR方法求得结果x=-0.08331.77502.08682.2262k=1x=-0.40832.64131.70942.3294k=1x=-2.56654.95380.21214.8818k=2x=-3.45194.3941-0.37166.8051k=3x=-0.8524-1.93328.56871.8299k=6高斯LU方法求得结果x=-4.000060.0000-180.0000140.0000残差法检验高斯LU方法求得的结果:>>A*x-Bans=1.0e-014*0.022200.13320.1110结果分析SOR方法求得的结果不稳定也不正确;高斯LU方法求得的结果通过残差法检验可知结果正确且精度较高。总体结果分析:从表1可知:对于有唯一解的线性方程组AX=B,SOR迭代方法和高斯LU直接求解方法均能较好的进行求解。从表2、3可知:对于有无穷多组解的线性方程组AX=B,SOR迭代方法可以得到一定迭代次数的迭代解,而高斯LU直接求解方法完全不能求出解。从表4可知:对于无解的线性方程组AX=B,SOR迭代方法不能求出有效解,而高斯LU直接求解方法可以得到精度较高的解。从表5可知:对于以维数较低的Hilbert病态矩阵〔3阶〕作为系数矩阵的线性方程组AX=B,虽然此线性方程组无精确解,但是SOR迭代方法和高斯LU直接求解方法还是能够较好的进行求解,且通过残差法检验可知得到的解精度较高。从表6可知:对于以维数较高的Hilbert病态矩阵〔4阶〕作为系数矩阵的线性方程组AX=B,此线性方程组无精确解。SOR迭代方法无法求出有效解;而通过残差法检验可知高斯LU直接求解方法可以得到精度较高的解。6.从表1、4、5、6可知:SOR迭代方法求解时的迭代次数受松弛因子的影响较大。7.从表4、5、6可知:高斯LU直接求解方法能够利用最小二乘法求出无解方程组精度较高的近似解。关于本设计的体会1.通过本次课程设计,我感受到了迭代法和直接法的不同特点。2.通过本次课程设计,使我对MATLAB的使用有了更深的理解,受益匪浅。3.通过本次课程设计,使我体会到了网络的巨大作用,它是一个广阔的交流平台。4.通过本次课程设计,增强了我对各种困难应对的自信心。参考文献[1]Recktenwald,G,数值方法与MATLAB实现与应用,北京:机械工业出版社,2004.9[2]史万明、吴裕树、孙新,数值分析,北京:北京理工大学出版社,2010.4附录SOR方法的MATLAB程序:function[xk]=SOR(A,B,w,MAXN,TOL)%超松弛〔SOR,SuccessiveOver-Relaxation〕迭代法求解线性方程组Ax=B%x:解向量,列向量%MAXN:迭代次数%x0:迭代初始值,列向量x0=ones(size(B));ifnargin==4TOL=0.5e-6;endifnargin==3MAXN=100;TOL=0.5e-6;end%检查输入参数n=length(B);ifsize(A,1)~=n||n~=length(x0)disp('输入参数有误!');endfori=1:nD=zeros(size(n));ifA(:,i)==Ddisp('-1:矩阵有一列全为0');break;endend%迭代求解k=0;x=zeros(n,1);while1k=k+1;fori=1:nz=0;forj=1:i-1z=z+A(i,j)*x(j);endforj=i+1:nz=z+A(i,j)*x0(j);endx(i)=(1-w)*x0(i)+w*(B(i)-z)/A(i,i);endifnorm(x-x0)<=TOL||k==MAXNbreak;endx0=x;ifnorm(x,inf)>1e8disp('-2:SOR方法不收敛');break;endendifk==MAXNdisp('0')fprintf('算法经过%d次迭代还未收敛',MAXN)end高斯LU分解的方法的MATLAB程序:function[x]=Direct(A,B,TOL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论