Gauss-Seidel迭代矩阵求法的思考
- 格式:doc
- 大小:226.84 KB
- 文档页数:9
Gauss-Seidel 迭代矩阵求法的思考在迭代法收敛性的判别中,我们有充分条件:若迭代矩阵B 的某种范数1<=q B ,则迭代法 ,1,0,)()1(=+=+k d Bx x k k 对任意的初始向量)0(x 都收敛于方程组b Ax =的精确解*x 。
从这个条件中我们可以看出,想要知道迭代法是否收敛,就要知道迭代矩阵(当然如果系数矩阵是正定的或严格对角占优的,那就不用知道其迭代矩阵,因为这时它的Jacobi 迭代和Gauss-Seidel 迭代一定收敛),Jacobi 迭代矩阵为A D I U L D B J 11)(---=+-=,Gauss-Seidel 迭代矩阵,U L D B G 1)(-+-=这两个矩阵中都涉及到了矩阵的逆。
从上高等代数时学到矩阵的逆开始,就一直惧怕有关矩阵逆的题目,因为求矩阵A 的逆*11A AA =-,这就必须求出A 的行列式A 与A 的伴随矩阵*A ,对于求矩阵A 的行列式,就是一个繁琐的过程,计算量大且易出错,而这儿还不仅如此,这儿还要求出矩阵A 的伴随矩阵*A 。
如果矩阵⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=nn n n n n a a a a a a a a a A 212222111211,则⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=nn n nn n A A A A A A A A A A 212221212111*,而其中的nnj n j n n ni j i j i i n i j i j i i n j j a a a a a a a a a a a a a a a a A1,1,1,11,11,11,1,11,11,11,111,11,111ij+-+++-++-+----+-=,因此求*A 的计算量比求A 的行列式的计算量还要大的多,所以1-A 很难求。
因此数学家便开始寻找求1-A 的相对容易的方法,其中有一种初等变换的方法,即对()E A 进行初等行变换,当把A 变成E 时,E 便变成了1-A ,此方法要简单的多,但在变换过程中要消耗大量空间。
在用迭代法解线性方程组的方法中,都涉及到了一个矩阵的逆,而且其涉及到的还不仅仅是一个矩阵的逆那么简单,其涉及到的是用一个矩阵的逆去乘另一个矩阵,如果一步一步算,想要算出矩阵的逆,再算两个矩阵相乘,没有一步是简单的,两步计算过程都很繁琐,极易出错。
仔细观察后,我发现正是因为矩阵的逆与另一矩阵相乘,从而在整体上出现了相对简单的计算,其过程是略去矩阵逆的计算,从而简化计算。
对于n 介线性方程组⎪⎩⎪⎨⎧=+++=+++n n nn n n n n bx a x a x a b x a x a x a 221111212111,即b Ax =,其系数矩阵()n n ij a A ⨯=非奇异且()n i a ii ,,3,2,10 =≠,对 ,2,1,0=k ,则可建立①Jacobi 迭代格式:()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧+----=+----=+----=--+++1).(1),(1),(1)(11,)(22)(11)1(2)(2)(323)(12122)1(21)(1)(313)(21211)1(1n k n n n k n k n nn k n k n n k k k k n n k k k b x a x a x a a x b x a x a x a a x b x a x a x a a x我们知道Jacobi 迭代矩阵为()2)(11A D I U L D B J ---=+-=,其中⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=nn a a a D 2211, ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-00001,21323121n n n n a a a a a a L, ()30000,122311312⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-n n n n a a a a a a U 。
由式⑵可看出,计算J B ,首先需求出1-D ,然后再作矩阵乘法。
当然这儿由于D 的特殊性,1-D 很好求,1-D =⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡nn nn a a a a a a 11122111-2211,⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-----------==-000-0-B 3213333332333122222231121111111311121Jnnn nn n nnn n n n a a a a a a a a a a a a a a a a a a a a a a a a A D I如果我们抛开式⑵,直接看⑴,就会发现,其实J B 可以直接写出来,无需计算,由⑴可得⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-----------=000-0B 321333333233312222223112111111131112Jnnn nn n nnn n n n a a a a a a a a a a a a a a a a a a a a a a a a ,其直接从线 性方程组中得来,显然快于一步步的计算,而且第二中算法不仅简单还不容易出错,提高了求迭代矩阵的效率。
当然,第一种算法的1-D 可以直接写出很好求,从而效率也没提高多少,但对于Gauss-Seidel 迭代,就不然了。
②Gauss-Seidel 迭代格式:()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧+----=+----=+----=+--++++++4).(1),(1),(1)1(11,)1(22)1(11)1(2)(2)(323)1(12122)1(21)(1)(313)(21211)1(1n k n n n k n k n nn k n k n n k k k k n n k k k b x a x a x a a x b x a x a x a a x b x a x a x a a x我们知道Gauss-Seidel 迭代矩阵()5)(1UL D B G -+-=,其中矩阵D,L,U 与上述⑶中一样。
但此处1)-+L D (就不是太好求了,即使它是个下三角矩阵。
然而求出1)-+L D (后,还要进行矩阵的乘法,因为U L D B G 1)(-+-=即:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=+-=---0000)(,12231131213213332312221111n n n n nn n n n G a a a a a a a a a a a a a a a a U L D B计算有点繁琐,然而,我产生一种想法,其是否也可与Jacobi 迭代矩阵那样,直接写出来了?通过一番计算,再加上实例的体会,我找出了一种相对简洁的关系。
把⑷式写成)))()⎪⎪⎪⎩⎪⎪⎪⎨⎧+----=+----=+----=+--++++++421)(1)1(11,)1(22)1(11)1(2)(2)(323)1(121)1(2221)(1)(313)(21211)1(1n b x a x a x a x a b x a x a x a x a b x a x a x a a x n k n n n k n k n k n nn k n n k k k k n n k k k把1)代入2)并整理得(由于我们的目的是得到矩阵,所以在此就不考虑n b b b ,,,21 了))(211121)(323111321)(2111221)1(222)()()(k nn n k k k x a a a a x a a a a x a a a x a --∙-++--∙-+-∙-=+ 2’)令1111111313111212,,,a a b a a b a a b n n -=-=-=,则1)变为)(1)(313)(212)1(1k nn k k k x b x b x b x +++=+ ① 。
此时 2’)式变为)(222121)(322231321)(2221221)1(2]/)[(]/)[(]/)[(k nn n k k k x a a b a x a a b a x a b a x -∙-++-∙-+∙-=+ 2^)。
令2221212222313212322122122,,,-a a b a b a a b a b a b a b n n n --=--==,则2^)式变为)(2)(323)(222)1(2k nn k k k x b x b x b x +++=+ ②。
把①、②式代入3)式整理得)(3232131)(43424321431)(323321331)(222321231)1(333)()()()(k nn n n k k k k x a b a b a x a b a b a x b a b a x b a b a x a ---++---+--+--=+ 3’)令333232131333342432143134332332133133332232123132,,,,a a b a b a b a a b a b a b a b a b a b a b a b a b nn n n ---=---=--=--=则3’)式变为)(3)(434)(333)(232)1(3k nn k k k k x b x b x b x b x ++++=+ ③ ……如此一直在前一步的基础上求后一步矩阵中的元素的值,一直进行下去,则n-1)式变为)(,1)(13,1)(12,1)1(1k n n n k n n k n n k n x b x b x b x -----+-+++= 则第n 个式子变为)(,11,,22,,11,)(33,11,232,131,)(22,11,222,121,)1()()()-(K nn n n n n n n n K n n n n n K n n n n n k n nn x b a b a b a x b a b a b a x b a b a b a x a ------+----++----+---= 即)(,)(44,)(33,)(22,)1(k n n n k n k n k n k nx b x b x b x b x ++++=+从而得到Gauss-Seidel 迭代矩阵⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡----=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=nn n n n n n nn n n nn n n n G b b b a a b a a a b a a b a b b b b b b b a b b b b b b B3222212122231321221221113122222111n 111222221120-0000a -a a -0000⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡-------=321333232131332332133133223212312232211312000n n n n n n nn b b b a a b a b a a b a b a a b a b a b b b b b b⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡--------=+--++--+--+n n i n i n ii n i n i i i n i i i i i i i i i i i i i i i i i i i n i i b b b a a b a b a a a b a b a a b a b a b b b ,1,,,,,11,,11,,1,1,11,1,11,,,11,,11,,11,1,10---00⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡------=------nn n n n n n n nn n n n n n n n n n n nnna b a b a a b a b a a b a b a b b b b b b b b b ,,11,11,,3,11,131,,2,11,121,333232232211312---0000(*)接下来我用书上一个例子来展现上述方法求迭代矩阵的优越性:例 设方程组为⎪⎩⎪⎨⎧=+-=+-=-+,722025,19103,928321321321x x x x x x x x x 试分别写出Jacobi 迭代和Gauss-Seidel 迭代格式以及相应的迭代矩阵。