回想我们解方程组的过程
如果有方程组:
⎩⎨⎧2x1−x2+2x3x1+2x2+3x3x1+3x2=−8=−7=7
我们会想要通过一系列(消元,代入) 的操作化成是如下的样子:
⎩⎨⎧x1+2x2+3x3x2−3x3x3=−7,=14,=−4;
这样的话我们就可以通过回代求解出来该方程组。注意到变换后的式子是一个下三角矩阵。所以我们想能不能将一个矩阵分解为一个单位上三角矩阵 U 和一个单位下三角矩阵 L 呢
我们有两种实现:
Gauss 消除法
给定一个矩阵:
A=a11⋮an1⋯⋱⋯a1nann∈Rn×n
假定 a11=0,构造 初等矩阵 L1 (li1=a11ai1,i=2,…,n.)
L1=1l21⋮ln1010⋯⋯⋱⋯00⋮1,L1−1=1−l21⋮−ln101⋱0⋯⋯⋮⋯001.
用 L1−1 左乘 A,并将所得的矩阵记为 A(1),则
A(1)=L1−1A=a110⋮0a12a22(1)⋮an2(1)⋯⋯⋱⋯a1na2n(1)ann(1)
将上面的操作作用在 A(1) 的子矩阵 A(1)(2:n,2:n) 上,将其除第一列第一个元素外都变成为 0:假定 a22(1)=0,构造矩阵
L2=100⋮001l32⋮ln20010⋯⋯⋯⋱⋯0001, 其中 li2=a22(1)ai2(1),i=3,4,…,n.
用 L2−1 左乘 A(1),并将所得到的矩阵记为 A(2),则
A(2)=L2−1A=L2−1L1−1A=a1100⋮0a12a22(1)0⋮0a13a23(1)a33(2)⋮an3(2)⋯⋯⋯⋱⋯a1na2n(1)a3n(2)ann(2)
依此类推,假定 akk(k−1)=0(k=3,4,…,n−1)
我们 可以构造一系列的矩阵 L3,L4,…,Ln−1,使得
Ln−1−1⋯L2−1L1−1A=a1100⋮0a12a22(1)0⋮0a13a23(1)a33(2)⋮0⋯⋯⋯⋱⋯a1na2n(1)a3n(2)ann(n−1)≜U→上三角
于是可得 A=LU 其中
L=L1L2⋯Ln−1=1l21l31⋮ln101l32⋮ln2001ln3⋯⋯⋯⋱⋯0001
上面我们构造了矩阵 Lk,我们把这种矩阵也叫做 Gauss 变换,而其中的 lk 被称为 Gauss 向量
说了这么多,不如举个栗子吧
A=1234567810先计算第一个 Gauss 变换 L1,设
L1=1l21l31010001L1−1=1−l21−l31010001显然有
L1−1=1−2−3010001计算第二个 Gauss 变换 L2,
L2=10001l32001L2−1=10001−l32001显然 (不那么显然)
L2−1=10001−2001此时
L2(L1A)=1004−307−61
待定系数法实现 LU 分解
a11a21a31⋮an1a12a22a32an2a13a23a33an3⋯⋯⋯⋱⋯a1na2na3n⋮ann=1l21l31⋮ln11l32ln21⋯⋱ln,n−11u11u12u22u13u23u33⋯⋯⋯⋱u1nu2nu2n⋮unn
u1j=a1j,j=1,2,…,n
ai1=li1u11⇒li1=ai1/u11,i=2,3,…,n
a2j=l21u1j+a2j⇒u2j=a2j−l21u1j,j=2,3,…,n
ai2=li1u12+li2u22⇒li1=(ai2−li1u12)/u22,i=3,4,…,n
- 以此类推,第 k 步时,比较等式两边的第 k 行,可得
ukj=akj−(lk1u1j+⋯+lk,k−1uk−1,j),j=k,k+1,…,n
lik=(aik−li1u1k−⋯−li,k−1uk−1,k)/ukki=k+1,k+2,…,n.
直到第 n 步,即可计算出 L 和 U 的所有元素。
方程求解
现在我们将矩阵 A 分解为了 LU 了
Ax=b⟺{Ly=bUx=y
- 将 A 进行 LU 分解:A=LU
- 向前回代:求解 Ly=b,即得 y=L−1b
- 向后回代:求解 Ux=y,即得 x=U−1y=(LU)−1b=A−1b
相关资料