前言
之前已经将特征分解、SVD分解、LU和PLU分解、Cholesky和LDLT分解总结了,本次是实矩阵分解的最后一节,包括满秩分解和QR分解。
满秩分解
对于实矩阵
A
∈
R
m
×
n
,
r
a
n
k
(
A
)
=
r
A\in R^{m\times n},rank(A)=r
A
∈
R
m
×
n
,
r
a
n
k
(
A
)
=
r
,则可满秩分解为:
A
m
×
n
=
B
m
×
r
C
r
×
n
,
r
a
n
k
(
B
)
=
r
a
n
k
(
C
)
=
r
A_{m\times n}=B_{m\times r}C_{r\times n},rank(B)=rank(C)=r
A
m
×
n
=
B
m
×
r
C
r
×
n
,
r
a
n
k
(
B
)
=
r
a
n
k
(
C
)
=
r
矩阵
B
B
B
和
C
C
C
分别是列满秩和行满秩矩阵。
满秩分解的结果不是唯一的
。
证明:
r
a
n
k
(
A
)
=
r
,
∃
D
∈
R
m
×
n
,
r
a
n
k
(
D
)
=
r
rank(A)=r,\exist D\in R^{m\times n}, rank(D)=r
r
a
n
k
(
A
)
=
r
,
∃
D
∈
R
m
×
n
,
r
a
n
k
(
D
)
=
r
D
D
D
是元素为1或0的对角矩阵,则
A
,
D
A,D
A
,
D
矩阵等价,存在可逆矩阵
P
∈
R
m
×
m
,
Q
∈
R
n
×
n
P\in R^{m\times m},Q\in R^{n\times n}
P
∈
R
m
×
m
,
Q
∈
R
n
×
n
使得
D
=
P
A
Q
,
A
=
P
−
1
D
Q
−
1
D=PAQ,A=P^{-1}DQ^{-1}
D
=
P
A
Q
,
A
=
P
−
1
D
Q
−
1
,此时矩阵
D
D
D
可以进行分块矩阵分解:
D
=
[
E
r
×
r
0
r
×
(
n
−
r
)
0
(
m
−
r
)
×
r
0
(
m
−
r
)
×
(
n
−
r
)
]
=
[
E
r
×
r
0
(
m
−
r
)
×
r
]
[
E
r
×
r
0
r
×
(
n
−
r
)
]
=
L
m
×
r
R
r
×
n
A
=
P
m
×
m
−
1
L
m
×
r
R
r
×
n
Q
n
×
n
−
1
=
B
m
×
r
C
r
×
n
D=\begin{bmatrix} E_{r\times r} & 0_{r\times (n-r)}\\ 0_{(m-r)\times r} & 0_{(m-r)\times (n-r)} \\ \end{bmatrix} \\ \quad \\ =\begin{bmatrix} E_{r\times r} \\ 0_{(m-r)\times r} \\ \end{bmatrix}\begin{bmatrix} E_{r\times r} & 0_{r\times (n-r)} \\ \end{bmatrix} =L_{m\times r}R_{r\times n} \\ \quad \\ A=P^{-1}_{m\times m}L_{m\times r}R_{r\times n}Q^{-1}_{n\times n} = B_{m\times r}C_{r\times n}
D
=
[
E
r
×
r
0
(
m
−
r
)
×
r
0
r
×
(
n
−
r
)
0
(
m
−
r
)
×
(
n
−
r
)
]
=
[
E
r
×
r
0
(
m
−
r
)
×
r
]
[
E
r
×
r
0
r
×
(
n
−
r
)
]
=
L
m
×
r
R
r
×
n
A
=
P
m
×
m
−
1
L
m
×
r
R
r
×
n
Q
n
×
n
−
1
=
B
m
×
r
C
r
×
n
上式说明了两点:(1)满秩分解不唯一,因为
P
,
Q
P,Q
P
,
Q
取法不唯一。(2)分解出列满秩和行满秩矩阵,因为
L
,
R
L,R
L
,
R
是列满秩和行满秩的,而
P
,
Q
P,Q
P
,
Q
是行/列变换,不改变秩。
由于满秩分解结果不唯一,因此工程计算里用的比较少。(每次分解结果不一样是不稳定的)
QR分解
对于矩阵
A
∈
R
m
×
n
,
m
≥
n
A\in R^{m\times n},m\ge n
A
∈
R
m
×
n
,
m
≥
n
,可以进行QR分解:
A
m
×
n
=
Q
m
×
m
R
m
×
n
A_{m\times n}=Q_{m\times m}R_{m\times n}
A
m
×
n
=
Q
m
×
m
R
m
×
n
其中,
Q
Q
Q
是一个正交矩阵,
R
R
R
是一个上三角矩阵。
或者化为另一种形式:
A
m
×
n
=
Q
m
×
n
R
n
×
n
A_{m\times n}=Q_{m\times n}R_{n\times n}
A
m
×
n
=
Q
m
×
n
R
n
×
n
其中,
Q
Q
Q
是一个正交列向量组,
R
R
R
是一个上三角矩阵。此外,如果
A
A
A
是一个列满秩矩阵,并且
R
R
R
的主对角元都为正数时,QR分解的结果唯一
。
QR分解的存在性需要借助householder矩阵证明,这一块我还没看懂,有时间了再补。
QR矩阵分解对于任意矩阵都能够使用,因此当面对
超定或者欠定方程
时,QR分解是一种很好的选择。
总结
在实矩阵分解栏目下,我依次记录了这几种分解方法:特征分解(谱分解),奇异值分解(SVD),LU、PLU分解,Cholesky分解及其改良,满秩分解,QR分解。
这些矩阵分解的方法除了要知道存在性和唯一性,还要能够在实际的工程应用中使用。
幸好现在的数学计算工具非常丰富,大部分常用的矩阵分解方法都有现成的功能包或者开源代码,比如Matlab里的矩阵分解方法就比较齐全。
C++的Eigen库也给出了部分矩阵分解方法的API,并且配有一张矩阵计算速度表如下所示:
下篇,我将把之前讲过的所有实矩阵分解方法做一个归纳。