清华大学数值分析报告某实验报告材料(共49页).docx
精选优质文档-倾情为你奉上数值分析实验报告 一、 实验3.1题目:考虑线性方程组,编制一个能自动选取主元,又能手动选取主元的求解线性代数方程组的Gauss消去过程。(1)取矩阵,则方程有解。取计算矩阵的条件数。分别用顺序Gauss消元、列主元Gauss消元和完全选主元Gauss消元方法求解,结果如何?(2)现选择程序中手动选取主元的功能,每步消去过程都选取模最小或按模尽可能小的元素作为主元进行消元,观察并记录计算结果,若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。(4)选取其他你感兴趣的问题或者随机生成的矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。1. 算法介绍首先,分析各种算法消去过程的计算公式,顺序高斯消去法:第k步消去中,设增广矩阵中的元素(若等于零则可以判定系数矩阵为奇异矩阵,停止计算),则对k行以下各行计算,分别用乘以增广矩阵的第行并加到第行,则可将增广矩阵中第列中以下的元素消为零;重复此方法,从第1步进行到第n-1步,则可以得到最终的增广矩阵,即;列主元高斯消去法:第k步消去中,在增广矩阵中的子方阵中,选取使得,当时,对中第行与第行交换,然后按照和顺序消去法相同的步骤进行。重复此方法,从第1步进行第n-1步,就可以得到最终的增广矩阵,即;完全主元高斯消去法:第k步消去中,在增广矩阵中对应的子方阵中,选取使得,若或,则对中第行与第行、第列与第列交换,然后按照和顺序消去法相同的步骤进行即可。重复此方法,从第1步进行到第n-1步,就可以得到最终的增广矩阵,即;接下来,分析回代过程求解的公式,容易看出,对上述任一种消元法,均有以下计算公式:2. 实验程序的设计一、输入实验要求及初始条件;二、计算系数矩阵A的条件数及方程组的理论解;三、对各不同方法编程计算,并输出最终计算结果。3. 计算结果及分析(1)先计算系数矩阵的条件数,结果如下,可知系数矩阵的条件数较大,故此问题属于病态问题, b或A的扰动都可能引起解的较大误差;采用顺序高斯消去法,计算结果为:最终解为x=(1.0000, 1.0000, 1.0000, 1.0001, 0.9998, 1.0004, 0.9993, 1.0012, 0.9979, 1.0028)T使用无穷范数衡量误差,得到=2.0401e-14,可以发现,采用顺序高斯消元法求得的解与精确解之间误差较小。通过进一步观察,可以发现,按照顺序高斯消去法计算时,其选取的主元值和矩阵中其他元素大小相近,因此顺序高斯消去法方式并没有对结果造成特别大的影响。 若采用列主元高斯消元法,则结果为:最终解为x=(1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)T同样使用无穷范数衡量误差,有=0; 若使用完全主元高斯消元法,则结果为最终解x=(1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000)T同样使用无穷范数衡量误差,有=0;(2)若每步都选取模最小或尽可能小的元素为主元,则计算结果为最终解x=(1.0000 1.0000 1.0000 1.0001 0.9998 1.0004 0.9993 1.0012 0.9979 1.0028)T使用无穷范数衡量误差,有为2.0401e-14;而完全主元消去法的误差为=0。从(1)和(2)的实验结果可以发现,列主元消去法和完全主元消去法都得到了精确解,而顺序高斯消去法和以模尽量小的元素为主元的消去法没有得到精确解。在后两种消去法中,由于程序计算时的舍入误差,对最终结果产生了一定的影响,但由于方程组的维度较低,并且元素之间相差不大,所以误差仍比较小。为进一步分析,计算上述4种方法每步选取的主元数值,并列表进行比较,结果如下:第n次消元顺序列主元完全主元模最小16.0000886.000024.6667884.666734.4286884.428644.3333884.333354.2258884.225864.6032884.603274.6063884.606384.4902884.490294.4853884.4853104.30990.54690.54694.3099从上表可以发现,对这个方程组而言,顺序高斯消去选取的主元恰好事模尽量小的元素,而由于列主元和完全主元选取的元素为8,与4在数量级上差别小,所以计算过程中的累积误差也较小,最终4种方法的输出结果均较为精确。在这里,具体解释一下顺序法与模最小法的计算结果完全一致的原因。该矩阵在消元过程中,每次选取主元的一列只有两个非零元素,对角线上的元素为4左右,而其正下方的元素为8,该列其余位置的元素均为0。在这样的情况下,默认的主元也就是该列最小的主元,因此两种方法所得到的计算结果是一致的。理论上说,完全高斯消去法的误差最小,其次是列主元高斯消去法,而选取模最小的元素作为主元时的误差最大,但是由于方程组的特殊性(元素相差不大并且维度不高),这个理论现象在这里并没有充分体现出来。(3)时,重复上述实验过程,各种方法的计算结果如下所示,在这里,仍采用无穷范数衡量绝对误差。顺序高斯消去法列主元高斯消去完全主元高斯消去选取模最小或尽可能小元素作为主元消去X1.0000 1.0000 1.0000 1.0001 0.9998 1.0004 0.9993 1.0014 0.9972 1.0057 0.98861.0227 0.9547 1.0902 0.8209 1.3524 0.3179 1.2732 0.8173 1.910211111111111111111111111111111111111111111.0000 1.0000 1.0000 1.0001 0.9998 1.0004 0.9993 1.0014 0.9972 1.0057 0.98861.0227 0.9547 1.0902 0.8209 1.3524 0.3179 1.2732 0.8173 1.91022.9430e-11002.9430e-11 可以看出,此时列主元和完全主元的计算结果仍为精确值,而顺序高斯消去和模尽可能小方法仍然产生了一定的误差,并且两者的误差一致。与n=10时候的误差比相比,n=20时的误差增长了大约1000倍,这是由于计算过程中舍入误差的不断累积所致。所以,如果进一步增加矩阵的维数,应该可以看出更明显的现象。(4)不同矩阵维度下的误差如下,在这里,为方便起见,选取2-条件数对不同维度的系数矩阵进行比较。维度条件数顺序消去列主元完全主元模尽量小1.7e+32.84e-14002.84e-141.8e+62.91e-11002.91e-115.7e+79.31e-10009.31e-101.8e+92.98e-08002.98e-081.9e+123.05e-05003.05e-053.8e+163.28e+043.88e-123.88e-123.28e+048.5e+163.52e+134.2e-34.2e-33.52e+13 从上表可以看出,随着维度的增加,不同方法对计算误差的影响逐渐体现,并且增长较快,这是由于舍入误差逐步累计而造成的。不过,方法二与方法三在维度小于40的情况下都得到了精确解,这两种方法的累计误差远比方法一和方法四慢;同样地,出于与前面相同的原因,方法一与方法四的计算结果保持一致,方法二与方法三的计算结果保持一致。4. 结论本文矩阵中的元素差别不大,模最大和模最小的元素并没有数量级上的差异,因此,不同的主元选取方式对计算结果的影响在维度较低的情况下并不明显,四种方法都足够精确。对比四种方法,可以发现采用列主元高斯消去或者完全主元高斯消去法,可以尽量抑制误差,算法最为精确。不过,对于低阶的矩阵来说,四种方法求解出来的结果误差均较小。另外,由于完全选主元方法在选主元的过程中计算量较大,而且可以发现列主元法已经可以达到很高的精确程度,因而在实际计算中可以选用列主元法进行计算。附录:程序代码clearclc;format long;%方法选择n=input('矩阵A阶数:n=');disp('选取求解方式');disp('1 顺序Gauss消元法,2 列主元Gauss消元法,3 完全选主元Gauss消元法,4 模最小或近可能小的元素作为主元');a=input('求解方式序号:');%赋值A和bA=zeros(n,n);b=zeros(n,1);for i=1:n A(i,i)=6; if i>1 A(i,i-1)=8; end if i<n A(i,i+1)=1; endendfor i=1:n for j=1:n b(i)=b(i)+A(i,j); endenddisp('给定系数矩阵为:');Adisp('右端向量为:');b%求条件数及理论解disp('线性方程组的精确解:');X=(Ab)' fprintf('矩阵A的1-条件数: %f n',cond(A,1);fprintf('矩阵A的2-条件数: %f n',cond(A);fprintf('矩阵A的无穷-条件数: %f n',cond(A,inf); %顺序Gauss消元法 if a=1 A1=A;b1=b; for k=1:n if A1(k,k)=0 disp('主元为零,顺序Gauss消元法无法进行'); break end fprintf('第%d次消元所选取的主元:%gn',k,A1(k,k) %disp('此次消元后系数矩阵为:'); %A1 for p=k+1:n l=A1(p,k)/A1(k,k); A1(p,k:n)=A1(p,k:n)-l*A1(k,k:n); b1(p)=b1(p)-l*b1(k); end endx1(n)=b1(n)/A1(n,n);for k=n-1:-1:1 for w=k+1:n b1(k)=b1(k)-A1(k,w)*x1(w); end x1(k)=b1(k)/A1(k,k);end disp('顺序Gauss消元法解为:'); disp(x1); disp('所求解与精确解之差的无穷-范数为'); norm(x1-X,inf) end%列主元Gauss消元法if a=2 A2=A;b2=b; for k=1:n max_i,max_j=find(A2(:,k)=max(abs(A2(k:n,k); if max_i=k A2_change=A2(k,:); A2(k,:)=A2(max_i,:); A2(max_i,:)=A2_change; b2_change=b2(k); b2(k)=b2(max_i); b2(max_i)=b2_change; end if A2(k,k)=0 disp('主元为零,列主元Gauss消元法无法进行'); break end fprintf('第%d次消元所选取的主元:%gn',k,A2(k,k) %disp('此次消元后系数矩阵为:'); %A2 for p=k+1:n l=A2(p,k)/A2(k,k); A2(p,k:n)=A2(p,k:n)-l*A2(k,k:n); b2(p)=b2(p)-l*b2(k); end endx2(n)=b2(n)/A2(n,n);for k=n-1:-1:1 for w=k+1:n b2(k)=b2(k)-A2(k,w)*x2(w); end x2(k)=b2(k)/A2(k,k);end disp('列主元Gauss消元法解为:'); disp(x2); disp('所求解与精确解之差的无穷-范数为'); norm(x2-X,inf) end%完全选主元Gauss消元法if a=3 A3=A;b3=b; for k=1:n VV=eye(n); max_i,max_j=find(A3(k:n,k:n)=max(max(abs(A3(k:n,k:n); if numel(max_i)=0 max_i,max_j=find(A3(k:n,k:n)=-max(max(abs(A3(k:n,k:n); end W=eye(n); W(max_i(1)+k-1,max_i(1)+k-1)=0; W(k,k)=0; W(max_i(1)+k-1,k)=1; W(k,max_i(1)+k-1)=1; V=eye(n); V(k,k)=0; V(max_j(1)+k-1,max_j(1)+k-1)=0; V(k,max_j(1)+k-1)=1; V(max_j(1)+k-1,k)=1; A3=W*A3*V; b3=W*b3; VV=VV*V; if A3(k,k)=0 disp('主元为零,完全选主元Gauss消元法无法进行'); break end fprintf('第%d次消元所选取的主元:%gn',k,A3(k,k) %disp('此次消元后系数矩阵为:'); %A3 for p=k+1:n l=A3(p,k)/A3(k,k); A3(p,k:n)=A3(p,k:n)-l*A3(k,k:n); b3(p)=b3(p)-l*b3(k); end endx3(n)=b3(n)/A3(n,n);for k=n-1:-1:1 for w=k+1:n b3(k)=b3(k)-A3(k,w)*x3(w); end x3(k)=b3(k)/A3(k,k);end disp('完全选主元Gauss消元法解为:'); disp(x3); disp('所求解与精确解之差的无穷-范数为'); norm(x3-X,inf) end%模最小或近可能小的元素作为主元if a=4 A4=A;b4=b; for k=1:n AA=A4; AA(AA=0)=NaN; min_i,j=find(AA(k:n,k)=min(abs(AA(k:n,k); if numel(min_i)=0 min_i,j=find(AA(k:n,k)=-min(abs(AA(k:n,k:n); end W=eye(n); W(min_i(1)+k-1,min_i(1)+k-1)=0; W(k,k)=0; W(min_i(1)+k-1,k)=1; W(k,min_i(1)+k-1)=1; A4=W*A4; b4=W*b4; if A4(k,k)=0 disp('主元为零,模最小Gauss消元法无法进行'); break end fprintf('第%d次消元所选取的主元:%gn',k,A4(k,k) %A4 for p=k+1:n l=A4(p,k)/A4(k,k); A4(p,k:n)=A4(p,k:n)-l*A4(k,k:n); b4(p)=b4(p)-l*b4(k); end endx4(n)=b4(n)/A4(n,n);for k=n-1:-1:1 for w=k+1:n b4(k)=b4(k)-A4(k,w)*x4(w); end x4(k)=b4(k)/A4(k,k);end disp('模最小Gauss消元法解为:'); disp(x4); disp('所求解与精确解之差的无穷-范数为'); norm(x4-X,inf) end二、实验3.3题目:考虑方程组的解,其中系数矩阵H为Hilbert矩阵:这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端的办法给出确定的问题。(1)选择问题的维数为6,分别用Gauss消去法(即LU分解)、J迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何。(2)逐步增大问题的维数,仍用上述的方法来解它们,计算的结果如何?计算的结果说明的什么?(3)讨论病态问题求解的算法。1. 算法设计 对任意线性方程组,分析各种方法的计算公式如下,(1)Gauss消去法:首先对系数矩阵进行LU分解,有,则原方程转化为,令,则原方程可以分为两步回代求解:具体方法这里不再赘述。(2)J迭代法:首先分解,再构造迭代矩阵,其中 ,进行迭代计算,直到误差满足要求。(3)GS迭代法:首先分解,再构造迭代矩阵 ,其中 ,进行迭代计算,直到误差满足要求。(4)SOR迭代法:首先分解,再构造迭代矩阵 ,其中,进行迭代计算,直到误差满足要求。2. 实验过程一、根据维度n确定矩阵H的各个元素和b的各个分量值;二、选择计算方法( Gauss消去法,J迭代法,GS迭代法,SOR迭代法),对迭代法设定初值,此外SOR方法还需要设定松弛因子;三、进行计算,直至满足误差要求(对迭代法,设定相邻两次迭代结果之差的无穷范数小于0.0001;对SOR方法,设定为输出迭代100次之后的结果及误差值),输出实验结果。3. 计算结果及分析(1)时,问题可以具体定义为计算结果如下,Gauss消去法第1次消元所选取的主元是:1第2次消元所选取的主元是:0.第3次消元所选取的主元是:0.第4次消元所选取的主元是:0.第5次消元所选取的主元是:2.26757e-05第6次消元所选取的主元是:1.43155e-06解得X=(0.9228 1.1937 0.1792 1.5369 0.4584 1.7680)T使用无穷范数衡量误差,可得=4.9847e-10;J迭代法设定迭代初值为零,计算得到 J法的迭代矩阵B的谱半径为4.308531,所以J法不收敛;GS迭代法设定迭代初值为零,计算得到GS法的迭代矩阵G的谱半径为:0.1,故GS法收敛,经过541次迭代计算后,结果为X=(1.2706 0.1860 0.4902 1.9162 1.0281 0.4608)T使用无穷范数衡量误差,有=0.9162;SOR迭代法设定迭代初值为零向量,并设定,计算得到SOR法迭代矩阵谱半径为0.5223,经过100次迭代后的计算结果为X=(1.5078 0.8423 1.4559 1.9881 1.7164 0.3527)T;使用无穷范数衡量误差,有=0.6473;对SOR方法,可变,改变值,计算结果可以列表如下迭代次数100100100100迭代矩阵的谱半径0.52230.31550.50130.2386X1.4694 0.9353 1.2440 1.1827 1.2681 0.62681.46040.40961.62651.81481.53310.92551.51470.98431.40721.78910.26020.44671.39660.91561.25100.81191.82700.45880.37320.07450.40720.2510可以发现,松弛因子的取值对迭代速度造成了不同的影响,上述四种方法中,松弛因子=0.5时,收敛相对较快。综上,四种算法的结果列表如下:算法Gauss消去法Jacobi法GS法SOR法(取)迭代次数-不收敛541100迭代矩阵的谱半径-4.308530.0.5223X0.9228 1.1937 0.1792 1.5369 0.4584 1.7680-1.2706 0.1860 0.4902 1.9162 1.0281 0.46081.5078 0.8423 1.4559 1.9881 1.7164 0.35274.9847e-10-0.91620.6473计算可得,矩阵H的条件数为>>1,所以这是一个病态问题。由上表可以看出,四种方法的求解都存在一定的误差。下面分析误差的来源:LU分解方法的误差存在主要是由于Hilbert矩阵各元素由分数形式转换为小数形式时,不能除尽情况下会出现舍入误差,在进行LU分解时也存在这个问题,所以最后得到的结果不是方程的精确解 ,但结果显示该方法的误差非常小;Jacobi迭代矩阵的谱半径为4.30853,故此迭代法不收敛;GS迭代法在迭代次数为541次时得到了方程的近似解,其误差约为0.05 ,比较大。GS迭代矩阵的谱半径为0.,很接近1,所以GS迭代法收敛速度较慢;SOR迭代法在迭代次数为100次时误差约为0.08,误差较大。SOR迭代矩阵的谱半径为0.,也很接近1,所以时SOR迭代法收敛速度不是很快,但是相比于GS法,在迭代速度方面已经有了明显的提高;另外,对不同的,SOR方法的迭代速度会相应有变化,如果选用最佳松弛因子,可以实现更快的收敛;(2)考虑不同维度的情况,时,算法Gauss消去J法GS法SOR法(w=0.5)计算结果0.6269 1.9060 0.2676 1.8103 0.4116 1.2164 0.7125 1.4747-0.53491.68390.60151.50361.25761.66120.53640.55361.56340.51710.30811.51541.39741.55140.84690.7655迭代次数-356100谱半径-6.0421310.8776-时,算法Gauss消去法Jacobi法GS法SOR法(w=0.5)计算结果0.1197 1.6354 0.3700 1.8631 0.4329 1.7805 0.9370 1.1556 0.5812 1.9020 0.5643-0.67511.84090.67390.32370.13531.65911.66081.85331.94220.62500.06971.65720.44830.79100.27271.35371.64681.50691.11920.24240.41420.1922迭代次数-1019100谱半径-8.6496410.9966-时算法Gauss消去法Jacobi法GS法SOR法(w=0.5)计算结果0.3799 1.4896 0.9769 0.7706 1.9297 0.5194 2.5890 -2.2128 7.1018 -7.9081 7.0484-1.5142 0.7065 1.1601 0.3362-不收敛1.15901.75540.77290.90530.84571.79031.87641.39441.97681.60561.51760.20410.80030.40650.3220迭代次数-262100谱半径-6.0421311.00008.9082-0.6780分析以上结果可以发现,随着n值的增加,Gauss消去法误差逐渐增大,而且误差增大的速度很快,在维数小于等于10情况下,Gauss消去法得到的结果误差较小;但当维数达到15时,计算结果误差已经达到精确解的很多倍;J法迭代不收敛,无论n如何取值,其谱半径始终大于1,因而J法不收敛,所以J迭代法不能用于Hilbert矩阵的求解;对于GS迭代法和SOR迭代法,两种方法均收敛,GS迭代法是SOR迭代法松弛因子取值为1的特例,SOR方法受到取值的影响,会有不同的收敛情况。可以得出GS迭代矩阵的谱半径小于1但是很接近1,收敛速度很慢。虽然随着维数的增大,所需迭代的次数逐渐减少,但是当维数达到15的时候,GS法已经不再收敛。因此可以得出结论,GS迭代方法在Hilbert矩阵维数较低时,能够在一定程度上满足迭代求解的需求,不过迭代的速度很慢。另外,随着矩阵维数的增加, SOR法的误差水平基本稳定,而且误差在可以接受的范围之内。经过比较可以得出结论,如果求解较低维度的Hibert矩阵问题,Gauss消去法、GS迭代法和SOR迭代法均可使用,且Gauss消去法的结果精确度较高;如果需要求解较高维度的Hibert矩阵问题,只有采用SOR迭代法。(3)系数矩阵的条件数较大时,为病态方程。由实验可知,Gauss法在解上述方程时,结果存在很大的误差。而对于收敛的迭代法,可以通过选取最优松弛因子的方法来求解,虽然迭代次数相对较多,但是结果较为精确。总体来看,对于一般病态方程组的求解,可以采用以下方式:1. 低维度下采用Gauss消去法直接求解是可行的;Jacobi迭代方法不适宜于求解病态问题;GS迭代方法可以解决维数较低的病态问题,但其谱半径非常趋近于1,导致迭代算法收敛速度很慢,维数较大的时候,GS法也不再收敛;SOR方法较适合于求解病态问题,特别是矩阵维数较高的时候,其优势更为明显。2. 采用高精度的运算,如选用双倍或更多倍字长的运算,可以提高收敛速度;3. 可以对原方程组作某些预处理,从而有效降低系数矩阵的条件数。4. 实验结论(1)对Hibert矩阵问题,其条件数会随着维度的增加迅速增加,病态性会越来越明显;在维度较低的时候,Gauss消去法、GS迭代法和SOR迭代法均可使用,且可以优先使用Gauss消去法;如果需要求解较高维度的Hibert矩阵问题,只有SOR迭代法能够求解。(2)SOR方法比较适合于求解病态问题,特别是矩阵维数较高的时候,其优点更为明显。从本次实验可以看出,随着矩阵维数的增大,SOR方法所需的迭代次数减少,而且误差基本稳定,是解决病态问题的适宜方法。附录:程序代码clear allclc;format long;%矩阵赋值n=input('矩阵H的阶数:n=');for i=1:n for j=1:n H(i,j)=1/(i+j-1); endendb=H*ones(n,1);disp('H矩阵为:');Hdisp('向量b:');b%方法选择disp('选取求解方式');disp('1 Gauss消去法,2 J迭代法,3 GS迭代法,4 SOR迭代法');a=input('求解方式序号:');%Gauss消去法if a=1; H1=H;b1=b; for k=1:n if H1(k,k)=0 disp('主元为零,Gauss消去法无法进行'); break end fprintf('第%d次消元所选取的主元是:%gn',k,H1(k,k) for p=k+1:n m5=-H1(p,k)/H1(k,k); H1(p,k:n)=H1(p,k:n)+m5*H1(k,k:n); b1(p)=b1(p)+m5*b1(k); end endx1(n)=b1(n)/H1(n,n);for k=n-1:-1:1 for v=k+1:n b1(k)=b1(k)-H1(k,v)*x1(v); end x1(k)=b1(k)/H1(k,k);end disp('Gauss消去法解为:'); disp(x1); disp('解与精确解之差的无穷范数'); norm(x1-a),inf)endD=diag(diag(H);L=-tril(H,-1);U=-triu(H,1); %J迭代法if a=2; %给定初始x0 ini=input('初始值设定:x0='); x0(:,1)=ini*diag(ones(n); disp('初始解向量为:'); x0 xj(:,1)=x0(:,1); B=(D(-1)*(L+U); f=(D(-1)*b; fprintf('(J法B矩阵谱半径为:%gn',vrho(B); if vrho(B)<1; for m2=1:5000 xj(:,m2+1)=B*xj(:,m2)+fj; if norm(xj(:,m2+1)-xj(:,m2),inf)<0.0001 break end end disp('J法计算结果为:'); xj(:,m2+1) disp('解与精确解之差的无穷范数'); norm(xj(:,m2+1)-diag(ones(n),inf) disp('J迭代法迭代次数:'); m2 else disp('由于B矩阵谱半径大于1,因而J法不收敛'); endend %GS迭代法if a=3; %给定初始x0 ini=input('初始值设定:x0='); x0(:,1)=ini*diag(ones(n); disp('初始解向量为:'); x0 xG(:,1)=x0(:,1); G=inv(D-L)*U; fG=inv(D-L)*b; fprintf('GS法G矩阵谱半径为:%gn',vrho(G); if vrho(G)<1 for m3=1:5000 xG(:,m3+1)=G*xG(:,m3)+fG; if norm(xG(:,m3+1)-xG(:,m3),inf)<0.0001 break; end end disp('GS迭代法计算结果:'); xG(:,m3+1) disp('解与精确解之差的无穷范数');