Skip to content

19.2.1 线性方程组 ​

考虑线性方程组

a11x1+a12x2+⋯+a1nxn=b1,(19.25)a21x1+a22x2+⋯+a2nxn=b2,

......

an1x1+an2x2+⋯+annxn=bn.

方程组 (19.25) 可以写成矩阵形式

(19.26a)Ax―=b―

其中

(19.26b)A=(a11a12⋯a1na21a22⋯a2n⋮⋮⋮an1an2⋯ann),b―=(b1,b2,⋮bn),x―=(x1,x2,⋮xn).

如果矩阵 A 是 n 阶正定的,则方程组 (19.25) 有唯一解 (参见第 412 页 4.5.2.1,2.). 实际求解方程 (19.25) 时, 主要有如下两类方法:

(1) 直接法 直接法基于元素变换, 据此可以直接得到方程组的解. 主元素选取的技巧 (参见第 412 页 4.5.1.2) 及其方法介绍见第 1242 页 19.2.1.1 至第 1246 页 19.2.1.3.

(2) 迭代法 始于解的初始近似值, 构成近似值的序列收敛到 (19.25) 的解 (参见第 1248 页 19.2.1.4).

19.2.1.1 矩阵的三角分解 ​

1. 高斯消元法的原理 ​

根据元素变换

(1) 交换行;

(2)某一行乘以非零数;

(3) 将某一行乘以非零数加到另一行.

线性方程组 Ax―=b― 的变换称之为行变换

(19.27)Rx―=c―,其中 R=(r11r12r13⋯r1nr22r23⋯r2nr33⋯r3n0⋱⋮rnn). 

因为上述变换都是等价变换,方程组 Rx―=c― 与方程组 Ax―=b― 有相同的解, 从 (19.27) 可得

(19.28)xn=cnrnn,xi=1rii(ci−∑k=i+1n⁡rikxk)(i=n−1,n−2,⋯,1).

规则 (19.28) 称为向后代换法, 因为 (19.27) 的方程按倒序求解.

变换从 A 到 R 经过 n−1 步,所谓消元. 其第一步如下. 这一步将矩阵 A 变换成 A1 :

(19.29)A=(a11a12⋯a1na21a22⋯a2na31a32⋯a3n⋮⋮⋮an1an2⋯ann),A1=(a11(1)a12(1)⋯a1n(1)0a22(1)⋯a2n(1)0a32(1)⋯a3n(1)⋮⋮0an2(1)⋯ann(1)).

于是:

(1) 选取 ar1≠0 (根据 (19.33)). 如果没有, A 奇异,停止. 否则 ar1 称为主元.

(2) 交换矩阵 A 的第一行与第 r 行,得到矩阵 A― .

(3) 第 li1(i=2,3,⋯,n) 乘以第一行减去矩阵 A― 第 r 行.

于是得到矩阵 A1 ,与之类似得到右端 b1 的新元素

aik(1)=a¯ik−li1a¯1k,其中 li1=a¯i1a¯11,(19.30)bi(1)=b¯i−li1b¯1(i,k=2,3,⋯,n).

子矩阵 A1 (见 (19.29)) 为一个(n - 1, n - 1)矩阵,它可以类似于矩阵 A 进行处理. 该方法称为高斯消元法或者称为高斯算法 (参见第 417 页 4.5.2.4).

2. 三角分解 ​

高斯消元法的结果可以归结为: 对于每个正规矩阵 A ,存在一个称为三角分解或者 LU 因子分解,形如

(19.31)PA=LR

其中

R=(r11r12r13⋯r1nr22r23⋯r2nr33⋯r3n0⋱⋮rnn),L=(1l2110l31l321⋮⋮⋱ln1ln2⋯ln,n−11).

(19.32)

这里 R 称为上三角矩阵, L 称为下三角矩阵, P 称为置换矩阵. 如果一个置换矩阵的行列交叉处为 1,其他元素都为零,该矩阵称为二次矩阵. 乘积 PA 导致矩阵 A 的行变换. 在消元的过程中需要选择主元.

  • 用高斯消元法求解方程组
(316213111)(x1x2x3)=(274)

按图解形式, 系数矩阵与右端列向量可以靠近写在一起 (称为增广矩阵), 计算如下:

(A,b―)=(316213111)|274|⇒(3162/3121/321)=(31621/3−1117/310/3−110/3)⇒(31621/32/3−110/32/31/2−1/24)

即

P=(100001010)⇒PA=(316111213)L=(1001/3102/31/21),R=(31602/3−100−1/2).

在系数矩阵 A,A1,A2 中,主元在矩阵中用方框表示,其解为 x3=−8,x2= −7,x1=19 .

3. 三角分解的应用 ​

借助于三角分解,求解线性方程组 Ax―=b― 可以表述为以下三步:

(1) PA=LR : 确定三角分解并作代换 Rx―=c― .

(2) Lc―=Pb― : 通过向前代换确定辅助变量 c― .

(3) Rx―=c― : 通过向后代换确定解向量 x― .

如果如同上例中用增广矩阵 (A,b―) 处理线性方程组,用高斯消元法求解,那么下三角矩阵 L 并不需要显式得到. 该方法对于左边系数矩阵相同,而右端项不同的多个线性方程组尤为适用.

4. 主元的选取 ​

理论上,矩阵 Ak−1 的任意一个第一列的非零元 ai1(k−1) 都可以选为第 k 次消元的主元. 为了改进解的准确性 (减少运行过程中的积累误差), 建议用如下策略.

(1) 对角策略 若有可能, 对角元素被成功选为主元, 即无行变换. 若主对角线元素的绝对值比同一行的其他元素的绝对值大得多, 这种选取可行.

(2) 列主元 在实施第 k 步消元时,选第 r 行使得

(19.33)|ark(k−1)|=maxi≥k⁡|aik(k−1)|.

若 r≠k ,则交换第 r 行与第 k 行. 可证明该策略能使累计舍入误差小一些.

19.2.1.2 对称系数矩阵的楚列斯基方法 ​

在许多情况下,(19.26a) 中的系数矩阵 A 不仅仅是对称的,而且是正定的,此时相应的二次型 Q(x―) 为

(19.34)Q(x―)=x―TAx―=∑i=1n⁡∑k=1n⁡aikxixk>0,

其中 x―∈Rn,x―≠0 . 由于每一个正定矩阵存在唯一个三角分解

(19.35)A=LLT

其中

(19.36a)L=(l11l21l220l31l32l33⋮⋮⋮⋱ln1ln2ln3⋯lnn),(19.36b)lkk=akk(k−1),lik=aik(k−1)lkk(i=k,k+1,⋯,n);(19.36c)aij(k)=aij(k−1)−likljk(i,j=k+1,k+2,⋯,n).

相应的线性方程组 Ax―=b― 的解可用楚列斯基 (Cholesky) 方法通过下列步骤确定:

(1) A=LLT : 确定所谓的楚列斯基分解并作代换 LTx―=c― .

(2) Lc―=b― : 通过向前代换确定辅助变量 c― .

(3) LTx=c : 通过向后代换确定解向量 x .

当 n 较大时,楚列斯基方法的计算量大约是 LU 分解方法 (参见第 1243 页 (19.31)) 的一半.

19.2.1.3 正交化方法 ​

1. 线性拟合问题 ​

设超定方程组

(19.37)∑k=1n⁡aikxk=bi(i=1,2,⋯,m;m>n)

的矩阵形式为

(19.38)Ax=b.

若系数矩阵 A=(aik) 为 (m×n) ,满秩为 n ,即列是线性无关的. 由于超定方程组通常无解, 考虑所谓的误差方程组代替 (19.37):

(19.39)ri=∑k=1n⁡aikxk−bi(i=1,2,⋯,m;m>n),

这里 ri 为残量,使其平方和最小:

(19.40)∑i=1m⁡ri2=∑i=1m⁡[∑k=1n⁡aikxk−bi]2=F(x1,x2,⋯,xn)=min!.

(19.40) 称为线性拟合问题或线性最小二乘问题 (参见第 611 页 6.2.5.5). 使得残量平方和 F(x1,x2,⋯,xn) 最小的必要条件为

(19.41)∂F∂xk=0(k=1,2,⋯,n).

于是得到线性方程组

(19.42)ATAx―=ATb―.

因为方程组 (19.42) 是由 (19.38) 应用高斯最小二乘法得到的 (参见第 611 页 6.2.5.5),所以从 (19.38) 到 (19.42) 的变换称为高斯变换. 因为 A 是满秩的, ATA 为正定的 (n×n) 矩阵,所以正规方程 (19.42) 可以由楚列斯基方法数值求解 (参见第 1245 页 19.2.1.2).

若矩阵 ATA 的条件数 (见 [19.31]) 过大,数值求解正规方程 (19.42) 有困难, 则其解的相对误差也大. 因此最好用正交化方法数值求解线性拟合问题.

2. 正交化方法 ​

下面是解线性最小二乘问题 (19.40) 的正交化方法基础.

(1) 在正交变换的过程中不改变向量的长度,即向量 x― 和 x~―=Q0x― 有相同的长度, 其中

(19.43)Q0TQ0=E.

(2) 对于有最大秩 n(n<m) 的任意(m, n)矩阵 A ,存在(m, m)正交矩阵 Q , 使得

(19.44)A=QR^(19.45)QTQ=E,R^=(RO)=(r11r12⋯r1nr22⋯r2n⋱⋮rnn⋯⋯⋯⋯⋯O).

这里 R 为(n, n)上三角矩阵,矩阵 O 为(m - n, n)零矩阵.

矩阵 A 的乘积形式 (19.44) 称为矩阵 A 的 QR 分解. 因此误差方程 (19.39) 可以转化为等价的方程组

r11x1+r12x2+⋯+r1nxn−b^1=r^1,r22x2+⋯+r2nxn−b^2=r^2,∵⋮⋮=⋮(19.46)rnnxn−b^n=r^n,−b^n+1=r^n+1,⋮−b^m=r^m.

而残量的平方和不变. 由 (19.46) 知,当 r^1=r^2=⋯=r^n=0 时平方和最小,而且最小值等于 r^n+1 到 r^m 的平方和. 要求的解 x 则可由向后替换得到

(19.47)Rx―=b^―0

其中向量 b―^0 由 (19.46) 的元素 b^1,b^2,⋯,b^n 组成.

由 (19.39) 转化为 (19.46) 有两种常用的方法:

(1) 吉文斯 (Givens) 变换.

(2)豪斯霍尔德变换.

矩阵 A 的 QR 分解的第一步由旋转得到,其余则由反射得到. 数值程序可见[19.29].

线性最小二乘逼近的实际问题多数用豪斯霍尔德变换求解, 通常会用到系数矩阵 A 的特殊带状结构.

19.2.1.4 迭代方法 ​

1. 雅可比方法 ​

设线性方程组 (19.25) 的系数矩阵的每个主元 aii(i=1,2,⋯,n) 都是非零元素. 于是第 i 行的未知量 xi 可以由下面的迭代法则得到,其中 μ 为迭代指标

xi(μ+1)=biaii−∑k=1(k≠i)n⁡aikaii(i=1,2,⋯,n)(19.48)(μ=0,1,2,⋯;x1(0),x2(0),⋯,xn(0)为给定初值).

公式 (19.48) 称为雅可比方法. 新向量 x(μ+1) 的各个分量由 x(μ) 的分量计算得到. 若至少满足下面的一个条件

(19.49)maxk⁡∑i=1(i≠k)n⁡|aikaii|<1

或

(19.50)maxi⁡∑k=1(k≠i)n⁡|aikaii|<1

则雅可比迭代对于任意初始向量 x(0) 收敛.

2. 高斯-塞德尔迭代 ​

若第一分量 x1(μ+1) 由雅可比方法计算得到,则该值可以用于计算 x2(μ+1) . 可用类似的方法计算后面的分量, 于是得如下迭代公式

xi(μ+1)=biaii−∑k=1(k≠i)n⁡aikaiixk(μ+1)−∑k=i+1n⁡aikaiixk(μ)(i=1,2,⋯,n)(19.51)(μ=0,1,2,⋯;x1(0),x2(0),⋯,xn(0)为给定初值).

公式 (19.51) 称为高斯-塞德尔 (Gauss-Seidel) 方法. 高斯-塞德尔方法通常比雅可比方法收敛得快, 但其收敛判据更复杂.

10x1−3x2−4x3+2x4=14,−3x1+26x2+5x3−x4=22,−4x1+5x2+16x3+5x4=17,2x1+3x2−4x3−12x4=−20.

根据 (19.51) 相应的迭代公式为

x1(μ+1)=110(14+3x2(μ)+4x3(μ)−2x4(μ)),x2(μ+1)=126(22+3x1(μ+1)−5x3(μ)+x4(μ)),x3(μ+1)=116(17+4x1(μ+1)−5x2(μ+1)−5x4(μ)),x4(μ+1)=112(−20+2x1(μ+1)+3x2(μ+1)−4x3(μ+1)).

x(0)

x(1)

x(4)

x(5)

x

0

1.4

1.5053

1.5012

1.5

0

1.0077

0.9946

0.9989

1

0

1.0976

0.5059

0.5014

0.5

0

1.7861

1.9976

1.9995

2

3. 松弛法 ​

高斯-塞德尔方法 (19.51) 的迭代公式可以写成修正形式

xi(μ+1)=xi(μ)+(biaii−∑k=1i−1⁡aikaiixk(μ+1)−∑k=in⁡aikaiixk(μ)),

即

(19.52)xi(μ+1)=xi(μ)+di(μ)(i=1,2,⋯,n;μ=0,1,2,⋯).

选取适当的松弛参数 ω ,将 (19.52) 重新写成如下形式:

(19.53)xi(μ+1)=xi(μ)+ωdi(μ)(i=1,2,⋯,n;μ=0,1,2,⋯)

以提高收敛速度. 可以证明, 仅当

(19.54)0<ω<2

时该方法收敛. 当 ω=1 时,退回高斯-塞德尔迭代. 当 ω>1 时,称为超松弛,此时相应的迭代法称为 SOR (逐次超松弛) 方法. 对某些特殊类型的矩阵可确定最优松弛因子.

迭代法用来求解系数矩阵的主对角线元素 aii 按绝对值比该列或行的其他元素大得多的线性方程组, 或者通过某种方式重排方程组的行可得到这种形式的方程组.

version 1.24.0