资源描述:
《数值计算方法课程设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、设计成绩:重庆邮电大学数学与应用数学专业《数值计算方法》课程设计姓名:李金徽王莹刘姝楠班级:学号:设计时间:2012-6-4指导教师:朱伟10一、课程设计目的在科学计算与工程设计中,我们常会遇到求解线性方程组的问题,对于系数矩阵为低阶稠密矩阵的线性方程组,可以用直接法进行消元,而对于系数矩阵为大型稀疏矩阵的情况,直接法就显得比较繁琐,而迭代法比较适用。比较常用的迭代法有Jacobi迭代与Gauss-seidel迭代。本文基于两种方法设计算法,并比较他们的优劣。二、课程设计内容给出Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组的算法思想和MAT
2、LAB程序实现,并对比分析这两种算法的优劣。三、问题的分析(含涉及的理论知识、算法等)Jacobi迭代法方程组迭代法的基本思想和求根的迭代法思想类似,即对于线性方程组Ax=b(其中),即方程组将系数矩阵A写为若选取,则,方程组转化为等价方程组10。Gauss-Seidel迭代法10算法步骤:Jacobi步骤第一步:输入A,b,x0,e的初始值第二步:求出b的长度,和A的大小;判断输入变量的个数,使x与x0之间产生差值,设定,给定k的初始值;第三步:求出上下三角矩阵进而求出对角矩阵的逆;第四步:求出谱半径,当谱半径小于一时,用while循环,当满足时,k=k+1
3、;。若谱半径不小于一,则迭代法发散。Gauss-Seidel步骤:第一步:输入A,b,x0,e的初始值第二步:求出b的长度,和A的大小;判断输入变量的个数,使x与x0之间产生差值,设定,给定k的初始值;10第三步:求出下三角矩阵并求出它的逆;第四步:求出谱半径,当谱半径小于一时,用while循环,当满足时,k=k+1;。若谱半径不小于一,则迭代法发散。一、计算过程(含涉及编写的程序、计算结果截屏等)Jacobi程序:先建立一个m文件程序为:function[x,k]=Jacobi(A,b,x0,e)n=length(b);ifnargin<4,e=1e-4;e
4、ndifnargin<3,x0=zeros(n,1);endx=x0;x0=x+2*e;k=0;m=size(A);fori=1:mAl(i:m,i)=A(i:m,i);Au(i,i:m)=A(i,i:m);a(i,i)=1;endiAl=a/Al;iAu=a/(Al+Au-A);B=-iAu*(2*A-Au-Al);C=eig(B);p=max(abs(C))ifp<1whilenorm(x0-x,inf)>ek=k+1;x0=x;x=-iAu*(2*A-Au-Al)*x0+iAu*b;disp(x')endelseifp>=1,warning('reach
5、edtheMax-numberofiterations');end在matlab中的举例运行的计算结果为:10>>A=[10-1-2;-110-2;-1-10.5];>>b=[7.28.34.2]';>>[x,k]=Jacobi(A,b,[000]',1e-4)p=0.9458x=24.499624.5996106.5983k=198Gauss-Seidel程序:先建立一个m文件程序为:function[x,k]=GaussSeidel(A,b,x0,e)n=length(b);ifnargin<4,e=1e-4;endifnargin<3,x0=zeros(
6、n,1);endx=x0;x0=x+3*e;k=0;m=size(A);fori=1:mAl(i:m,i)=A(i:m,i);a(i,i)=1;endiAl=a/Al;B=-iAl*(A-Al);C=eig(B);p=max(abs(C))ifp<1whilenorm(x0-x,inf)>ek=k+1;x0=x;x=-iAl*(A-Al)*x0+iAl*b;disp(x')endelseifp>=1,warning('reachedtheMax-numberofiterations');end在matlab中的举例运行的计算结果为:>>A=[10-1-2;-1
7、10-2;-1-10.5];>>b=[7.28.34.2]';>>[x,k]=GaussSeidel(A,b,[000]',1e-4)10p=0.8947x=24.499824.5998106.5992k=106由于147<198,所以Gauss-Seidel迭代法的收敛速度总是比Jacobi迭代法的收敛速度快。但是当初始值变成如下时有:>>A=[12-2;111;221];>>b=[122]';>>[x,k]=Jacobi(A,b,[000]',1e-4)p=9.1754e-0061221-1-4-552-552x=-552k=4>>A=[12-2;111;
8、221];>>b=[122]';>>[