数学软件实验任务书课程名称数学软件实验班级学号实验课题线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法实验目的熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成实验内容线性方程组的J-迭代线性方程组的GS-迭代线性方程组的SOR-迭代线性方程组的SSOR-迭代方法成绩教师实验1Jacobi迭代一实验原理系数矩阵A的主对角元不全为0,如果A作以下分解:A=D-L-U;其中D为A的住对角线元素构成的矩阵,L为下三角矩阵,U为上三角矩阵,得到了Jacibi迭代法,它的迭代公式为:111()kkxIDAxDb二数据来源用Jacobi迭代求解下列方程组1231231234748212515xxxxxxxxx三实验步骤步骤一:编写Jacobi迭代法的函数。在打开Editor编辑器,输入以下语句:functionJacobiclcclearallmax1=1000;%迭代次数tol=10e-5;%设置迭代精度A=[4-11;4-81;-215];b=[7-2115]';x0=[000]';%计算D,L,Un=length(A);D=zeros(n);L=zeros(n);U=zeros(n);fori=1:nforj=1:nifi==jD(i,j)=A(i,j);elseifijL(i,j)=-A(i,j);elseU(i,j)=-A(i,j);endendendD;L;U;Bj=inv(D)*(L+U);f=inv(D)*b;x=Bj*x0+f;k=1;%迭代次数whilenorm(x-x0)=tolx0=x;x=Bj*x0+f;k=k+1;if(k=max1)disp('Warning:迭代次数到多,可能不收敛!');return;endendx以文件Jacobi保持4计算结果运行程序可以得到运算结果x=2.00004.00003.0000x是线性方程组的解k=11k为迭代次数。实验2Gauss-Seidel迭代1实验原理系数矩阵A的主对角元不全为0,如果A作以下分解:A=D-L-U其中D的意义同雅可比迭代法,L为下三角矩阵,U为上三角矩阵,得到了Gauss-Seidel迭代法,它的迭代公式为:111()()kkxDLUxDLb2数据来源用Gauss-Seidel迭代求解下列方程组1231231234748212515xxxxxxxxx3实验步骤步骤一:编写GS迭代法的函数。在打开Editor编辑器,输入以下语句:functiongauseidelclcclearallmax1=1000;%迭代次数tol=10e-5;%近似精度A=[4-11;4-81;-215];b=[7-2115]';x0=[000]';n=length(A);D=zeros(n);L=zeros(n);U=zeros(n);%求D,L,Ufori=1:nforj=1:nifi==jD(i,j)=A(i,j);elseifijL(i,j)=-A(i,j);elseU(i,j)=-A(i,j);endendendD;L;U;%求G,fG=(D-L)\U;f=(D-L)\b;x=G*x0+f;k=1;%迭代格式whilenorm(x-x0)=tolx0=x;x=G*x0+f;k=k+1;if(k=max1)disp('迭代次数过多,可能不收敛');return;endendx文件保存名为gauseidel4计算结果运行程序得到运算结果:x=2.00004.00003.0000x是线性方程组的解k=7k为迭代次数。实验3SOR迭代1实验原理对A作一些分解:1()((1))ADLDU,Q,L,U的意义与Gauss-Seidel迭代法相同。是一个事先选好的常数,称为松弛因子,当1时叫超松弛法,也叫SOR迭代法。其迭代公式为:111()((1))()kkxDLDUxDLb2数据来源用SOR迭代求解下列方程组1231231234748212515xxxxxxxxx3实验步骤步骤一:编写SOR迭代法的函数。在打开Editor编辑器,输入以下语句:functionSORclcclearallmax1=1000;%迭代次数tol=10e-5;%设置迭代近似精度A=[4-11;4-81;-215];b=[7-2115]';x0=[000]';n=length(A);D=zeros(n);L=zeros(n);U=zeros(n);%求L,Ufori=1:nforj=1:nifi==jD(i,j)=A(i,j);elseifijL(i,j)=-A(i,j);elseU(i,j)=-A(i,j);endendendD;L;U;w=1.5;%设置松弛系数%迭代格式B=inv(D-L*w)*((1-w)*D+w*U);f=w*inv((D-L*w))*b;x=B*x0+f;k=1;%迭代次数whilenorm(x-x0)=tolx0=x;x=B*x0+f;k=k+1;if(k=max1)disp('迭代次数过多可能不收敛');return;endendx文件保存为SOR4计算结果x=2.00004.00003.0000x是线性方程组的解k=18k为迭代次数。实验四SSOR-迭代方法1实验原理超松弛迭代还有一种改进形式,叫做对称逐次超松弛迭代(SSOR),它采用的是两步迭代公式:1/2()()(1)kkkDLxUxbDx11/2()()(1)kkkDLxLxbDx2数据来源用SSOR迭代求解下列方程组1231231234748212515xxxxxxxxx3实验步骤步骤一:编写SOR迭代法的函数。在打开Editor编辑器,输入以下语句:functionSSORclcclearallmax1=1000;%迭代次数eps=10e-5;%近似精度A=[4-11;4-81;-215];b=[7-2115]';x0=[000]';n=length(A);D=zeros(n);L=zeros(n);U=zeros(n);%计算D,L,Ufori=1:nforj=1:nifi==jD(i,j)=A(i,j);elseifijL(i,j)=-A(i,j);elseU(i,j)=-A(i,j);endendendD;L;U;w=1.5;%松弛因子%迭代格式B1=inv(D-L*w)*((1-w)*D+w*U);B2=inv(D-U*w)*((1-w)*D+w*L);f1=w*inv((D-L*w))*b;f2=w*inv((D-U*w))*b;x=x0k=0;%迭代次数tol=1whiletol=eps;x1=B1*x0+f1;x=B2*x1+f2;k=k+1;tol=norm(x-x0);x0=x;if(k=max1)disp('迭代次数太多,SOR方法可能不收敛');return;endendxk文件保存为SSOR4计算结果x=2.00004.00003.0000k=11实验结论以上用3种迭代方法对同一个线性方程组在相同精度要求下分别进行了求解,从计算方法及最后的结果我们可以得到:高斯—赛的尔迭代比雅可比迭代在相同精度要求下收敛的快,即高斯—赛的尔迭代所需要迭代的次数较少(雅可比迭代,k=11;高斯—赛的尔迭代,k=7),高斯—赛的尔迭代相当于是雅可比迭代的改进。SOR迭代,从算法的设计来看它是对高斯—赛的尔迭代的改进,使得计算结果的误差降低,SSOR迭代是SOR迭代与高斯—赛的尔迭代的综合,是SOR的改进使得计算误差更小,但是SOR和SSOR引入了松弛因子,松弛因子的取值可能会使迭代速度加快也有可能使迭代速度减慢。所以SOR、SSOR迭代虽然计算结果误差降低但是如果松弛因子取值不合适会使迭代速度慢。如在本实验中SOR迭代k=18(即迭代了18次),SSOR迭代,k=11(即迭代了11次),这超过了高斯—赛德尔迭代和雅可比迭代。因此每种算法都有各自的优缺点,在实际应用中我们应根据实际要求选择合适的迭代方法。