- 前言
- 满秩分解
- QR分解
- 总结
之前已经将特征分解、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∈Rm×n,rank(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 Am×n=Bm×rCr×n,rank(B)=rank(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 rank(A)=r,∃D∈Rm×n,rank(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∈Rm×m,Q∈Rn×n使得 D = P A Q , A = P − 1 D Q − 1 D=PAQ,A=P^{-1}DQ^{-1} D=PAQ,A=P−1DQ−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=[Er×r0(m−r)×r0r×(n−r)0(m−r)×(n−r)]=[Er×r0(m−r)×r][Er×r0r×(n−r)]=Lm×rRr×nA=Pm×m−1Lm×rRr×nQn×n−1=Bm×rCr×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∈Rm×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} Am×n=Qm×mRm×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} Am×n=Qm×nRn×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,并且配有一张矩阵计算速度表如下所示: 下篇,我将把之前讲过的所有实矩阵分解方法做一个归纳。