矩阵的三角分解是求解线性方程组常用的方法,包括LU分解,LDU分解,杜利特(Doolittle)分解,克劳特(Crout)分解,LLT(乔累斯基Cholesky)分解,LDLT(不带平方根乔累斯基)分解等,以及为了满足分解条件又加入行列变换的LPU分解,PLU分解,LUP分解,LDPU分解等。这里矩阵的三角分解系列教程主要是针对在学习三角分解时候的涉及到的一些细节,包括很多方法的来源和证明等,以及其中用到的一些矩阵操作的基础知识,主要包括:
- [矩阵的三角分解系列一] 高斯消元法
- [矩阵的三角分解系列二] LDU基本定理
- [矩阵的三角分解系列三] 杜利特/克劳特分解公式
- [矩阵的三角分解系列四] 乔累斯基(Cholesky)分解公式
- [矩阵的三角分解系列五] 三角分解中的行列变换
- [矩阵的三角分解系列六] Eigen中的三角分解
这个系列后面文章会用到前面文章的理论和技术,所以建议按照顺序查看。
简介
之前[矩阵的三角分解系列三] 杜利特/克劳特分解公式文章介绍了针对一般的 n n n阶方阵 A \boldsymbol{A} A的三角分解的方法,但对于一些特殊的公式在分解时候会满足某些特定的性质可以减少分解的计算,类似乔累斯基(Cholesky)分解这种。
LLT分解
如果
A
\boldsymbol{A}
A是
n
n
n阶对称正定矩阵,则存在
A
=
L
L
T
,
(1)
\boldsymbol{A} = \boldsymbol{L L^{\mathrm{T}}}, \tag{1}
A=LLT,(1)
如果限定
L
\boldsymbol{L}
L对角元素为正,则这个分解是唯一的,其中
L
\boldsymbol{L}
L是下三角矩阵。
证明
因为
A
\boldsymbol{A}
A是对称正定的,所以根据性质可知它的各阶顺序主子式均为正
Δ
k
>
0
(
k
=
1
,
2
,
⋯
,
n
)
\Delta_k > 0(k=1,2,\cdots,n)
Δk>0(k=1,2,⋯,n)。所以由前面的LDU基本定理可知
A
\boldsymbol{A}
A可以被唯一的分解为
A
=
L
~
D
U
~
\boldsymbol{A= \widetilde{L} D \widetilde{U}}
A=L
DU
又知
L
~
\widetilde{\boldsymbol{L}}
L
是单位上三角矩阵,
U
~
\widetilde{\boldsymbol{U}}
U
是单位下三角矩阵,
D
\boldsymbol{D}
D是对角矩阵
D
=
diag
(
d
1
,
d
2
,
⋯
,
d
n
)
\boldsymbol{D}=\operatorname{diag}(d_{1}, d_{2}, \cdots, d_{n})
D=diag(d1,d2,⋯,dn)。
又因为
A
\boldsymbol{A}
A是对称矩阵,所以有
A
=
L
~
D
U
~
=
A
T
=
(
L
~
D
U
~
)
T
=
U
~
T
D
T
L
~
T
\boldsymbol{A= \widetilde{L} D \widetilde{U} = A^{\mathrm{T}} = ( \widetilde{L} D \widetilde{U})^{\mathrm{T}}=\widetilde{U}^{\mathrm{T}} D ^{\mathrm{T}} \widetilde{L}^{\mathrm{T}} }
A=L
DU
=AT=(L
DU
)T=U
TDTL
T
又知道分解是唯一的,所以
L
~
=
U
~
T
,
U
~
=
L
~
T
,
\boldsymbol{\widetilde{L} = \widetilde{U}^{\mathrm{T}}, \widetilde{U} = \widetilde{L}^{\mathrm{T}}},
L
=U
T,U
=L
T,
所以
A
\boldsymbol{A}
A的三角分解又可以写成
A
=
L
~
D
L
~
T
=
U
~
T
D
U
~
\boldsymbol{A = \widetilde{L} D \widetilde{L}^{\mathrm{T}} = \widetilde{U}^{\mathrm{T}} D \widetilde{U}}
A=L
DL
T=U
TDU
后面讲解以
A
=
U
~
T
D
U
~
\boldsymbol{A = \widetilde{U}^{\mathrm{T}} D \widetilde{U}}
A=U
TDU
为例,因为
∣
U
~
∣
=
1
≠
0
|\widetilde{\boldsymbol{U}}| = 1 \neq 0
∣U
∣=1=0,所以
U
~
\widetilde{\boldsymbol{U}}
U
是可逆的,可得
D
=
(
U
~
T
)
−
1
A
U
~
−
1
=
(
U
~
−
1
)
T
A
U
~
−
1
\boldsymbol{D = (\widetilde{U}^{\mathrm{T}})^{-1} A \widetilde{U}^{-1} = (\widetilde{U}^{-1})^{\mathrm{T}} A \widetilde{U}^{-1}}
D=(U
T)−1AU
−1=(U
−1)TAU
−1
又因为
A
\boldsymbol{A}
A是正定矩阵,又当
x
≠
0
\boldsymbol{x} \neq 0
x=0,明显
U
~
−
1
x
≠
0
\boldsymbol{\widetilde{U}^{-1}x} \neq 0
U
−1x=0,所以
x
T
D
x
=
x
T
(
U
~
−
1
)
T
A
U
~
−
1
x
=
(
U
~
−
1
x
)
T
A
U
~
−
1
x
>
0
\boldsymbol{x^{\mathrm{T}} D x =x^{\mathrm{T}} (\widetilde{U}^{-1})^{\mathrm{T}} A \widetilde{U}^{-1} x = (\widetilde{U}^{-1}x)^{\mathrm{T}} A \widetilde{U}^{-1} x} > 0
xTDx=xT(U
−1)TAU
−1x=(U
−1x)TAU
−1x>0
所以
D
\boldsymbol{D}
D也是正定矩阵,那么所有的一阶主子式(对角元素)
d
i
>
0
(
i
=
1
,
2
,
⋯
,
n
)
d_i > 0(i=1,2,\cdots,n)
di>0(i=1,2,⋯,n),所以令
D
1
2
=
diag
(
d
1
,
d
2
,
⋯
,
d
n
)
,
\boldsymbol{D}^{\frac{1}{2}}=\operatorname{diag}(\sqrt{d_{1}}, \sqrt{d_{2}}, \cdots, \sqrt{d_{n}}),
D21=diag(d1,d2,⋯,dn),
则
A
\boldsymbol{A}
A又可以被唯一的分解为
A
=
L
~
D
U
~
=
L
~
D
1
2
D
1
2
L
~
T
=
(
L
~
D
1
2
)
(
L
~
D
1
2
)
T
=
L
L
T
\boldsymbol{A = \widetilde{L} D \widetilde{U} = \widetilde{L}} \boldsymbol{D}^{\frac{1}{2}} \boldsymbol{D}^{\frac{1}{2}} \boldsymbol{\widetilde{L}^{\mathrm{T}}} = (\boldsymbol{\widetilde{L}} \boldsymbol{D}^{\frac{1}{2}})(\boldsymbol{\widetilde{L}} \boldsymbol{D}^{\frac{1}{2}})^{\mathrm{T}} = \boldsymbol{L L^{\mathrm{T}}}
A=L
DU
=L
D21D21L
T=(L
D21)(L
D21)T=LLT
其中
L
=
L
~
D
1
2
\boldsymbol{L}=\boldsymbol{\widetilde{L}} \boldsymbol{D}^{\frac{1}{2}}
L=L
D21对对角线元素全为正数
d
1
,
d
2
,
⋯
,
d
n
\sqrt{d_{1}}, \sqrt{d_{2}}, \cdots, d_{n}
d1,d2,⋯,dn的下三角矩阵。
公式 ( 1 ) (1) (1)证明完成!!!
公式 ( 1 ) (1) (1)是对称正定矩阵 A \boldsymbol{A} A的乔累斯基(Cholesky)分解,亦称为平方根分解。
具体解法
下面给出进行乔累斯基(Cholesky)分解具体分解公式和步骤,对于
n
n
n阶对称正定矩阵
A
\boldsymbol{A}
A,有分解式
A
=
L
L
T
\boldsymbol{A} = \boldsymbol{L L^{\mathrm{T}}}
A=LLT
即
[
a
11
⋯
a
1
j
⋯
a
1
n
⋮
⋮
⋮
a
i
1
⋯
a
i
j
⋯
a
i
n
⋮
⋮
⋮
a
n
1
⋯
a
n
j
⋯
a
n
n
]
=
[
l
11
⋮
⋱
l
i
1
⋯
l
i
i
⋮
⋱
l
n
1
⋯
l
n
i
⋯
l
n
n
]
[
l
11
⋯
l
j
1
⋯
l
n
1
⋱
⋮
l
j
j
⋯
l
n
j
⋱
⋮
l
n
n
]
\left[\begin{matrix} a_{11} & \cdots & a_{1 j} & \cdots & a_{1 n} \\ \vdots & & \vdots & & \vdots \\ a_{i 1} & \cdots & a_{i j} & \cdots & a_{i n} \\ \vdots & & \vdots & & \vdots \\ a_{n 1} & \cdots & a_{n j} & \cdots & a_{n n} \end{matrix}\right] = \left[\begin{matrix} l_{11} & & & & \\ \vdots & \ddots & & & \\ l_{i 1} & \cdots & l_{i i} & & \\ \vdots & & & \ddots & \\ l_{n 1} & \cdots & l_{n i} & \cdots & l_{n n} \end{matrix}\right] \left[\begin{matrix} l_{11} & \cdots & l_{j 1} & \cdots & l_{n 1} \\ & \ddots & & & \vdots \\ & & l_{j j} & \cdots & l_{n j} \\ & & & \ddots & \vdots \\ & & & & l_{n n} \end{matrix}\right]
⎣⎢⎢⎢⎢⎢⎢⎡a11⋮ai1⋮an1⋯⋯⋯a1j⋮aij⋮anj⋯⋯⋯a1n⋮ain⋮ann⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡l11⋮li1⋮ln1⋱⋯⋯liilni⋱⋯lnn⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡l11⋯⋱lj1ljj⋯⋯⋱ln1⋮lnj⋮lnn⎦⎥⎥⎥⎥⎥⎥⎤
由于
A
\boldsymbol{A}
A对称,所以只考虑下三角元素,即
i
≥
j
i \geq j
i≥j的情况,有
a
i
j
=
∑
k
=
1
j
l
i
k
l
j
k
=
∑
k
=
1
j
−
1
l
i
k
l
j
k
+
l
i
j
l
j
j
,
a_{i j} = \sum_{k=1}^{j}l_{ik}l_{jk} = \sum_{k=1}^{j-1}l_{ik}l_{jk} + l_{ij}l_{jj},
aij=k=1∑jlikljk=k=1∑j−1likljk+lijljj,
即
l
i
j
=
(
a
i
j
−
∑
k
=
1
j
−
1
l
i
k
l
j
k
)
/
l
j
j
,
i
≥
j
,
(2)
l_{ij} = \left( a_{i j}-\sum_{k=1}^{j-1}l_{ik}l_{jk} \right) / l_{jj}, \quad i\geq j, \tag{2}
lij=(aij−k=1∑j−1likljk)/ljj,i≥j,(2)
而且当
i
=
j
i=j
i=j时,有
l
i
i
=
a
i
i
−
∑
k
=
1
i
−
1
l
i
k
2
.
(3)
l_{ii} = \sqrt{a_{i i}-\sum_{k=1}^{i-1}l_{ik}^2}. \tag{3}
lii=aii−k=1∑i−1lik2.(3)
这里与克劳特三角分解公式不同的是矩阵
U
=
L
T
\boldsymbol{U=L^{\mathrm{T}}}
U=LT,所以在求得
L
\boldsymbol{L}
L的第
i
i
i行元素之后,
L
T
\boldsymbol{L^{\mathrm{T}}}
LT的第
i
i
i列元素也已求出,所以计算量相当于克劳特分解的一半左右(当然对角线元素是都需要求一次)。
稳定性
同时又有
a
i
i
=
∑
k
=
1
i
l
i
k
2
,
i
=
1
,
2
,
⋯
,
n
a_{i i} = \sum_{k=1}^{i}l_{ik}^2, \quad i = 1,2,\cdots,n
aii=k=1∑ilik2,i=1,2,⋯,n
所以
l
i
k
2
≤
a
i
i
≤
max
1
≤
i
≤
n
{
a
i
i
}
l_{ik}^2 \leq a_{i i} \leq \max_{1 \leq i \leq n}\{ a_{i i} \}
lik2≤aii≤1≤i≤nmax{aii}
于是
max
i
,
k
{
l
i
k
2
}
≤
max
1
≤
i
≤
n
{
a
i
i
}
,
\max_{i,k}\{ l_{ik}^2 \} \leq \max_{1 \leq i \leq n}\{ a_{i i} \},
i,kmax{lik2}≤1≤i≤nmax{aii},
以上分析说明,分解过程中元素
l
i
k
l_{ik}
lik的数量级完全可以控制,从而计算过程是稳定的。
LDLT分解
然而,公式
(
1
)
(1)
(1)这种
L
L
T
\boldsymbol{L L^{\mathrm{T}}}
LLT分解也还是存在很大的缺陷的,因为计算这种分解要进行
n
n
n次开方运算,而绝大多数计算机上的开方运算是用子程序实现的(转化成对数计算),这样不仅增加了计算量,而且还会扩大误差,甚至计算过程中有平方根号下出现负数的风险。为了避免上面的平方根运算,只需要在公式
(
1
)
(1)
(1)中的
L
\boldsymbol{L}
L和
L
T
\boldsymbol{L^{\mathrm{T}}}
LT之间插入一个特殊的对角矩阵
D
\boldsymbol{D}
D,就能达到预定的效果。
如果
A
\boldsymbol{A}
A是
n
n
n阶对称正定矩阵,则
A
\boldsymbol{A}
A可以唯一的分解为
A
=
L
D
L
T
,
(4)
\boldsymbol{A} = \boldsymbol{L D L^{\mathrm{T}}}, \tag{4}
A=LDLT,(4)
其中
L
\boldsymbol{L}
L是下三角矩阵,其中
D
\boldsymbol{D}
D是对角矩阵,且对角线元素是
L
\boldsymbol{L}
L对角线元素的倒数,即
L
=
[
l
11
l
21
l
22
⋮
⋮
⋱
l
n
1
l
n
2
⋯
l
n
n
]
,
D
=
[
1
l
11
1
l
22
⋱
1
l
22
]
.
\boldsymbol{L} = \left[\begin{matrix} l_{11} \\ l_{21} & l_{22} \\ \vdots & \vdots & \ddots \\ l_{n 1} & l_{n 2} & \cdots & l_{n n} \end{matrix}\right] , \quad \boldsymbol{D} = \left[\begin{matrix} \frac{1}{l_{11}} \\ & \frac{1}{l_{22}} \\ & & \ddots \\ & & & \frac{1}{l_{22}} \end{matrix}\right].
L=⎣⎢⎢⎢⎡l11l21⋮ln1l22⋮ln2⋱⋯lnn⎦⎥⎥⎥⎤,D=⎣⎢⎢⎡l111l221⋱l221⎦⎥⎥⎤.
证明
利用特劳特分解公式以及矩阵对称性
a
i
j
=
a
=
j
i
a_{ij} = a={ji}
aij=a=ji就能推出公式
(
4
)
(4)
(4)了。证明如下
A
=
[
l
11
l
21
l
21
⋮
⋮
⋱
l
n
1
l
n
2
⋯
l
n
n
]
[
1
u
12
⋯
u
1
n
1
⋯
u
2
n
⋱
⋮
1
]
\boldsymbol{A} = \left[\begin{matrix} l_{11} \\ l_{2 1} & l_{2 1} \\ \vdots & \vdots & \ddots & \\ l_{n 1} & l_{n 2} & \cdots & l_{n n} \end{matrix}\right] \left[\begin{matrix} 1 & u_{12} & \cdots & u_{1 n} \\ & 1 & \cdots & u_{2 n} \\ & & \ddots & \vdots \\ & & & 1 \end{matrix}\right]
A=⎣⎢⎢⎢⎡l11l21⋮ln1l21⋮ln2⋱⋯lnn⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡1u121⋯⋯⋱u1nu2n⋮1⎦⎥⎥⎥⎤
其中
{
u
12
=
a
12
/
l
11
=
a
21
/
l
11
=
l
21
/
l
11
⋮
u
1
n
=
l
n
1
/
l
11
{
u
23
=
(
a
23
−
l
21
u
13
)
/
l
22
=
(
a
32
−
l
21
l
31
/
l
11
)
/
l
22
=
(
a
32
−
l
31
u
12
)
/
l
22
=
l
32
/
l
22
⋮
u
2
n
=
l
n
2
/
l
22
\begin{aligned} &\left\{\begin{aligned} u_{12}=& a_{12} / l_{11}=a_{21} / l_{11}=l_{21} / l_{11} \\ \vdots \\ u_{1 n}=& l_{n 1} / l_{11} \end{aligned}\right. \\ &\left\{\begin{aligned} u_{23}=&\left(a_{23}-l_{21} u_{13}\right) / l_{22}=\left(a_{32}-l_{21} l_{31} / l_{11}\right) / l_{22} \\ =&\left(a_{32}-l_{31} u_{12}\right) / l_{22}=l_{32} / l_{22} \\ \vdots \\ u_{2 n}=& l_{n 2} / l_{22} \end{aligned}\right. \end{aligned}
⎩⎪⎪⎨⎪⎪⎧u12=⋮u1n=a12/l11=a21/l11=l21/l11ln1/l11⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧u23==⋮u2n=(a23−l21u13)/l22=(a32−l21l31/l11)/l22(a32−l31u12)/l22=l32/l22ln2/l22
以此类推,
U
\boldsymbol{U}
U的第
j
j
j行元素有
{
u
j
,
j
+
1
=
l
j
+
1
,
j
/
l
j
j
,
j
=
1
,
⋯
,
n
−
1
,
⋮
u
j
n
=
l
n
j
/
l
j
j
\left\{\begin{aligned} & u_{j, j+1}=l_{j+1, j} / l_{j j}, \quad j=1, \cdots, n-1, \\ & \vdots \\ & u_{j n}=l_{n j} / l_{j j} \end{aligned}\right.
⎩⎪⎪⎨⎪⎪⎧uj,j+1=lj+1,j/ljj,j=1,⋯,n−1,⋮ujn=lnj/ljj
于是可以推导出
U
\boldsymbol{U}
U为
U
=
[
1
⋯
l
j
1
l
11
⋯
l
n
1
l
11
⋱
⋮
⋮
1
⋯
l
n
j
l
j
j
⋱
⋮
1
]
=
[
1
l
11
⋱
1
l
j
j
⋱
1
l
n
n
]
[
l
11
⋯
l
j
1
⋯
l
n
1
⋱
⋮
⋮
l
j
j
⋯
l
n
j
⋱
⋮
l
n
n
]
=
D
L
T
\begin{aligned} \boldsymbol{U} & = \left[\begin{matrix} 1 & \cdots & \frac{l_{j 1}}{l_{11}} & \cdots & \frac{l_{n 1}}{l_{11}} \\ & \ddots & \vdots & & \vdots \\ & & 1 & \cdots & \frac{l_{n j}}{l_{j j}} \\ & & & \ddots & \vdots \\ & & & & 1 \end{matrix}\right] \\ & = \left[\begin{matrix} \frac{1}{l_{11}} \\ & \ddots \\ & & \frac{1}{l_{jj}} \\ & & & \ddots \\ & & & & \frac{1}{l_{nn}} \end{matrix}\right] \left[\begin{matrix} l_{11} & \cdots & l_{j 1} & \cdots & l_{n 1} \\ & \ddots & \vdots & & \vdots \\ & & l_{j j} & \cdots & l_{n j} \\ & & & \ddots & \vdots \\ & & & & l_{n n} \end{matrix}\right] = \boldsymbol{D L^{\mathrm{T}}} \end{aligned}
U=⎣⎢⎢⎢⎢⎢⎢⎢⎡1⋯⋱l11lj1⋮1⋯⋯⋱l11ln1⋮ljjlnj⋮1⎦⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡l111⋱ljj1⋱lnn1⎦⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡l11⋯⋱lj1⋮ljj⋯⋯⋱ln1⋮lnj⋮lnn⎦⎥⎥⎥⎥⎥⎥⎤=DLT
所以有
L
D
L
T
\boldsymbol{L D L^{\mathrm{T}}}
LDLT
公式
(
15
)
(15)
(15)是对称正定矩阵
A
\boldsymbol{A}
A的不带平方根乔累斯基(Cholesky)分解,亦称乔累斯基(Cholesky)分解的变形。
具体解法
下面给出进行不带平方根乔累斯基(Cholesky)分解具体分解公式和步骤,对于
n
n
n阶对称正定矩阵
A
\boldsymbol{A}
A,有分解式
L
D
L
T
\boldsymbol{L D L^{\mathrm{T}}}
LDLT
即
[
a
11
⋯
a
i
1
⋯
a
n
1
⋮
⋮
⋮
a
i
1
⋯
a
i
i
⋯
a
n
i
⋮
⋮
⋮
a
n
1
⋯
a
n
i
⋯
a
n
n
]
=
[
l
11
⋮
⋱
l
i
1
⋯
l
i
i
⋮
⋮
⋱
l
n
1
⋯
l
n
i
⋯
l
n
n
]
[
1
⋯
l
j
1
l
11
⋯
l
n
1
l
11
⋱
⋮
⋮
1
⋯
l
n
j
l
j
j
⋱
⋮
1
]
\left[\begin{matrix} a_{11} & \cdots & a_{i 1} & \cdots & a_{n 1} \\ \vdots & & \vdots & & \vdots \\ a_{i 1} & \cdots & a_{i i} & \cdots & a_{n i} \\ \vdots & & \vdots & & \vdots \\ a_{n 1} & \cdots & a_{n i} & \cdots & a_{n n} \end{matrix}\right] = \left[\begin{matrix} l_{11} & & & & \\ \vdots & \ddots & & & \\ l_{i 1} & \cdots & l_{i i} & & \\ \vdots & & \vdots & \ddots & \\ l_{n 1} & \cdots & l_{n i} & \cdots & l_{n n} \end{matrix}\right] \left[\begin{matrix} 1 & \cdots & \frac{l_{j 1}}{l_{11}} & \cdots & \frac{l_{n 1}}{l_{11}} \\ & \ddots & \vdots & & \vdots \\ & & 1 & \cdots & \frac{l_{n j}}{l_{j j}} \\ & & & \ddots & \vdots \\ & & & & 1 \end{matrix}\right]
⎣⎢⎢⎢⎢⎢⎢⎡a11⋮ai1⋮an1⋯⋯⋯ai1⋮aii⋮ani⋯⋯⋯an1⋮ani⋮ann⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡l11⋮li1⋮ln1⋱⋯⋯lii⋮lni⋱⋯lnn⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎡1⋯⋱l11lj1⋮1⋯⋯⋱l11ln1⋮ljjlnj⋮1⎦⎥⎥⎥⎥⎥⎥⎥⎤
由于
A
\boldsymbol{A}
A对称,所以只考虑下三角元素,即
i
≥
j
i \geq j
i≥j的情况,有
a
i
j
=
∑
k
=
1
j
l
i
k
(
l
j
k
/
l
k
k
)
=
∑
k
=
1
j
−
1
l
i
k
(
l
j
k
/
l
k
k
)
+
l
i
j
,
a_{i j} = \sum_{k=1}^{j}l_{ik}(l_{jk}/l_{kk}) = \sum_{k=1}^{j-1}l_{ik}(l_{jk}/l_{kk}) + l_{ij},
aij=k=1∑jlik(ljk/lkk)=k=1∑j−1lik(ljk/lkk)+lij,
即
l
i
j
=
a
i
j
−
∑
k
=
1
j
−
1
l
i
k
l
j
k
/
l
k
k
,
i
≥
j
,
(5)
l_{ij} = a_{i j}-\sum_{k=1}^{j-1}l_{ik}l_{jk} / l_{kk}, \quad i\geq j, \tag{5}
lij=aij−k=1∑j−1likljk/lkk,i≥j,(5)
而且当
i
=
j
i=j
i=j时,有
l
i
i
=
a
i
i
−
∑
k
=
1
j
−
1
l
i
k
2
/
l
k
k
,
(6)
l_{ii} = a_{i i}-\sum_{k=1}^{j-1}l_{ik}^2 / l_{kk}, \tag{6}
lii=aii−k=1∑j−1lik2/lkk,(6)
这样做分解计算就不会出现开方的运算,弥补了公式
(
1
)
(1)
(1)平方根分解的缺陷。因此,
L
D
L
T
\boldsymbol{L D L T}
LDLT是求解对称正定线性方程组最常用的一个分解公式。
例子
LLT分解
将下列矩阵进行乔累斯基(Cholesky)分解
A
=
[
2
1
1
1
3
2
1
2
2
]
.
\boldsymbol{A} = \left[ \begin{matrix} 2 & 1 & 1 \\ 1 & 3 & 2 \\ 1 & 2 & 2 \end{matrix} \right].
A=⎣⎡211132122⎦⎤.
解:
根据公式
(
13
)
(13)
(13)和公式
(
14
)
(14)
(14)可得
l
11
=
a
11
=
2
l
21
=
a
21
/
l
11
=
2
2
l
22
=
a
22
−
l
21
2
=
10
2
l
31
=
a
31
/
l
11
=
2
2
l
32
=
(
a
32
−
l
31
l
21
)
/
l
22
=
3
10
10
l
33
=
a
33
−
l
31
2
−
l
32
2
=
=
15
5
\begin{aligned} l_{11} &= \sqrt{a_{11}}=\sqrt{2} \\ l_{21} &= a_{21}/ l_{11}=\frac{\sqrt{2}}{2} \\ l_{22} &=\sqrt{a_{22}-l_{21}^2}=\frac{\sqrt{10}}{2} \\ l_{31} &=a_{31}/ l_{11}=\frac{\sqrt{2}}{2} \\ l_{32} &=\left(a_{32}-l_{31}l_{21} \right) / l_{22}=\frac{3\sqrt{10}}{10} \\ l_{33} &=\sqrt{a_{33}-l_{31}^2-l_{32}^2}==\frac{\sqrt{15}}{5} \end{aligned}
l11l21l22l31l32l33=a11=2=a21/l11=22=a22−l212=210=a31/l11=22=(a32−l31l21)/l22=10310=a33−l312−l322==515
则
A
=
L
L
T
=
[
2
2
2
10
2
2
2
3
10
10
15
5
]
[
2
2
2
2
2
10
2
3
10
10
15
5
]
\boldsymbol{A} = \boldsymbol{L L^{\mathrm{T}}} = \left[ \begin{matrix} \sqrt{2} & \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{10}}{2} \\ \frac{\sqrt{2}}{2} & \frac{3\sqrt{10}}{10} & \frac{\sqrt{15}}{5} \end{matrix} \right] \left[ \begin{matrix} \sqrt{2} & \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ & \frac{\sqrt{10}}{2} & \frac{3\sqrt{10}}{10} \\ & & \frac{\sqrt{15}}{5} \end{matrix} \right]
A=LLT=⎣⎢⎡2222221010310515⎦⎥⎤⎣⎢⎡2222102210310515⎦⎥⎤
LDLT分解
将下列矩阵进行不带平方根乔累斯基(Cholesky)分解
A
=
[
2
1
1
1
3
2
1
2
2
]
.
\boldsymbol{A} = \left[ \begin{matrix} 2 & 1 & 1 \\ 1 & 3 & 2 \\ 1 & 2 & 2 \end{matrix} \right].
A=⎣⎡211132122⎦⎤.
解:
根据公式
(
16
)
(16)
(16)和公式
(
17
)
(17)
(17)可得
l
11
=
a
11
=
2
l
21
=
a
21
=
1
l
22
=
a
22
−
l
21
2
/
l
11
=
5
2
l
31
=
a
31
=
1
l
32
=
a
32
−
l
31
l
21
/
l
11
=
3
2
l
33
=
a
33
−
l
31
2
/
l
11
−
l
32
2
/
l
22
=
=
3
5
\begin{aligned} l_{11} &=a_{11}=2 \\ l_{21} &=a_{21}=1 \\ l_{22} &=a_{22}-l_{21}^2/l_{11}=\frac{5}{2} \\ l_{31} &=a_{31}=1 \\ l_{32} &=a_{32}-l_{31}l_{21} / l_{11}=\frac{3}{2} \\ l_{33} &=a_{33}-l_{31}^2/l_{11}-l_{32}^2/l_{22}==\frac{3}{5} \end{aligned}
l11l21l22l31l32l33=a11=2=a21=1=a22−l212/l11=25=a31=1=a32−l31l21/l11=23=a33−l312/l11−l322/l22==53
则
A
=
L
D
L
T
=
[
2
1
5
2
1
3
2
3
5
]
[
1
2
2
5
5
3
]
[
2
1
1
5
2
3
2
3
5
]
\boldsymbol{A} = \boldsymbol{L D L^{\mathrm{T}}} = \left[ \begin{matrix} 2 & \\ 1 & \frac{5}{2} \\ 1 & \frac{3}{2} & \frac{3}{5} \end{matrix} \right] \left[ \begin{matrix} \frac{1}{2} & \\ & \frac{2}{5} \\ & & \frac{5}{3} \end{matrix} \right] \left[ \begin{matrix} 2 & 1 & 1 \\ & \frac{5}{2} & \frac{3}{2} \\ & & \frac{3}{5} \end{matrix} \right]
A=LDLT=⎣⎡211252353⎦⎤⎣⎡215235⎦⎤⎣⎡212512353⎦⎤
引用
【1】 矩阵论(第二版)