跳转至

Chapter 6 解线性方程组的直接法 | Direct Methods for Solving Linear Systems

约 2836 个字 15 张图片 预计阅读时间 14 分钟

6.1 回代的Gauss消去法 | Gaussian elimination with backward substitution

算法内容

解方程组Ax=b,记A(1)=A=aij(1)b(1)=b=(b1(1)b2(1)bn(1))x(1)=x=(x1(1)x2(1)xn(1)),则增广矩阵A~为:

A~=[a11(1)a12(1)a1n(1)b1(1)a21(1)a22(1)a2n(1)b2(1)an1(1)an2(1)ann(1)bn(1)]

通过高斯消元我们可以得到新的增广矩阵A~(k)

A~(k)=[a11(k)a12(k)a1n(k)b1(k)0a22(k)a2n(k)b2(k)00ann(k)bn(k)]

1次迭代过程为:如果 a11(1)0 ,记 mi1=ai1(1)/a11(1) ,则

{aij(2)=aij(1)mi1a1j(1)bi(2)=bi(1)mi1b1(1)

t次迭代过程为:如果att(t)0,记 mit=ait(t)/att(t) ,则

{aij(t+1)=aij(t)mitatj(t)bi(t+1)=bi(t)mitbt(t)

如果att(t)=0,则交换第t行与第k行,使得akk(k)0,然后再进行第k次迭代。如果找不到akk(k)0,则方程组没有唯一解,算法停止。

写成伪代码如下:

Alt text

计算次数

由于在计算机上完成乘法或除法所需的时间大致相同,且大于完成加法或减法所需的时间,所以我们分开考虑乘法和除法的计算次数。

对上述算法进行分析,可以得到计算次数如下:

消元过程

在每个 i 中,

  • Step 5 需要完成 ni 次除法,
  • Step 6EjmjiEi 代替方程 Ej 的过程中,对每个 j ,需要完成 ni+1 次乘法和 ni+1 次减法。所以共需要完成 (ni)(ni+1) 次乘法和 (ni)(ni+1) 次减法。

所以,消元过程共需要完成 i=1n1((ni)+(ni)(ni+1)) 次乘法/除法和 i=1n1(ni)(ni+1) 次加法/减法。

即消元过程共需要完成 13n3+12n256n 次乘法/除法和 13n313n 次加法/减法。

回代过程

Step 8 需要完成 1 次除法。

在每个 i 中,

  • Step 9 需要完成 ni 次乘法和 ni1 次加法(对每个相加项),然后是一次减法和一次除法。

所以,回代过程共需要完成 1+i=1n1((ni)+1) 次乘法/除法和 i=1n1(ni) 次加法/减法。

即回代过程共需要完成 12n2+12n 次乘法/除法和 12n212n 次加法/减法。

总计算次数

乘法/除法:

(13n3+12n256n)+(12n2+12n)=13n3+n213n

加法/减法:

(13n313n)+(12n212n)=13n3+12n256n

从这里我们可以得知,高斯消元法的算法复杂度为O(N3)

6.2 选主元策略 | Pivoting Strategies

在上个算法中,我们观察到,如果与ajk(k)相比,|akk(k)|很小,那么乘数mik(k)=aik(k)akk(k)就会很大,这样就会导致误差的积累。而且在代换时,xk(k)的值也会很大,这样就会导致误差的积累。所以我们需要选取一个合适的主元,使得误差的积累最小。

部分主元选取策略 | Partial Pivoting

我们考虑选择一个比较大的元素作为主元,这样就可以减小误差的积累。

所以我们可以在每次迭代时,从第k行开始,选取该列中绝对值最大的元素作为主元,然后再进行消元。

伪代码如下:

Alt text

Alt text

比例因子选取策略 | Scaling Partial Pivoting

这个方法通过比较"每一行的元素都除以该行的最大元素的绝对值",然后通过这个结果进行部分主元选取策略,再对原方程组部分进行行交换,从而选取主元。

这里的比例因子就是每一行的最大元素的绝对值,即

si=max1jn|aij|

比例因子只在初始过程中计算一次,然后在每次迭代过程中,比例因子也需要参与交换。

伪代码与部分主元策略的差别如下:

Alt text

Alt text

全主元选取策略 | Complete Pivoting

上个算法中,比例因子只在初始过程中计算一次。如果考虑到过程被修改,使得每次作行变换的决定时,要确定新的比例因子,那这种方法就是全主元选取策略(Complete Pivoting)。

6.5 矩阵分解 | Matrix Factorization

LU分解 | LU Factorization

假设Gauss消去法在此次解方程后没有进行行交换,Gauss消去法的第一步是对j=2,3,,n行进行计算:

(Ejmj1E1)Ej,mj1=aj1(1)a11(1)

那我们可以把这个过程写成矩阵的形式:

[100m2110m3100mn101][a11(1)a12(1)a1n(1)a21(1)a22(1)a2n(1)an1(1)an2(1)ann(1)]=[a11(1)a12(1)a1n(1)0a22(2)a2n(2)0a32(2)a3n(2)0an2(2)ann(2)]

记最左边的矩阵为 M(1),中间的矩阵为 A(1),右边的矩阵为 A(2),则有 M(1)A(1)=A(2)

这里的M(1)称作第一Gauss交换矩阵(first Gauss transformation matrix)。

b(2)表示b(1)经过第一次Gauss消去法后的结果,则有A(2)x=M(1)A(1)x=M(1)b(1)=b(2)

一般的,如果A(k)x=b(k)已经构建,则由第k个Gauss变换矩阵:

M(k)=[100010001000mk+1,k100mk+2,k000mn,k01]

则有A(k+1)x=M(k)A(k)x=M(k)b(k)=b(k+1)

这个过程结束在第A(n)x=b(n),这里的A(n)=M(n1)A(n2)==M(n1)M(n2)M(1)A(1)。由高斯消元法知道,A(n)是一个上三角矩阵。

此过程就形成了A=LU的分解中的U部分,而L部分就是上文A左侧矩阵的逆矩阵,即(M(n1)M(n2)M(1))1=M(1)1M(2)1M(n1)1

因为M(k)的逆矩阵就是把对角线下方的元素取反,所以L的元素为:

L(k)=(M(k))1=[100010001000mk+1,k100mk+2,k000mn,k01]

所以

L=L(1)L(2)L(n1)=[100m21100m31m320mn1mn2mn,n11]

由此我们可以得到:

如果Gauss消去法在线性方程组Ax=b中没有进行行交换,则A=LU, 其中

L=L(1)L(2)L(n1)=[100m21100m31m320mn1mn2mn,n11]
U=A(n)=[a11(1)a12(1)a1n(1)0a22(2)a2n(2)00a3n(3)00ann(n)]

如果L是单位下三角矩阵,则这个分解是唯一的。

用反证法。

如果A=L1U1=L2U2,其中L1L2是单位下三角矩阵,U1U2是上三角矩阵。则有

U1U21=L11L2

因为上三角阵的逆依然是上三角阵,下三角阵同理。所以等式左右分别为上三角阵和下三角阵。又因为L11L2的对角线上的元素均为1,所以两式相等当且仅当

U1U21=L11L2=I

U1=U2L1=L2

所以这个分解是唯一的。

伪代码

先进行LU分解。

Alt text

Alt text

解第一个方程Ly=b

Alt text

解第二个方程Ux=y

Alt text

6.6 特殊类型的矩阵 | Special Types of Matrices

严格对角占优矩阵 | Strictly Diagonally Dominant Matrices

如果对矩阵A的每一行,对角线上的元素的绝对值大于该行上其他元素的绝对值之和,则称A为严格对角占优矩阵。

定理:严格对角占优矩阵是非奇异的。而且,在此情况下,Gauss消去法可用在形如Ax=b的方程组中以得到唯一解,而且不需要进行或列交换,并且对于舍入误差的增长而言计算是稳定的。

正定矩阵 | Positive Definite Matrices

本书中的正定矩阵是指对称正定矩阵,与其他书中的定义不同。

一个矩阵A是正定的,如果它是对称的,并且对于所有非零向量x,都有xTAx>0

定理

如果An×n的正定矩阵,则

a. A是非奇异的。

b. aii>0i=1,2,,n

c. max1k,jn|akj|<max1in|aii|,其中 kj

d. (aij)2<aiiajjij

重要结论:如果A是正定的,则A的所有主子式都是正的。

A=LDLT分解

我们可以把A=LU中的U进一步分解为对角矩阵D和单位上三角矩阵U~,如下图所示:

Alt text

我们知道,A是对称的,所以A=AT,即LU=LDU~=U~TDLT,所以可以有L=U~T,所以A=LDLT。其中L是一个主对角线为1的下三角矩阵,D是对角线元素为正值的对角矩阵。

伪代码如下:

Alt text

Cholesky分解

Alt text

L~=LD12,则有A=L~L~T。其中L~是一个具有非零对角线元素的下三角矩阵。

伪代码如下:

Alt text

Alt text

三对角矩阵 | Tridiagonal Matrices

三对角矩阵是指除了对角线和对角线上方和下方的第一条对角线外,其他元素均为0的矩阵,形式如下:

[a11a1200a21a22a23000a32a33a340an1,n00an,n1ann]

定理:假设A是三对角矩阵,对每个i=2,3,,n1,有ai,i1ai,i+10,如果|a11|>|a12||aii|>|ai,i1|+|ai,i+1||ann|>|an,n1|,则A是非奇异的,且在Crout分解中,lii的值都是非零的。

Crout分解

Crout分解是LU分解的一种特殊情况,我们可以求出具有形式

L=[l11000l21l22000l32l33000ln,n1lnn],U=[1u120001u23000100001]

的三对角矩阵A的分解。

通过矩阵乘法,我们可以得到:

{a11=l11ai,i1=li,i1ai,i=li,i1ui1,i+li,iai,i+1=li,iui,i+1

在求解部分,我们可以先解Lz=b,然后再解Ux=z。有伪代码:

Alt text