设 A 为 n 阶方阵,若 A 可以分解为:
A=LU
其中 L 为下三角矩阵,U 为上三角矩阵,则称为 A 的 LU 分解。
定理:若 A 的所有顺序主子式都不为零(Δk=0,k=1,2,…,n−1),则 A 的 LU 分解存在且唯一(在指定 L 或 U 的对角线元素时)。
对于一般的矩阵,可能需要行交换才能进行 LU 分解:
PA=LU
其中 P 为置换矩阵。这称为 PLU 分解,对任何可逆矩阵都存在。
在 Doolittle 分解中,L 为单位下三角矩阵(主对角线为1),U 为上三角矩阵:
A=LU=1l21⋮ln101⋮ln2⋯⋯⋱⋯00⋮1u110⋮0u12u22⋮0⋯⋯⋱⋯u1nu2n⋮unn
第一行:u1j=a1j(j=1,2,…,n)
第一列:li1=ai1/u11(i=2,3,…,n)
一般地(k=2,3,…,n):
ukj=akj−∑s=1k−1lksusj(j=k,k+1,…,n)
lik=ukk1(aik−∑s=1k−1lisusk)(i=k+1,k+2,…,n)
对 A=248137139 进行 Doolittle 分解。
步骤1:u11=2,u12=1,u13=1
l21=4/2=2,l31=8/2=4
步骤2:u22=3−2×1=1,u23=3−2×1=1
l32=(7−4×1)/1=3
步骤3:u33=9−4×1−3×1=2
L=124013001,U=200110112
验证:LU=248137139=A
在 Crout 分解中,L 为下三角矩阵,U 为单位上三角矩阵(主对角线为1):
A=LU=l11l21⋮ln10l22⋮ln2⋯⋯⋱⋯00⋮lnn10⋮0u121⋮0⋯⋯⋱⋯u1nu2n⋮1
第一列:li1=ai1(i=1,2,…,n)
第一行:u1j=a1j/l11(j=2,3,…,n)
一般地:
lik=aik−∑s=1k−1lisusk(i=k,k+1,…,n)
ukj=lkk1(akj−∑s=1k−1lksusj)(j=k+1,k+2,…,n)
将 A 分解为 A=LDU,其中 L 为单位下三角矩阵,D 为对角矩阵,U 为单位上三角矩阵。
若 A=LU(Doolittle 分解),则 A=LDU′,其中 D=diag(u11,u22,…,unn),U′=D−1U。
Ax=b,A=LU:
- 解 Ly=b(前代,O(n2))
- 解 Ux=y(回代,O(n2))
分解本身需要 O(n3),但一旦分解完成,对不同的 b 只需 O(n2)。
∣A∣=∣L∣⋅∣U∣=u11u22⋯unn(Doolittle 分解中 ∣L∣=1)
A−1=U−1L−1,分别解 n 个三角形方程组。
若 A 为正定矩阵,则 A 可分解为:
A=LLT
其中 L 为下三角矩阵(对角线元素为正)。这称为 Cholesky 分解。
lkk=akk−∑s=1k−1lks2
lik=lkk1(aik−∑s=1k−1lislks)(i=k+1,…,n)
对 A=(4225) 进行 Cholesky 分解。
l11=2,l21=2/2=1,l22=5−1=2
L=(2102),LT=(2012)
验证:LLT=(4225)
- 计算量约为 LU 分解的一半
- 数值稳定性好
- 只需存储 L,节省存储空间
- 正定性的数值验证