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=(a11a12a1na21a22a2nan1an2ann),b=(b1,b2,bn),x=(x1,x2,xn).

如果矩阵 An 阶正定的,则方程组 (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=(r11r12r13r1nr22r23r2nr33r3n0rnn)

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

(19.28)xn=cnrnn,xi=1rii(cik=i+1nrikxk)(i=n1,n2,,1).

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

变换从 AR 经过 n1 步,所谓消元. 其第一步如下. 这一步将矩阵 A 变换成 A1 :

(19.29)A=(a11a12a1na21a22a2na31a32a3nan1an2ann),A1=(a11(1)a12(1)a1n(1)0a22(1)a2n(1)0a32(1)a3n(1)0an2(1)ann(1)).

于是:

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

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

(3) 第 li1(i=2,3,,n) 乘以第一行减去矩阵 Ar 行.

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

aik(1)=a¯ikli1a¯1k,其中 li1=a¯i1a¯11,(19.30)bi(1)=b¯ili1b¯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=(r11r12r13r1nr22r23r2nr33r3n0rnn),L=(1l2110l31l321ln1ln2ln,n11).

(19.32)

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

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

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

(A,b)=(316213111)|274|(3162/3121/321)=(31621/31117/310/3110/3)(31621/32/3110/32/31/21/24)

P=(100001010)PA=(316111213)L=(1001/3102/31/21),R=(31602/31001/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. 主元的选取

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

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

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

(19.33)|ark(k1)|=maxik|aik(k1)|.

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

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

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

(19.34)Q(x)=xTAx=i=1nk=1naikxixk>0,

其中 xRn,x0 . 由于每一个正定矩阵存在唯一个三角分解

(19.35)A=LLT

其中

(19.36a)L=(l11l21l220l31l32l33ln1ln2ln3lnn),(19.36b)lkk=akk(k1),lik=aik(k1)lkk(i=k,k+1,,n);(19.36c)aij(k)=aij(k1)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=1naikxk=bi(i=1,2,,m;m>n)

的矩阵形式为

(19.38)Ax=b.

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

(19.39)ri=k=1naikxkbi(i=1,2,,m;m>n),

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

(19.40)i=1mri2=i=1m[k=1naikxkbi]2=F(x1,x2,,xn)=min!.

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

(19.41)Fxk=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) 在正交变换的过程中不改变向量的长度,即向量 xx~=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)=(r11r12r1nr22r2nrnnO).

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

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

r11x1+r12x2++r1nxnb^1=r^1,r22x2++r2nxnb^2=r^2,=(19.46)rnnxnb^n=r^n,b^n+1=r^n+1,b^m=r^m.

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

(19.47)Rx=b^0

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

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

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

(2)豪斯霍尔德变换.

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

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

19.2.1.4 迭代方法

1. 雅可比方法

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

xi(μ+1)=biaiik=1(ki)naikaii(i=1,2,,n)(19.48)(μ=0,1,2,;x1(0),x2(0),,xn(0)为给定初值).

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

(19.49)maxki=1(ik)n|aikaii|<1

(19.50)maxik=1(ki)n|aikaii|<1

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

2. 高斯-塞德尔迭代

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

xi(μ+1)=biaiik=1(ki)naikaiixk(μ+1)k=i+1naikaiixk(μ)(i=1,2,,n)(19.51)(μ=0,1,2,;x1(0),x2(0),,xn(0)为给定初值).

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

10x13x24x3+2x4=14,3x1+26x2+5x3x4=22,4x1+5x2+16x3+5x4=17,2x1+3x24x312x4=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(μ)+(biaiik=1i1aikaiixk(μ+1)k=inaikaiixk(μ)),

(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