前置知识: 线性代数

LU分解

9 minAdvanced2026/6/14

LU分解的定义与条件,Doolittle分解与Crout分解,LU分解的计算步骤与应用。

1. LU分解的定义

1.1 定义

AAnn 阶方阵,若 AA 可以分解为:

A=LUA = LU

其中 LL 为下三角矩阵,UU 为上三角矩阵,则称为 AALU 分解

1.2 存在条件

定理:若 AA 的所有顺序主子式都不为零(Δk0\Delta_k \neq 0k=1,2,,n1k = 1, 2, \ldots, n-1),则 AA 的 LU 分解存在且唯一(在指定 LLUU 的对角线元素时)。

1.3 PLU 分解

对于一般的矩阵,可能需要行交换才能进行 LU 分解:

PA=LUPA = LU

其中 PP 为置换矩阵。这称为 PLU 分解,对任何可逆矩阵都存在。

2. Doolittle 分解

2.1 定义

在 Doolittle 分解中,LL单位下三角矩阵(主对角线为1),UU 为上三角矩阵:

A=LU=(100l2110ln1ln21)(u11u12u1n0u22u2n00unn)A = LU = \begin{pmatrix} 1 & 0 & \cdots & 0 \\ l_{21} & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ l_{n1} & l_{n2} & \cdots & 1 \end{pmatrix}\begin{pmatrix} u_{11} & u_{12} & \cdots & u_{1n} \\ 0 & u_{22} & \cdots & u_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & u_{nn} \end{pmatrix}

2.2 计算公式

第一行u1j=a1ju_{1j} = a_{1j}j=1,2,,nj = 1, 2, \ldots, n

第一列li1=ai1/u11l_{i1} = a_{i1}/u_{11}i=2,3,,ni = 2, 3, \ldots, n

一般地k=2,3,,nk = 2, 3, \ldots, n):

ukj=akjs=1k1lksusj(j=k,k+1,,n)u_{kj} = a_{kj} - \sum_{s=1}^{k-1} l_{ks}u_{sj} \quad (j = k, k+1, \ldots, n)

lik=1ukk(aiks=1k1lisusk)(i=k+1,k+2,,n)l_{ik} = \frac{1}{u_{kk}}\left(a_{ik} - \sum_{s=1}^{k-1} l_{is}u_{sk}\right) \quad (i = k+1, k+2, \ldots, n)

2.3 完整示例

A=(211433879)A = \begin{pmatrix} 2 & 1 & 1 \\ 4 & 3 & 3 \\ 8 & 7 & 9 \end{pmatrix} 进行 Doolittle 分解。

步骤1u11=2u_{11} = 2u12=1u_{12} = 1u13=1u_{13} = 1

l21=4/2=2l_{21} = 4/2 = 2l31=8/2=4l_{31} = 8/2 = 4

步骤2u22=32×1=1u_{22} = 3 - 2 \times 1 = 1u23=32×1=1u_{23} = 3 - 2 \times 1 = 1

l32=(74×1)/1=3l_{32} = (7 - 4 \times 1)/1 = 3

步骤3u33=94×13×1=2u_{33} = 9 - 4 \times 1 - 3 \times 1 = 2

L=(100210431),U=(211011002)L = \begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ 4 & 3 & 1 \end{pmatrix}, \quad U = \begin{pmatrix} 2 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 2 \end{pmatrix}

验证:LU=(211433879)=ALU = \begin{pmatrix} 2 & 1 & 1 \\ 4 & 3 & 3 \\ 8 & 7 & 9 \end{pmatrix} = A

3. Crout 分解

3.1 定义

在 Crout 分解中,LL 为下三角矩阵,UU单位上三角矩阵(主对角线为1):

A=LU=(l1100l21l220ln1ln2lnn)(1u12u1n01u2n001)A = LU = \begin{pmatrix} l_{11} & 0 & \cdots & 0 \\ l_{21} & l_{22} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ l_{n1} & l_{n2} & \cdots & l_{nn} \end{pmatrix}\begin{pmatrix} 1 & u_{12} & \cdots & u_{1n} \\ 0 & 1 & \cdots & u_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \end{pmatrix}

3.2 计算公式

第一列li1=ai1l_{i1} = a_{i1}i=1,2,,ni = 1, 2, \ldots, n

第一行u1j=a1j/l11u_{1j} = a_{1j}/l_{11}j=2,3,,nj = 2, 3, \ldots, n

一般地

lik=aiks=1k1lisusk(i=k,k+1,,n)l_{ik} = a_{ik} - \sum_{s=1}^{k-1} l_{is}u_{sk} \quad (i = k, k+1, \ldots, n)

ukj=1lkk(akjs=1k1lksusj)(j=k+1,k+2,,n)u_{kj} = \frac{1}{l_{kk}}\left(a_{kj} - \sum_{s=1}^{k-1} l_{ks}u_{sj}\right) \quad (j = k+1, k+2, \ldots, n)

4. LDU 分解

4.1 定义

AA 分解为 A=LDUA = LDU,其中 LL 为单位下三角矩阵,DD 为对角矩阵,UU 为单位上三角矩阵。

4.2 与 LU 分解的关系

A=LUA = LU(Doolittle 分解),则 A=LDUA = LDU',其中 D=diag(u11,u22,,unn)D = \text{diag}(u_{11}, u_{22}, \ldots, u_{nn})U=D1UU' = D^{-1}U

5. LU 分解的应用

5.1 解线性方程组

Ax=bAx = bA=LUA = LU

  1. Ly=bLy = b(前代,O(n2)O(n^2)
  2. Ux=yUx = y(回代,O(n2)O(n^2)

分解本身需要 O(n3)O(n^3),但一旦分解完成,对不同的 bb 只需 O(n2)O(n^2)

5.2 求行列式

A=LU=u11u22unn|A| = |L| \cdot |U| = u_{11}u_{22}\cdots u_{nn}(Doolittle 分解中 L=1|L| = 1

5.3 求逆矩阵

A1=U1L1A^{-1} = U^{-1}L^{-1},分别解 nn 个三角形方程组。

6. Cholesky 分解

6.1 定义

AA 为正定矩阵,则 AA 可分解为:

A=LLTA = LL^T

其中 LL 为下三角矩阵(对角线元素为正)。这称为 Cholesky 分解

6.2 计算公式

lkk=akks=1k1lks2l_{kk} = \sqrt{a_{kk} - \sum_{s=1}^{k-1} l_{ks}^2}

lik=1lkk(aiks=1k1lislks)(i=k+1,,n)l_{ik} = \frac{1}{l_{kk}}\left(a_{ik} - \sum_{s=1}^{k-1} l_{is}l_{ks}\right) \quad (i = k+1, \ldots, n)

6.3 示例

A=(4225)A = \begin{pmatrix} 4 & 2 \\ 2 & 5 \end{pmatrix} 进行 Cholesky 分解。

l11=2l_{11} = 2l21=2/2=1l_{21} = 2/2 = 1l22=51=2l_{22} = \sqrt{5 - 1} = 2

L=(2012),LT=(2102)L = \begin{pmatrix} 2 & 0 \\ 1 & 2 \end{pmatrix}, \quad L^T = \begin{pmatrix} 2 & 1 \\ 0 & 2 \end{pmatrix}

验证:LLT=(4225)LL^T = \begin{pmatrix} 4 & 2 \\ 2 & 5 \end{pmatrix}

6.4 Cholesky 分解的优势

  • 计算量约为 LU 分解的一半
  • 数值稳定性好
  • 只需存储 LL,节省存储空间
  • 正定性的数值验证