解线性方程组的直接解法

写在前面的话:在计算机功能日益强大的今天,可能我们在计算的过程中很少会用下面的方法手动解方程组,但是我认为了解这些方法,继而思考这些方法的思想可是一件很有趣的事。想象一下,你身处千年前的时代,面对着一个包含多个未知量方程组,你会怎么解决,怎么系统的求解,怎么更快的求解?

(部分使用编辑器打的图片,所以看起来比较奇怪)

$1高斯消去法

         假如我身在公元0年,本来在家中午睡,突然梦到一道数学题(是不是很扯?不要在意这些细节)描述如下:

         假如一共有100个方程,我很想解决这个问题,于是开始尝试解决。由于时代条件限制,只在一些不多见的关于算术的书本中见过鸡兔同笼问题,算是对多元方程有了勉强的认识。可这倒好,一下子给我来个100个鸡兔。额,肯定不是鸡兔,是有几万个爪子的怪物。   无奈,我开始动点小脑筋。2元方程组我会解了,那么我要不试一试3元的方程组,先不管这个100的?在解3元的时候,我有两个方法:代入法和消元法。代入法是说将所有未知数用一个表示,最后解出这个数;消元是说我不停给这些式子减一减、加一加,最后变成一个只有一个未知数的式子。(其实本质上是一样的)

         我对消元法很有好感,就加加减减算出了3元,也算出来了4元、5元的。由于我是随缘加减,到了10元以上就发愁了,没法做变化了,式子太乱了!

  于是,我开始逆向考虑。我经过很多次变换,最后想要得到一个只有一元的函数。我大胆猜想,那这之前的一步是不是方程组里有两个未知数,再之前应该有三个,依次推最原始有100个,式子可能是这个样子的:

        很容易就能发现规律,随着未知数不断变多,以系数组成的矩阵每一行系数不断减少,就像一个三角形,那么我做运算的时候就要构造出这么个三角形。回过头来看原来的方程组,假如我做消去的时候(假如第一步用式子2减去式子1,消去式子2中的x1),我把第2到100行都这么干,都消去x1,那么就可以在下面的99组中只要解决99个未知数就行了(高斯说,这是有解的)!依次递推,最后一个方程只要解决1一个未知数就ok了,同时三角形也出来了。

        所以高斯消去法就是这么干的:

  可以看到:利用这种方法,可以系统的、有目标的对线性方程组进行求解;并且得到的半角矩阵十分有利于回代,直接求方程组的解。

  我开心了,发现自己竟然解决了这么复杂的问题!于是我拿起我的毛笔翻开《九章算术》,准备加一节线性方程组的解法。却发现书中已经有了。。。

$2三角分解法
         直接法解方程组最后的步骤必然是变换成半角矩阵回代解,但是我们可以在之前的步骤对矩阵进行一些处理,使得计算更加方便。

         我们知道的是:对A 施行初等行变换相当于用初等矩阵左乘A(列变换则右乘),于是我们将高斯消去法对矩阵进行变换(假设都是行变换)的结果,用有限个矩阵左乘A来表示。(A为方程组的系数矩阵)下面就是要搞清楚这有限个矩阵都是些什么东西?

          不妨将第k次变换对应的矩阵记为Lk ,考虑第一次变换:

                         

    高斯消去法的第一步将除了第一个方程外,剩下所有方程的x1全部消去。想象一下,这个过程是第二行倍乘一个系数,使得同第一行相减消去x1项,下面各行类似。不难得出:                                                                             

        最终有Ln-1...L2L1A(1)=A(n);

                     Ln-1...L2L1b(1)=b(n)

        这个时候观察一下A(n),这个东西是什么?我们目前为止就是将高斯法的矩阵变换用数学方式(矩阵乘法)写出来,那么由高斯消去法得到的结果可以知道,消去法最后得到的方程组的系数矩阵是一个上三角矩阵。A(n)是消去法最后的结果,故其为一个上三角矩阵。最后将我们的结果写写好,记A(n)=U,L为各个行变换矩阵的逆的连乘(显然是一个单位下三角矩阵):                       

                                                                                                                                           

        定理:设An 阶矩阵, 如果A 的顺序主子式Di ≠0( i = 1 , 2 , ⋯ , n - 1 ) , 则A 可分解为一个单位下三角矩阵L 和一个上三角矩阵U 的乘积,且这种分解是唯一的。

        证明:存在性,由高斯消去法原理就可以保证。

                   唯一性,唯一性证明的套路就是找一个同类的,推出矛盾或者相同:当A可逆时,A = LU = L1 U1,由于U1可逆,则L- 1 L1 = UU1- 1,右边为上三角矩阵, 左边为单位下三角矩阵,所以左右侧只能为单位阵。故L=L1,U=U1

        下面开始解方程:,花了这么大的力气搞出来的结果,终于可以看到用处了。搞出来的两个半角矩阵可以方便的解方程组:

 

 $3高斯主元素消去法

       可能有朋友看了两个方法,会发现似乎是有一些不妥:在上面两个方法中我们一直回避一个问题,或者说将这个问题暂时限定。$1中,进行消去的时候,会出现当某个对角系数为0时,而无法计算倍乘数的可能;$2中,我们讲LU分解定理时,有一个条件叫A 的顺序主子式不为0。这个0有时候让人又爱又恨(和平方一样),总会给人一些变数,变数越多越难捉摸;变数越多,误差越大。

        再放开了讲,这个“0”的范围可以再进一步扩大为“一个极小的数”。当用一个极小的数作除数进行消去时, 会导致其他元素数量级的严重增长和舍入误差的扩散,会使得解出现很大的偏差。

        为此我们再来考虑“0”的问题,便产生了高斯主元素消去法,目的就在于避免采用绝对值小的主元素。一般来说,最好每一步选取系数矩阵中绝对值最大的元素作为主元素, 以使高斯消去法具有较好的数值稳定性。换一个角度思考一下:是不是就是在进行消去的前一步先把行列式换换位置,保证按主元素的大小进行排列,第一个式子可以不动,下面的各个式子按对应未知数的系数找出最大的放在各行,注意已经排好的就不用再动了(下一行不用管上面的行)。------列主元素消去法

       相比直接消去,或者直接LU分解,就是多了一个排序过程,自然出现另一个排序矩阵P。以列主元LU法为例:PA = LU,可以添加记录主行的数组记录主行变换。


 

$4平方根法 (一种类似LU分解方式)

       针对正定对称矩阵进行特殊的三角分解。这么进行考虑,我们已知:A = LU = LDU0造出U0 为单位上三角阵(如果考虑到对称性的好处,很容易就可以自然而然这么想;如果不懂,就先这么干,后面会豁然开朗的,数学有时候就是这样),听说A对称?搞一下A = AT = U0( DLT ) ,由于分解的唯一性,必然有U0T=L,就要这个结果。这样我们就可以扔了一个变量U0了,只需要考虑L,电脑也可以少储存一个矩阵,多好的结果啊。

下面只需要解Ax = LDLTx =b,就行了。

定理:对称阵的三角分解,设A为n 阶对称阵, 且A的所有顺序主子式均不为零, 则A 可唯一分解为A = LDLT ,其中L 为单位下三角阵, D 为对角阵.

值得一提的是,我第一次学习时将它与后面的Cholesky 分解条件搞混了,也不知道咋想的,解一个非正定的对称矩阵时将它分解好了,竟然觉得很奇怪为啥不正定还能这么做(。笑)。

       对称用过了,正定体现在哪里?当矩阵正定,则D的对角元素均大于0(一阶主子式大于0),那么就可以开根号了啊。简记为D=D1/2D1/2,放进方程中有:(L*不再是单位下三角矩阵了)

 定理:Cholesky 分解,如果An 阶对称正定矩阵, 则存在一个实的非奇异下三角阵L ,使A = LLT , 当限定L 的对角元素为正时, 这种分解是唯一的。

 分析:矩阵对称,能够进行对称分解;强调正定,能够将对角元素开方,再放到上下三角中去;限定L 的对角元素为正时, 分解才唯一,是去除开方时出现的负根。

 

$5改进平方根法(从提高计算速度来说,这个方法还是挺有实际意义的。)

  数学家们为了更方便的计算平方根法,索性提出了一个改进方法(哼哼,我连开方都不想算)。上一段中,讲到平方根法,其中将对角元素开方入半角阵,但是计算机计算开方是一件挺麻烦的事,所以数学家说,那就别管他了,我们算我们的。

    于是回到$4对称矩阵的分解定理,A为n 阶对称阵,则可以分解A = LDLT ,矩阵L和D 的值是容易解出来的。我们只需要考虑解方程组:

  最后解半角回代,结束。

 

  

 

 


 

posted @ 2019-11-07 17:13  巴山听雨  阅读(673)  评论(0)    收藏  举报