作者水平有限,欢迎大家提出文中错误
矩阵分解
P A n ∗ n = L U PA_{n*n}=LU PAn∗n=LU
高斯消元法
我曾写过一个使用高斯消元法求解行列式的C++程序,本小节直接引用这段代码讲解
void GaussElimination2UTM(double* matrix, int dimension){ //注意cnt3一定要从矩阵最右侧运算至左侧,否则主元列对应元素归零,运算就无法正常进行 for(int cnt1=0; cnt1<dimension; cnt1++) for(int cnt2=cnt1+1; cnt2<dimension; cnt2++) for(int cnt3=dimension-1; cnt3>=cnt1; cnt3--) matrix[cnt2*dimension+cnt3] += -1*matrix[cnt1*dimension+cnt3]*matrix[cnt2*dimension+cnt1]/matrix[cnt1*dimension+cnt1]; return; }
可见高斯消元法,就是从最上面的一行为起点,以消去主元位置下所有非零值为目的,对其下各行依次做乘加操作,直至获得上三角阵 U p p e r T r i a n g l e M a t r i x Upper\ Triangle\ Matrix Upper Triangle Matrix
消元矩阵 E l i m i n a t i o n m a t r i c e s Elimination\ matrices Elimination matrices
E
i
j
=
[
1
1
⋱
e
i
j
1
1
]
E_{ij}= \left[ \begin{matrix} 1&&&& \\ &1&&&\\ &&\ddots\\ &&e_{ij}&1& \\ &&&&1\\ \end{matrix} \right]
Eij=⎣⎢⎢⎢⎢⎡11⋱eij11⎦⎥⎥⎥⎥⎤
其作用是
E
i
j
A
=
[
r
o
w
1
(
A
)
r
o
w
2
(
A
)
⋮
r
o
w
i
(
A
)
+
e
i
j
r
o
w
j
(
A
)
⋮
r
o
w
m
(
A
)
]
E_{ij}A= \left[ \begin{matrix} row\ 1(A)\\ row\ 2(A)\\ \vdots\\ row\ i(A)+e_{ij}\ row\ j(A)\\ \vdots\\ row\ m(A) \end{matrix} \right]
EijA=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡row 1(A)row 2(A)⋮row i(A)+eij row j(A)⋮row m(A)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
消元矩阵是在单位阵基础上,改变了对角线下某个元素为非零值,若此位置是
r
o
w
i
,
c
o
l
u
m
n
j
row\ i,column\ j
row i,column j,在
r
o
w
i
row\ i
row i基础上加上了
e
i
j
e_{ij}
eij倍的
r
o
w
j
row\ j
row j
由消元矩阵的意义可知,消元矩阵的逆,使得多加上的一行,通过减法消除
E
i
j
−
1
=
[
1
1
⋱
−
e
i
j
1
1
]
E_{ij}^{-1}= \left[ \begin{matrix} 1&&&& \\ &1&&&\\ &&\ddots\\ &&-e_{ij}&1& \\ &&&&1\\ \end{matrix} \right]
Eij−1=⎣⎢⎢⎢⎢⎡11⋱−eij11⎦⎥⎥⎥⎥⎤
通过高斯消元法求可逆阵的逆矩阵
通过高斯消元法,可以将可逆矩阵化为单位矩阵,但是此时左乘的矩阵不仅仅是消元矩阵,而是涉及到所有初等行变换。如果将合作用依然写作
E
E
E
那么有
E
A
=
I
EA=I
EA=I
则
E
=
A
−
1
E=A^{-1}
E=A−1
如果同时对矩阵
A
A
A和单位阵
I
I
I做初等行变换,则可以构造增广矩阵
[
A
∣
I
]
[A|I]
[A∣I]
E
[
A
∣
I
]
=
[
I
∣
A
−
1
]
E[A|I]=[I|A^{-1}]
E[A∣I]=[I∣A−1]
A = L U A=LU A=LU
存在一个总的消元矩阵
E
E
E,使得
E
A
=
U
EA=U
EA=U
E
=
E
ψ
ω
…
E
γ
δ
E
α
β
E= E_{\psi \omega}\dots E_{\gamma \delta}E_{\alpha \beta}
E=Eψω…EγδEαβ
因子不能打乱顺序
所求的
L
=
E
−
1
(
L
o
w
e
r
T
r
i
a
n
g
u
l
a
r
M
a
t
r
i
c
e
s
)
L=E^{-1}(Lower\ Triangular\ Matrices)
L=E−1(Lower Triangular Matrices)
L有一个很好的性质
I
f
n
o
r
o
w
e
x
c
h
a
n
g
e
s
,
m
u
l
t
i
p
l
i
e
r
s
o
f
e
l
i
m
i
n
a
t
i
o
n
o
p
e
r
a
t
i
o
n
s
g
o
d
i
r
e
c
t
l
y
i
n
t
o
L
.
If\ no\ row\ exchanges,multipliers\ of\ elimination\ operations\ go\ directly\ into\ L.
If no row exchanges,multipliers of elimination operations go directly into L.
而原因其实十分简单,这里引用课本中的证明
当计算第
i
i
i行的时候,这
i
i
i行的内容已经和
U
U
U一致,所以我们有第
i
i
i行的消元步骤如下:
r
o
w
i
(
U
)
=
r
o
w
i
(
A
)
−
l
i
1
r
o
w
1
(
U
)
−
l
i
2
r
o
w
2
(
U
)
⋯
−
l
i
(
i
−
1
)
r
o
w
i
−
1
(
U
)
row\ i(U)=row\ i(A)-l_{i1}row\ 1(U)-l_{i2}row\ 2(U)\cdots -l_{i(i-1)}row\ i-1(U)
row i(U)=row i(A)−li1row 1(U)−li2row 2(U)⋯−li(i−1)row i−1(U)
整理一下式子
r
o
w
i
(
A
)
=
l
i
1
r
o
w
1
(
U
)
+
l
i
2
r
o
w
2
(
U
)
⋯
+
l
i
(
i
−
1
)
r
o
w
i
−
1
(
U
)
+
r
o
w
i
(
U
)
row\ i(A)=l_{i1}row\ 1(U)+l_{i2}row\ 2(U)\cdots +l_{i(i-1)}row\ i-1(U)+row\ i(U)
row i(A)=li1row 1(U)+li2row 2(U)⋯+li(i−1)row i−1(U)+row i(U)
将上式写成矩阵形式
A
=
[
1
l
21
1
⋮
⋮
⋱
l
(
n
−
1
)
1
l
(
n
−
1
)
2
1
l
n
1
l
n
2
⋯
l
n
(
n
−
1
)
1
]
U
A= \left[ \begin{matrix} 1&&&& \\ l_{21}&1&&&\\ \vdots&\vdots&\ddots\\ l_{(n-1)1}&l_{(n-1)2}& &1& \\ l_{n1}&l_{n2}&\cdots&l_{n(n-1)}&1\\ \end{matrix} \right]U
A=⎣⎢⎢⎢⎢⎢⎡1l21⋮l(n−1)1ln11⋮l(n−1)2ln2⋱⋯1ln(n−1)1⎦⎥⎥⎥⎥⎥⎤U
L
=
[
1
l
21
1
⋮
⋮
⋱
l
(
n
−
1
)
1
l
(
n
−
1
)
2
1
l
n
1
l
n
2
⋯
l
n
(
n
−
1
)
1
]
L= \left[ \begin{matrix} 1&&&& \\ l_{21}&1&&&\\ \vdots&\vdots&\ddots\\ l_{(n-1)1}&l_{(n-1)2}& &1& \\ l_{n1}&l_{n2}&\cdots&l_{n(n-1)}&1\\ \end{matrix} \right]
L=⎣⎢⎢⎢⎢⎢⎡1l21⋮l(n−1)1ln11⋮l(n−1)2ln2⋱⋯1ln(n−1)1⎦⎥⎥⎥⎥⎥⎤
置换矩阵 P e r m u t a t i o n m a t r i c e s Permutation\ matrices Permutation matrices
P
i
j
=
[
1
1
⋱
1
1
]
P_{ij}= \left[ \begin{matrix} 1&&&& \\ &&&1&\\ &&\ddots\\ &1&&& \\ &&&&1\\ \end{matrix} \right]
Pij=⎣⎢⎢⎢⎢⎡11⋱11⎦⎥⎥⎥⎥⎤
置换矩阵是在单位矩阵基础上,对矩阵的第
i
i
i行、第
j
j
j行或(第
i
i
i列、第
j
j
j列)进行交换,可见n维置换矩阵有
n
!
n!
n!种,并且这些矩阵可以构成一个群。
置换矩阵有如下性质:
- P T = P − 1 ( o r t h o g o n a l ) P^T=P^{-1}(orthogonal) PT=P−1(orthogonal)
- d e t P = − 1 det\ P=-1 det P=−1
从变换的意义上讲,置换矩阵对应的是一种镜像变换
何时需要置换矩阵
还是以[C++] 计算行列式的若干种方法讲解
在高斯消元法求解上三角阵的时候,由于一个极小主元的出现,使得整个消元过程出现了极大误差,原因是计算机中浮点数的精度是有限的,对于极小值,在计算机中精度的丢失是致命的。当我的程序引入了置换操作后,问题得以解决。
在代数上,置换操作是为了解决消元过程中产生的主元为零,使得消元无法继续的问题,换句话说
P
P
P使得矩阵
A
A
A各行排列在合适的位置上,避免主元0的出现。
P A = L D U PA=LDU PA=LDU
LU分解还有一个更加平衡的形式,通过消元得到的上三角阵
U
U
U,可以进一步把主元分离出来,构成
D
i
a
g
o
n
a
l
M
a
t
r
i
c
e
s
Diagonal\ Matrices
Diagonal Matrices。
例如
[
2
1
3
]
=
[
2
3
]
[
1
1
2
1
]
\left[ \begin{matrix} 2&1 \\ &3 \end{matrix} \right]= \left[ \begin{matrix} 2& \\ &3\\ \end{matrix} \right] \left[ \begin{matrix} 1&\frac{1}{2}\\ &1\\ \end{matrix} \right]
[213]=[23][1211]
秩一矩阵的分解 A = u v T A=uv^T A=uvT
所有秩一矩阵都可以表示称主行和主列的乘积
[
1
4
5
2
8
10
]
=
[
1
2
]
[
1
4
5
]
\left[ \begin{matrix} 1&4&5 \\ 2&8&10 \end{matrix} \right]= \left[ \begin{matrix} 1\\ 2\\ \end{matrix} \right] \left[ \begin{matrix} 1&4&5\\ \end{matrix} \right]
[1248510]=[12][145]
秩一矩阵就像构造其他矩阵的积木一样,比如一个
5
∗
17
5*17
5∗17的秩
4
4
4矩阵,最少可以拆成
4
4
4个秩一矩阵
A = Q R A=QR A=QR
暂无
特征值分解
假设
n
n
n阶方阵
A
A
A存在
n
n
n个相互独立的特征向量,构造成特征向量矩阵
S
=
[
x
1
x
2
⋯
x
n
]
S=[x_1\ x_2\cdots x_n]
S=[x1 x2⋯xn]
将
A
A
A左乘
S
S
S
A
S
=
[
λ
1
x
1
λ
2
x
2
⋯
λ
n
x
n
]
AS=[\lambda_1x_1\ \lambda_2x_2\cdots\lambda_nx_n]
AS=[λ1x1 λ2x2⋯λnxn]
分离特征值和特征向量
A
S
=
[
x
1
x
2
⋯
x
n
]
[
λ
1
λ
2
⋱
λ
n
]
=
S
Λ
AS=[x_1\ x_2\cdots x_n] \left[ \begin{matrix} \lambda_1&&&\\ &\lambda_2&&\\ &&\ddots&\\ &&&\lambda_n\\ \end{matrix} \right]=S\Lambda
AS=[x1 x2⋯xn]⎣⎢⎢⎡λ1λ2⋱λn⎦⎥⎥⎤=SΛ
左乘
S
−
1
S^{-1}
S−1
A
=
S
Λ
S
−
1
A=S\Lambda S^{-1}
A=SΛS−1
详见[笔记][总结] MIT线性代数 Gilbert Strang 矩阵运算
奇异值分解
奇异值分解
(
S
i
n
g
u
l
a
r
V
a
l
u
e
D
e
c
o
m
p
o
s
i
t
i
o
n
)
(Singular\ Value\ Decomposition)
(Singular Value Decomposition)
A
=
U
Σ
V
T
A=U\Sigma V^T
A=UΣVT
如果
A
A
A是方阵,
U
,
V
U,V
U,V都是标准正交矩阵,
Σ
\Sigma
Σ是对角矩阵,但其实任意类型的矩阵都可以进行奇异值分解
奇异值分解的意义
v
1
v
2
⋯
v
r
v_1\ v_2\cdots v_r
v1 v2⋯vr行空间的一组标准正交基,
u
1
u
2
⋯
u
r
u_1\ u_2\cdots u_r
u1 u2⋯ur是列空间的一组标准正交基,而且这组正交基的每一个基都满足
σ
i
u
i
=
A
v
i
(
σ
i
s
a
s
t
r
e
t
c
h
i
n
g
f
a
c
t
o
r
)
\sigma_iu_i=Av_i(\sigma\ is\ a\ stretching\ factor)
σiui=Avi(σ is a stretching factor),当然并不是行空间的任意一组正交基,都能在都左乘
A
A
A后,仍然保持正交。这个不影响分解
σ
i
u
i
=
A
v
i
\sigma_iu_i=Av_i
σiui=Avi可以表示成
[
u
1
u
2
⋯
u
r
]
m
∗
r
[
σ
1
σ
2
⋱
σ
r
]
r
∗
r
=
A
m
∗
n
[
v
1
v
2
⋯
v
r
]
n
∗
r
[u_1\ u_2\cdots u_r]_{m*r} \left[ \begin{matrix} \sigma_1&&&\\ &\sigma_2&&\\ &&\ddots&\\ &&&\sigma_r \end{matrix} \right]_{r*r}= A_{m*n} [v_1\ v_2\cdots v_r]_{n*r}
[u1 u2⋯ur]m∗r⎣⎢⎢⎡σ1σ2⋱σr⎦⎥⎥⎤r∗r=Am∗n[v1 v2⋯vr]n∗r
但是这还不是奇异值分解的最终形式,因为 N ( A ) N(A) N(A)和 N ( A T ) N(A^T) N(AT)的信息还是隐藏着
补充
v
r
+
1
⋯
v
m
v_{r+1}\cdots v_m
vr+1⋯vm是零空间的一组标准正交基
补充
u
r
+
1
⋯
u
n
u_{r+1}\cdots u_n
ur+1⋯un是左零空间的一组标准正交基
V
=
[
v
1
v
2
⋯
v
r
v
r
+
1
⋯
v
n
]
n
∗
n
=
[
V
C
(
A
T
)
V
N
(
A
)
]
V= [v_1\ v_2\cdots v_r\ v_{r+1}\cdots\ v_n]_{n*n}=[V_{C(A^T)}\ V_{N(A)}]
V=[v1 v2⋯vr vr+1⋯ vn]n∗n=[VC(AT) VN(A)]
U = [ u 1 u 2 ⋯ u r u r + 1 ⋯ u m ] m ∗ m = [ U C ( A ) U N ( A T ) ] U= [u_1\ u_2\cdots u_r\ u_{r+1}\cdots\ u_m]_{m*m}=[U_{C(A)}\ U_{N(A^T)}] U=[u1 u2⋯ur ur+1⋯ um]m∗m=[UC(A) UN(AT)]
U
U
U的列向量构成了
R
m
\mathbb R^m
Rm的一组标准正交基
V
V
V的列向量构成了
R
n
\mathbb R^n
Rn的一组标准正交基
A
m
∗
n
[
V
C
(
A
T
)
n
∗
r
V
N
(
A
)
n
∗
(
n
−
r
)
]
n
∗
n
=
[
U
C
(
A
)
m
∗
r
U
N
(
A
T
)
m
∗
(
m
−
r
)
]
m
∗
m
[
Σ
r
∗
r
O
r
∗
(
n
−
r
)
O
(
m
−
r
)
∗
r
O
(
m
−
r
)
∗
(
n
−
r
)
]
m
∗
n
A_{m*n}[V_{C(A^T)n*r}\ V_{N(A)n*(n-r)}]_{n*n}= [U_{C(A)m*r}\ U_{N(A^T)m*(m-r)}]_{m*m} \left[ \begin{matrix} \Sigma_{r*r}&O_{r*(n-r)}\\ O_{(m-r)*r}&O_{(m-r)*(n-r)}\\ \end{matrix} \right]_{m*n}
Am∗n[VC(AT)n∗r VN(A)n∗(n−r)]n∗n=[UC(A)m∗r UN(AT)m∗(m−r)]m∗m[Σr∗rO(m−r)∗rOr∗(n−r)O(m−r)∗(n−r)]m∗n
A
m
∗
n
=
[
U
C
(
A
)
m
∗
r
U
n
(
A
T
)
m
∗
(
m
−
r
)
]
m
∗
m
[
Σ
r
∗
r
O
r
∗
(
n
−
r
)
O
(
m
−
r
)
∗
r
O
(
m
−
r
)
∗
(
n
−
r
)
]
m
∗
n
[
V
C
(
A
T
)
r
∗
n
T
V
N
(
A
)
(
n
−
r
)
∗
n
T
]
A_{m*n}= [U_{C(A)m*r}\ U_{n(A^T)m*(m-r)}]_{m*m} \left[ \begin{matrix} \Sigma_{r*r}&O_{r*(n-r)}\\ O_{(m-r)*r}&O_{(m-r)*(n-r)}\\ \end{matrix} \right]_{m*n} \left[ \begin{matrix} V_{C(A^T)r*n}^T\\ V_{N(A)(n-r)*n}^T\\ \end{matrix} \right]
Am∗n=[UC(A)m∗r Un(AT)m∗(m−r)]m∗m[Σr∗rO(m−r)∗rOr∗(n−r)O(m−r)∗(n−r)]m∗n[VC(AT)r∗nTVN(A)(n−r)∗nT]
其中上式包含
A
=
U
C
(
A
)
Σ
V
C
(
A
T
)
T
A=U_{C(A)}\Sigma V_{C(A^T)}^T
A=UC(A)ΣVC(AT)T
由于
U
N
(
A
T
)
U_{N(A^T)}
UN(AT)和
V
N
(
A
)
V_{N(A)}
VN(A)的选取是任意的,所以矩阵
A
A
A的奇异值分解不一定是唯一的,但是
A
=
U
C
(
A
)
Σ
V
C
(
A
T
)
T
A=U_{C(A)}\Sigma V_{C(A^T)}^T
A=UC(A)ΣVC(AT)T是唯一的
最后,一般的奇异值分解为
A
=
U
[
Σ
O
O
O
]
V
T
A=U \left[ \begin{matrix} \Sigma&O\\ O&O\\ \end{matrix} \right] V^T
A=U[ΣOOO]VT
方阵的奇异值分解
A
n
∗
n
=
U
[
Σ
r
∗
r
O
r
∗
(
n
−
r
)
O
(
n
−
r
)
∗
r
O
(
n
−
r
)
∗
(
n
−
r
)
]
V
A_{n*n}=U \left[ \begin{matrix} \Sigma_{r*r}&O_{r*(n-r)}\\ O_{(n-r)*r}&O_{(n-r)*(n-r)}\\ \end{matrix} \right] V
An∗n=U[Σr∗rO(n−r)∗rOr∗(n−r)O(n−r)∗(n−r)]V
对于方阵,
U
,
V
U,V
U,V中间的矩阵一定是对角阵,在计算过程中,没有必要把零值和非零值分开计算,零值直接视作零特征值,不妨直接把中间的矩阵记作
Σ
\Sigma
Σ
已经知道
A
T
A
A^TA
ATA是对称矩阵,如果已经知道了
A
=
U
Σ
V
T
A=U\Sigma V^T
A=UΣVT
A
T
A
=
V
Σ
U
T
U
Σ
V
T
=
V
Σ
2
V
T
A^TA=V\Sigma U^TU\Sigma V^T=V\Sigma^2 V^T
ATA=VΣUTUΣVT=VΣ2VT
式子中的
V
V
V是奇异值分解里的
V
V
V
同样的
A
A
T
AA^T
AAT也是对称矩阵
A
A
T
=
U
Σ
2
U
T
AA^T=U\Sigma^2 U^T
AAT=UΣ2UT
式子中的
U
U
U是奇异值分解里的
U
U
U
综上所述,标准正交矩阵
V
V
V是
A
T
A
A^TA
ATA的特征向量矩阵,标准正交矩阵
U
U
U是
A
A
T
AA^T
AAT的特征向量矩阵
同时也可以看出,即使
A
A
T
AA^T
AAT和
A
T
A
A^TA
ATA不一定是正定的,但至少他们都是半正定的
而且
A
A
T
AA^T
AAT和
A
T
A
A^TA
ATA有相同的特征值,这不是偶然
A
B
AB
AB和
B
A
BA
BA当然有相同的特征值
这个 Σ \Sigma Σ的平方,就是上边特征值矩阵,对各项开方即可得到。
再议对称矩阵
所有矩阵的奇异值分解中,要数对称矩阵的奇异值分解最特殊,因为其
U
=
V
U=V
U=V
对称矩阵的奇异值分解为
A
=
Q
Λ
Q
T
A=Q\Lambda\ Q^T
A=QΛ QT
同时上式也是对称矩阵的特征值分解