数值线性代数课设_第1页
数值线性代数课设_第2页
数值线性代数课设_第3页
数值线性代数课设_第4页
数值线性代数课设_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、数值线性代数课程设计报告姓名:陶英学号:081410124任课教师:杨熙南京航空航天大学2016 年 6 月 22日求解线性方程组的三种迭代法及其结果比较 摘要当今的环境下,数值计算越来越依赖于计算机。大规模科学计算和工程技术中许多问题的解决,最终归结为大型稀疏线性方程组的求解,其求解时间在整个问题求解时间中占有很大的比重,有的甚至达到80%。由于现今科学研究和大型项目中各种复杂的可以对计算精度和计算速度的要求越来越高。因此,作为大规模科学计算基础的线性代数方程组的高效数值求解引起了人们的普遍关注。这种方程组的求解一般采用迭代法。关于迭代法,是有很多种解决公式的:Jacobi,G-S和超松弛迭

2、代法。这三种方法的原理大致相同,Jacobi需要给定初向量,G-S则需要给定初值,超松弛法是对Guass-Seidel迭代法的加权平均改造。而本文则是对大型稀疏线性方程组迭代求解与三种迭代法(Jacobi,Gauss-Seidel和超松弛迭代法)的收敛速度与精确解的误差比较做出研究。关键词:Jacobi迭代法;Gauss-Seidel迭代法;SOR迭代法;线性方程组1 方法与理论的叙述1.1迭代法简介1.Jacobi迭代法:对于非奇异线性方程组Ax=b,令A=D-L-U,其中则原方程组可改写为: (2.2)其中给定初始向量:由(2.2)可以构造迭代公式:其分量形式为:2. Guass-Seid

3、el迭代法:类似于Jacobi迭代法,给定初值:令则得到Guass-Seidel公式:其分量形式为:3.超松弛迭代法(SOR 迭代法):SOR迭代法是对Guass-Seidel迭代法的加权平均改造,即为Guass-Seidel迭代解,即它的分量形式为:其中称为松弛因子,当>1时称为超松弛;当<1时叫低松弛;=1时就是Guass-Seidel迭代。上述三种经典迭代法收敛的充分必要条件是迭代矩阵谱半径小于1。谱半径不易求解,而在一定条件下,通过系数矩阵A的性质可判断迭代法的收敛性。定理1:若系数矩阵A是严格对角占优或不可约对角占优,则Jacobi迭代法和Gauss-Seidel迭代法均

4、收敛。定理2:(1)SOR迭代法收敛的必要条件是0<w<2;(2)若系数矩阵A严格对角占优或不可约对角占优且0<w<1,则SOR迭代法收敛。w=1时,SOR迭代法退化为Gauss-Seidel迭代法。2 数值结果2.1问题考虑两点边值问题:容易知道它的精确解为:为了将微分方程离散,把0,1区间n等分,令h=1/n,得到差分方程,从而得到迭代方程组的系数矩阵A。 对=1,a=1/2,n=100,分别用jacobi,G-S,超松弛迭代法分别求线性方程组的解,要求4位有效数字,然后比较与精确解的误差。对=0.1,=0.01,=0.001,考虑同样问题。1.方程的表示及存储由于

5、本题中线性方程组的系数矩阵为三对角矩阵,所以可以采用紧缩方法存储,即然后在矩阵乘法时对下标处理一下即可。但是考虑到三种迭代方法的一般性,且本题中n=200并不是很大,所以实验中并没有采用紧缩存储,而是采用了直接存储。2. 边值条件的处理由于差分得到的方程组的第一行和最后一行中分别出现了边值y(0)与y(1)作为常数项,因此要在常向量的第一项和最后一项作一些修改:3.迭代终止条件首先确定要求的精度tol ,我们希望当则停止迭代。对于迭代格式,若且,则迭代序列的第k 次近似解和精确解之间有估计式。由题目要求知我们需要有,而由上面的迭代估计,只要,即即可。而本题中q可近似取为,因此最后令迭代终止条件

6、为4.SOR 迭代中最佳松弛因子的选取由于SOR 迭代法的效果和其松弛因子w的选取有关,所以有必要选取合适的松弛因子。当选择最佳松弛因子时,SOR 方法的迭代速度最快。Matlab实现:迭代矩阵是n-1阶的,不是n阶;等号右端向量b的最后一项,不是ah2,而是ah2-eps-h2.2精确解带入a=1/2,=1代码:>> clear>> x=linspace(0,1);truy=(1-0.5)/(1-exp(-1/1)*(1-exp(-x./1)+x.*0.5;figure;plot(x,truy,'g','LineWidth',1.5);

7、hold on;Grid图:2.3三种迭代法Jacobi法:代码见附录Eps=1结果:迭代次数k:22273结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.1结果:迭代次数k:8753结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.01结果:迭代次数k:661结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)G-S迭代法:代码见附录Eps=1结果:迭代次数k:11125结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.1结果:迭代次数k:4394结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0

8、.01结果:迭代次数k:379结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)超松弛法:代码见附录Eps=1 w=1.56结果:迭代次数k:3503结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.1 w=1.56结果:迭代次数k:1369结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.01 w=1.56结果:迭代次数k:131结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)3 分析讨论及心得体会3.1三种方法的比较Jacobi、G-S、超松弛法,三者都能够取得对精确解的良好逼近,但是,在相同的精度条件下,三者的收敛速度是不

9、一样的,jacobi<G-S<超松弛,也就是说,在迭代次数相同的条件下,精度:jacobi<G-S<超松弛。3.2心得体会这次课程设计,平时感觉挺简单的那些枯燥单调的代码和数学公式,真正到了自己运用的时候却无从下手,但是,解决问题的过程恰是不断学习的过程:数学算法转换为代码的过程要对题目有深入的了解,然后对程序函数定义还要有一定的掌握能力,通过这个的过程让我巩固了自己的数学知识,对数学专业知识和MATLAB的操作有了更深的体会。  课程设计中遇到的问题只凭自己苦思冥想是不能全部解决的,这是同学老师的建议和网络给了我很大的帮助。遇到自己解决不了的问题时

10、,多多向老师同学请教,或许问题就能迎刃而解。4参考文献1徐树方.数值线性代数.北京:北京大学出版社,1995.2马昌凤.现代数值分析.北京:国防工业出版社.2013.3刘春凤,米翠兰.实用数值分析教程.北京冶金工业出版社.20065附录源代码1.Jacobi:function y,k=jacobi2(a,eps,h,delta)n=1.0/h;A=ones(n-1);y=zeros(n-1,1);z=zeros(n-1,1);k=0;for i=1:n-1 for j=1:n-1 A(i,j)=0; endendfor i=1:n-1 A(i,i)=-(2*eps+h);endfor i=1:

11、n-1 for j=1:n-1 if i=j+1 A(i,j)=eps; end if i=j-1 A(i,j)=eps+h; end endendb=zeros(n-1,1);for i=1:n-2 b(i,1)=a*h2;endb(n-1,1)=a*h2-eps-h;D=zeros(n-1);for i=1:n-1 D(i,i)=A(i,i);endL=zeros(n-1);for i=1:n-1 for j=1:n-1if i>j L(i,j)=-A(i,j);end endendU=zeros(n-1);for i=1:n-1 for j=1:n-1 if i<j U(i,

12、j)=-A(i,j); end endendB=D(L+U);g=Db;while 1 z=B*y+g; if norm(z-y,inf)<delta break; end y=z;k=k+1;end x=linspace(0,1);truy=(1-a)/(1-exp(-1/eps)*(1-exp(-x./eps)+x.*a;figure;plot(100*x,truy,'g','LineWidth',5);hold on;gridhold on;plot(y,'b')2.G-S:function y,k=gs2(a,eps,h,delta

13、)n=1.0/h;A=ones(n-1);y=zeros(n-1,1);z=zeros(n-1,1);k=0;for i=1:n-1 for j=1:n-1 A(i,j)=0; endendfor i=1:n-1 A(i,i)=-(2*eps+h);endfor i=1:n-1 for j=1:n-1 if i=j+1 A(i,j)=eps; end if i=j-1 A(i,j)=eps+h; end endendb=zeros(n-1,1);for i=1:n-2 b(i,1)=a*h2;endb(n-1,1)=a*h2-eps-h;D=zeros(n-1);for i=1:n-1 D(i

14、,i)=A(i,i);endL=zeros(n-1);for i=1:n-1 for j=1:n-1if i>j L(i,j)=-A(i,j);end endendU=zeros(n-1);for i=1:n-1 for j=1:n-1 if i<j U(i,j)=-A(i,j); end endendB=D(L+U);g=Db;while 1 z=(D-L)U*y+(D-L)b; if norm(z-y,inf)<delta break; end y=z;k=k+1;end x=linspace(0,1);truy=(1-a)/(1-exp(-1/eps)*(1-exp(-

15、x./eps)+x.*a;figure;plot(100*x,truy,'g','LineWidth',5);hold on;gridhold on;plot(y,'b')3.SOR:function y,k=sor(a,eps,h,delta,w)n=1.0/h;A=ones(n-1);y=zeros(n-1,1);z=zeros(n-1,1);k=0;for i=1:n-1 for j=1:n-1 A(i,j)=0; endendfor i=1:n-1 A(i,i)=-(2*eps+h);endfor i=1:n-1 for j=1:n-1

16、if i=j+1 A(i,j)=eps; end if i=j-1 A(i,j)=eps+h; end endendb=zeros(n-1,1);for i=1:n-2 b(i,1)=a*h2;endb(n-1,1)=a*h2-eps-h;D=zeros(n-1);for i=1:n-1 D(i,i)=A(i,i);endL=zeros(n-1);for i=1:n-1 for j=1:n-1if i>j L(i,j)=-A(i,j);end endendU=zeros(n-1);for i=1:n-1 for j=1:n-1 if i<j U(i,j)=-A(i,j); end endendB=D(L+U);g=Db;Lw=(D-w*L)-1)*

温馨提示

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

评论

0/150

提交评论