资源描述:
《gauss-seidel迭代矩阵求法的思考》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Gauss-Seidel迭代矩阵求法的思考在迭代法收敛性的判别中,我们有充分条件:若迭代矩阵的某种范数,则迭代法对任意的初始向量都收敛于方程组的精确解。从这个条件中我们可以看出,想要知道迭代法是否收敛,就要知道迭代矩阵(当然如果系数矩阵是正定的或严格对角占优的,那就不用知道其迭代矩阵,因为这时它的Jacobi迭代和Gauss-Seidel迭代一定收敛),Jacobi迭代矩阵为,Gauss-Seidel迭代矩阵这两个矩阵中都涉及到了矩阵的逆。从上高等代数时学到矩阵的逆开始,就一直惧怕有关矩阵逆的题目,因为求矩阵A的逆,这就必须求出A的行列式与A的伴随矩阵,对于求矩阵A的行
2、列式,就是一个繁琐的过程,计算量大且易出错,而这儿还不仅如此,这儿还要求出矩阵A的伴随矩阵。如果矩阵,则,而其中的,因此求的计算量比求A的行列式的计算量还要大的多,所以很难求。因此数学家便开始寻找求的相对容易的方法,其中有一种初等变换的方法,即对进行初等行变换,当把A变成E时,E便变成了,此方法要简单的多,但在变换过程中要消耗大量空间。在用迭代法解线性方程组的方法中,都涉及到了一个矩阵的逆,而且其涉及到的还不仅仅是一个矩阵的逆那么简单,其涉及到的是用一个矩阵的逆去乘另一个矩阵,如果一步一步算,想要算出矩阵的逆,再算两个矩阵相乘,没有一步是简单的,两步计算过程都很繁琐,极
3、易出错。仔细观察后,我发现正是因为矩阵的逆与另一矩阵相乘,从而在整体上出现了相对简单的计算,其过程是略去矩阵逆的计算,从而简化计算。对于n介线性方程组,即,其系数矩阵非奇异且,对,则可建立①Jacobi迭代格式:我们知道Jacobi迭代矩阵为,其中,,。由式⑵可看出,计算,首先需求出,然后再作矩阵乘法。当然这儿由于的特殊性,很好求,=,如果我们抛开式⑵,直接看⑴,就会发现,其实可以直接写出来,无需计算,由⑴可得,其直接从线性方程组中得来,显然快于一步步的计算,而且第二中算法不仅简单还不容易出错,提高了求迭代矩阵的效率。当然,第一种算法的可以直接写出很好求,从而效率也没提
4、高多少,但对于Gauss-Seidel迭代,就不然了。②Gauss-Seidel迭代格式:我们知道Gauss-Seidel迭代矩阵,其中矩阵D,L,U与上述⑶中一样。但此处就不是太好求了,即使它是个下三角矩阵。然而求出后,还要进行矩阵的乘法,因为即:计算有点繁琐,然而,我产生一种想法,其是否也可与Jacobi迭代矩阵那样,直接写出来了?通过一番计算,再加上实例的体会,我找出了一种相对简洁的关系。把⑷式写成把1)代入2)并整理得(由于我们的目的是得到矩阵,所以在此就不考虑了)2’)令,则1)变为①。此时2’)式变为2^)。令,则2^)式变为②。把①、②式代入3)式整理得3
5、’)令则3’)式变为③……如此一直在前一步的基础上求后一步矩阵中的元素的值,一直进行下去,则n-1)式变为则第n个式子变为即从而得到Gauss-Seidel迭代矩阵(*)接下来我用书上一个例子来展现上述方法求迭代矩阵的优越性:例设方程组为试分别写出Jacobi迭代和Gauss-Seidel迭代格式以及相应的迭代矩阵。解:原方程的Jacobi迭代格式和Gauss-Seidel迭代格式分别为⑴和⑵由⑴可直接得Jacobi迭代矩阵为而相应的Gauss-Seidel迭代矩阵可由(*)式得:与书上用公式算所得结果相同,但这种计算显然很简洁。对于3阶以上的迭代矩阵的计算,我的方法将
6、会节约大量时间,而且还不容易出错。以上我们讨论的是方阵,但从(*)式可以看出,我们也可以求出不是方阵的,这便给人一种想法,是否不是方阵时也可用迭代法求其解,但有一点是肯定的,当方程个数少于未知数个数时,线性方程组有无穷多解,因此这个问题有可能是否定的,即无法用迭代法求系数矩阵不是方阵的解,此问题还有待研究。以下是我写的有关我的新方法的matlab代码,其中也包含书上的方法求迭代矩阵的代码,我输入一个四阶的系数矩阵,由两种方法所得出的Gauss-Seidel迭代矩阵完全相同。Matlab代码:%求Gauss-Seidel矩阵functionG_SB(A)[m,n]=siz
7、e(A);ifm~=ndisp('系数矩阵不是方阵')returnend%%用矩阵运算求Gauss-Seidel迭代矩阵D=diag(diag(A));U=-triu(A,1);L=tril(A,-1);disp('矩阵运算求出的迭代矩阵')B1=inv(D+L)*U,%%B=zeros(m,n);forj=2:nB(1,j)=-A(1,j)/A(1,1);endfori=2:mforj=2:nk=1:i-1;ifi>=jB(i,j)=sum(-A(i,k)*B(k,j))/A(i,i);continueendB(i,j)=(sum(-A