矩阵分解及计算
矩阵分解
满秩分解
满秩分解的形式:
A
=
B
C
A = BC
A=BC
满秩分解定理:设
m
×
n
m \times n
m×n矩阵
A
A
A的秩为r,存在
m
×
r
m \times r
m×r矩阵
B
B
B和
r
×
n
r \times n
r×n矩阵
C
C
C使得
A
=
B
C
A =BC
A=BC,并且rank(
B
B
B)=rank(
C
C
C)。
分解步骤:
-
初等变换法,将原来矩阵写为:
( A ∣ I ) (A | I) (A∣I)
然后将A变换为一个行阶梯形,右侧的单位阵就会变换为一个初等矩阵。然后根据去掉A中全为0的行,同时相应的去掉I变换后相应的列,就构成了一个行满秩和列满秩矩阵,其中A变换后应当作为行满秩( C C C)放在右边,I变换后做处理的矩阵作为列满秩( B B B)放在左边。
去掉B最后一行
由P求可逆阵对应去最后一列,最后得到
-
利用下三角矩阵变换
与法1同理,只不过写成下三角形式,不需要进行行变换过程,只是一个矩阵乘法的过程。
首先化去第一列,使得第一个元素不为0,其余都为0,此时对应的下三角矩阵 L 1 L_1 L1应当第一列第一个元素为1,剩下为行变换操作的系数。同理继续化去第二列,使得满足阶梯型,获得 L 2 L_2 L2,直至到满足阶梯型。
其次将所有的下三角矩阵相乘,并去逆矩阵。
那么下三角矩阵就作为左侧的列满秩,得到的行阶梯型作为右边的行满秩(需要去除对应的0行以及相应的列)。
注意如果一开始以0打头,那么先需要做一个交换然后再进行后续操作,即第一个元素绝对不能为0。
此处由于0元素在第一列第一个,需要做一个行交换。
然后再使用下三角进行转换求解。
三角分解
-
LU分解
LU的分解形式为:
A = ( ∗ 0 0 0 ∗ ∗ 0 0 ∗ ∗ ∗ 0 ∗ ∗ ∗ ∗ ) ( ∗ ∗ ∗ ∗ 0 ∗ ∗ ∗ 0 0 ∗ ∗ 0 0 0 ∗ ) A = \left( \begin{matrix} * & 0 & 0 &0 \\ * & * & 0 & 0 \\ * & * & * & 0 \\ * & * & * & * \end{matrix}\right) \left( \begin{matrix} * & * & * & * \\ 0 & * & * & * \\ 0 & 0 & * & * \\ 0 & 0 & 0 & * \end{matrix}\right) A= ∗∗∗∗0∗∗∗00∗∗000∗ ∗000∗∗00∗∗∗0∗∗∗∗
能够LU分解的充要条件是 A A A的所有顺序主子是均非0。分解步骤与满秩分解相同,构造多个下三角矩阵,然后计算到下三角,和上三角,但是不需要去0行。
我们看满秩分解的
此时第一行不进行行变换得到的结果其实就是一个三角分解。
-
LDU分解
相比于LU分解,只是将形式改变为
A = ( ∗ 0 0 0 ∗ ∗ 0 0 ∗ ∗ ∗ 0 ∗ ∗ ∗ ∗ ) ( ∗ 0 0 0 0 ∗ 0 0 0 0 ∗ 0 0 0 0 ∗ ) ( 1 ∗ ∗ ∗ 0 1 ∗ ∗ 0 0 1 ∗ 0 0 0 1 ) A = \left( \begin{matrix} * & 0 & 0 &0 \\ * & * & 0 & 0 \\ * & * & * & 0 \\ * & * & * & * \end{matrix}\right) \left( \begin{matrix} * & 0 & 0 &0 \\ 0 & * & 0 & 0 \\ 0 & 0 & * & 0 \\ 0 & 0 & 0 & * \end{matrix}\right) \left( \begin{matrix} 1 & * & * & * \\ 0 & 1 & * & * \\ 0 & 0 & 1 & * \\ 0 & 0 & 0 & 1 \end{matrix}\right) A= ∗∗∗∗0∗∗∗00∗∗000∗ ∗0000∗0000∗0000∗ 1000∗100∗∗10∗∗∗1
在LU分解的基础上提取出上三角矩阵对角线的元素,上三角矩阵中除对角线外的元素除以该行的第一个非0元素。
QR分解
QR分解将形式为
A
=
Q
(
∗
∗
∗
∗
0
∗
∗
∗
0
0
∗
∗
0
0
0
∗
)
A =Q \left( \begin{matrix} * & * & * & * \\ 0 & * & * & * \\ 0 & 0 & * & * \\ 0 & 0 & 0 & * \end{matrix}\right)
A=Q
∗000∗∗00∗∗∗0∗∗∗∗
其中Q是一个正交矩阵。
分解步骤:
假设 A A A为一个 3 × 3 3\times3 3×3的矩阵,记为 ( α 1 , α 2 , α 3 ) (\alpha_1,\alpha_2,\alpha_3) (α1,α2,α3)。
-
对 α 1 , α 2 , α 3 \alpha_1,\alpha_2,\alpha_3 α1,α2,α3进行正交化,有:
β 1 = α 1 β 2 = α 2 − k 21 β 1 β 3 = α 3 − k 31 β 1 − k 3 2 β 2 \beta_1 = \alpha_1\\ \beta_2 = \alpha_2 - k_{21}\beta_1\\ \beta_3 = \alpha_3 - k_{31}\beta_1 - k_{3_2}\beta_2 β1=α1β2=α2−k21β1β3=α3−k31β1−k32β2
其中 k 21 = < α 2 , β 1 > < β 1 , β 1 > k_{21} = \frac{<\alpha_2,\beta_1>}{<\beta_1,\beta_1>} k21=<β1,β1><α2,β1>, k 31 = < α 3 , β 1 > < β 1 , β 1 > k_{31} = \frac{<\alpha_3,\beta_1>}{<\beta_1,\beta_1>} k31=<β1,β1><α3,β1>, k 32 = < α 3 , β 2 > < β 2 , β 2 > k_{32} = \frac{<\alpha_3,\beta_2>}{<\beta_2,\beta_2>} k32=<β2,β2><α3,β2> -
单位化,得到矩阵 Q : Q = ( β 1 ∥ β 1 ∥ , β 2 ∥ β 2 ∥ , β 3 ∥ β 3 ∥ ) Q:Q = (\frac{\beta_1}{\lVert \beta_1 \rVert},\frac{\beta_2}{\lVert \beta_2 \rVert},\frac{\beta_3}{\lVert \beta_3 \rVert}) Q:Q=(∥β1∥β1,∥β2∥β2,∥β3∥β3)
1、2两步实际上是进行了施密特正交化。
-
得到R矩阵
R = ( ∥ β 1 ∥ ∥ β 2 ∥ ∥ β 3 ∥ ) ( 1 k 21 k 31 1 k 32 1 ) R =\left( \begin{matrix} \lVert \beta_1 \rVert & & \\ & \lVert \beta_2 \rVert & \\ & & \lVert \beta_3 \rVert\end{matrix}\right) \left( \begin{matrix} 1 & k_{21} & k_{31} \\ & 1 & k_{32} \\ & & 1\end{matrix}\right) R= ∥β1∥∥β2∥∥β3∥ 1k211k31k321 -
A = Q R A = QR A=QR
奇异值分解
奇异值分解形式为
A
=
U
(
∑
0
0
0
)
V
H
A = U\left( \begin{matrix} \sum & 0\\ 0 & 0 \end{matrix}\right)V^H
A=U(∑000)VH
其中
∑
=
d
i
a
g
(
σ
1
,
⋯
,
σ
r
)
\sum = diag(\sigma_1, \cdots , \sigma_r)
∑=diag(σ1,⋯,σr)
分解步骤:
假设A为 m × n m \times n m×n,那么奇异值分解就应该为 m × m m \times m m×m、 m × n m \times n m×n、 n × n n \times n n×n
- 首先求 A H A A^HA AHA,并求出对应的特征值 λ i \lambda_i λi, λ i \lambda_i λi开方,按照大小排序,得到 σ i \sigma_i σi,从而构造 ∑ \sum ∑矩阵,然后补零,就可以构造出 ( ∑ 0 0 0 ) \left( \begin{matrix} \sum & 0\\ 0 & 0 \end{matrix}\right) (∑000)
- 解出特征之 λ i \lambda_i λi对应 A H A A^HA AHA的特征向量 ξ i \xi_i ξi,并进行单位化,得到 v i v_i vi,从构造出矩阵 V = ( v 1 , ⋯ , v n ) V = \left( \begin{matrix} v_1,\cdots,v_n \end{matrix}\right) V=(v1,⋯,vn)
- 根据奇异值分解,进行变换,得到 U 1 = A V ( ∑ 0 0 0 ) − 1 U_1 = A V \left( \begin{matrix} \sum & 0\\ 0 & 0 \end{matrix}\right)^{-1} U1=AV(∑000)−1,此时得到的 U 1 U_1 U1矩阵为 m × r m \times r m×r,需要进行扩充。
- 我们构造一个 U 2 U_2 U2 ( r × n ) (r \times n) (r×n)矩阵,使得 U 1 H U 2 = 0 U_1^HU_2 = 0 U1HU2=0
- 最后将 U 1 U_1 U1与 U 2 U_2 U2拼接,得到 U U U
- 最后得到SVD A = U ( ∑ 0 0 0 ) V H A = U\left( \begin{matrix} \sum & 0\\ 0 & 0 \end{matrix}\right)V^H A=U(∑000)VH
考点
- 满秩分解
- 奇异值分解和QR分解选其一
参考
矩阵论-戴华
【矩阵论】Chapter 6—矩阵分解知识点总结复习(附Python实现)