矩阵分解
所谓矩阵的分解(decomposition或factorization),就是通过线性变换,将某个给定或已知的矩阵分解为二个或三个矩阵标准型的乘积(个别情况下分解为两个矩阵标准型之和)。
虽然矩阵的分解有十几种之多,看似零乱,但是它们之间实则有着明显的类属。在这里,我们主要根据矩阵分解后得到的矩阵的标准型以及是对单个矩阵还是两个矩阵组成的矩阵束或矩阵对进行分解来划分矩阵的分解类别。
根据矩阵
A
A
A分解后的矩阵的标准型,可分为以下四大类。
(1)对角化分解
这类分解是通过正交变换,将矩阵
A
A
A对角化的,包括以下三种形式。
(2)三角化分解
这类分解将矩阵
A
A
A分解为正交矩阵三角矩阵之积,或分解为一个上三角矩阵一个下三角矩阵之积,主要有以下一种形式:
(3)三角-对角化分解
将矩阵分解为三个矩阵标准型(两个三角矩阵和一个对角矩阵)之积,或分解为两个矩阵标准型(对角矩阵和上三角矩阵)之和。这类分解有以下形式。
(4)三对角化分解
Householder三对角化分解:
H
T
A
H
=
T
H^TAH=T
HTAH=T,其中,
H
=
H
1
H
2
…
H
n
−
2
H=H_1H_2…H_{n-2}
H=H1H2…Hn−2为House holder变换之积,且
T
T
T是三对角矩阵。
矩阵束的分解主要用于求解矩阵束的广义特征值分解(GEVD)问题 A x = λ B x ( x ≠ 0 ) 的 Q Z Ax=\lambda Bx(x\neq 0)的QZ Ax=λBx(x=0)的QZ方法中,它涉及两个矩阵的同时分解。这类分解的主要形式是广义Schur分解。
广义Schur分解: Q H A Z = T Q^HAZ=T QHAZ=T和 Q H B Z = S Q^HBZ=S QHBZ=S,其中, Q Q Q和 Z Z Z为酉矩阵,而 T T T和 S S S为上三角矩阵。
实现广义Schur分解需要先使用Hessenberg三对角化分解:
Q
T
A
Z
=
H
Q^TAZ=H
QTAZ=H和
Q
T
B
Z
=
T
QTBZ=T
QTBZ=T,其中,
Q
Q
Q和
Z
Z
Z为正交矩阵,
H
H
H为上Hessenberg矩阵,而
T
T
T是上三角矩阵。
更形象些,我们可以把矩阵分解的上述各种类型画成图4.41所示的矩阵分解树(呈平躺形式)。
任意矩阵的奇异值分解和对称矩阵的特征值分解是工程中应用最广泛的两种矩阵分解。
定理 CS分解
若
(
k
+
j
)
×
(
k
+
j
)
(k+j)\times (k+j)
(k+j)×(k+j)矩阵
Q
=
[
Q
11
Q
12
Q
21
Q
22
]
Q=
是正交的,其中,
Q
11
Q_{11}
Q11是
k
×
k
k\times k
k×k矩阵,并且
k
≥
j
k≥j
k≥j;则存在正交矩阵
U
1
,
V
1
∈
R
k
×
k
U_1,V_1 \in R^{k\times k}
U1,V1∈Rk×k和正交矩阵
U
2
,
V
2
∈
R
j
×
j
U_2,V_2 \in R^{j\times j}
U2,V2∈Rj×j使得
[
U
1
O
O
U
2
]
[
Q
11
Q
12
Q
21
Q
22
]
[
V
1
O
O
V
2
]
=
[
I
k
−
j
O
O
O
C
S
O
−
S
C
]
其中
C
=
d
i
a
g
(
c
1
,
c
2
,
⋅
⋅
⋅
,
c
j
)
,
c
i
=
c
o
s
θ
i
C=diag(c_1,c_2,···,c_j), c_i=cos\theta_i
C=diag(c1,c2,⋅⋅⋅,cj),ci=cosθi
S
=
d
i
a
g
(
s
1
,
s
2
,
⋅
⋅
⋅
,
s
j
)
,
s
i
=
s
i
n
θ
i
S=diag(s_1,s_2,···,s_j), s_i=sin\theta_i
S=diag(s1,s2,⋅⋅⋅,sj),si=sinθi
且
0
≤
θ
1
≤
θ
2
≤
…
⋅
≤
θ
j
≤
π
/
2
0≤\theta_1≤\theta_2≤…·≤\theta_j≤\pi/2
0≤θ1≤θ2≤…⋅≤θj≤π/2.
粗略地讲,
C
S
CS
CS分解相当于将一个正交矩阵的各个分块同时对角化。
例
矩阵
Q
=
[
−
0.761
−
0.698
−
0.006
0.548
−
0.555
−
0.626
0.433
−
0.451
0.780
]
Q=
是正交的。因此,选择正交矩阵
U
=
[
0.999
−
0.010
0.000
−
0.010
−
0.999
0.000
0.000
0.000
1.000
]
U=
V
=
[
−
0.721
−
0.692
0.000
−
0.692
0.721
0.000
0.000
0.000
1.000
]
V=
则有
U
T
Q
V
=
[
1.000
0.000
0.000
0.000
0.780
0.625
0.000
−
0.625
0.780
]
U^TQV=
换言之,在定理中相当于取
k
=
2
,
j
=
1
k=2,j=1
k=2,j=1,并且
c
1
=
0.780
,
s
1
=
0.625
c_1=0.780,s_1=0.625
c1=0.780,s1=0.625。
Cholesky分解
设
A
=
[
a
i
j
]
∈
R
n
×
n
A=[a_{ij}] \in R^{n\times n}
A=[aij]∈Rn×n是对称正定矩阵,
A
=
G
G
T
A=GG^T
A=GGT称为矩阵
A
A
A的Cholesky分解,其中,
G
∈
R
n
×
n
G\in R^{n\times n}
G∈Rn×n是一个具有正的对角线元素的下三角矩阵,即
G
=
[
g
11
0
g
21
g
22
⋮
⋮
⋱
g
n
1
g
n
1
⋯
g
n
n
]
G=
比较
A
=
G
G
T
A=GG^T
A=GGT两边,易得
a
i
j
=
∑
k
=
1
j
g
j
k
g
i
k
a_{ij}=\sum_{k=1}^jg_{jk}g_{ik}
aij=k=1∑jgjkgik
从而有
g
j
j
g
i
j
=
a
i
j
−
∑
k
=
1
j
−
1
g
j
k
g
i
k
=
v
(
i
)
(1)
g_{jj}g_{ij}=a_{ij}-\sum_{k=1}^{j-1}g_{jk}g_{ik}=v(i) \tag{1}
gjjgij=aij−k=1∑j−1gjkgik=v(i)(1)
如果知道了
G
G
G的前
j
−
1
j-1
j−1列,那么
v
(
i
)
v(i)
v(i)就是可计算的。
在上式中令
i
=
j
i=j
i=j,立即有
g
j
j
2
=
v
(
j
)
g_{jj}^2=v(j)
gjj2=v(j)。然后,由上式得
g
i
j
=
v
(
i
)
/
g
j
j
=
v
(
i
)
/
v
(
j
)
(2)
g_{ij}=v(i)/g_{jj}=v(i)/\sqrt{v(j)} \tag{2}
gij=v(i)/gjj=v(i)/v(j)(2)
总结以上讨论,可得到计算Cholesky分解的下述MATLAB算法
这一算法叫做Gaxpy Cholesky算法。Gaxpy意即广义的saxpy,而“saxpy”是在软件包LINPACK中被定义的术语,它是“标量ax+y”的英文(scalar alpha x plus y)缩写。
saxpy运算定义为
z
=
α
x
+
y
⇒
x
i
=
α
x
i
+
y
i
z=\alpha x+y \Rightarrow x_i=\alpha x_i+y_i
z=αx+y⇒xi=αxi+yi
而Gaxpy运算系指矩阵运算
z
=
A
x
+
y
z=Ax+y
z=Ax+y。
以上分析结果可以归纳为下面的定理。
定理 Cholesky分解
如果
A
∈
R
n
×
n
A\in R^{n\times n}
A∈Rn×n是对称正定矩阵,则Cholesky分解
A
=
G
G
T
A=GG^T
A=GGT是唯一的,其中,下三角矩阵
G
∈
R
n
×
n
G\in R^{n\times n}
G∈Rn×n的非零元素由(2)式决定。
下三角矩阵
G
G
G称为Cholesky三角。另外,Cholesky分解也谓之平方根方法,因为下三角矩阵
G
G
G可以视为矩阵
A
A
A的“平方根”。
一个非奇异矩阵
A
A
A的逆矩阵
A
−
1
A^{-1}
A−1可以通过Cholesky分解求得,即有
A
−
1
=
G
−
T
G
−
1
A^{-1}=G^{-T}G^{-1}
A−1=G−TG−1
其中,
G
−
T
=
(
G
T
)
−
1
G^{-T}=(G^T)^{-1}
G−T=(GT)−1。
例
考虑利用Cholesky分解求解矩阵方程
A
x
=
b
Ax=b
Ax=b。由于
G
−
1
A
x
=
G
−
1
b
⇒
G
T
x
=
h
G^{-1}Ax =G^{-1}b\Rightarrow G^Tx=h
G−1Ax=G−1b⇒GTx=h
其中,
h
=
G
−
1
b
h=G^{-1}b
h=G−1b,或等价为
G
h
=
b
Gh=b
Gh=b。比较
G
h
=
b
Gh=b
Gh=b两边的向量元素,易得向量
h
h
h的元素
h
i
h_i
hi的递推计算公式如下:
h
1
=
b
1
/
g
11
h_1=b_1/g_{11}
h1=b1/g11
h
i
=
1
g
i
i
(
b
i
−
∑
k
=
1
i
−
1
g
k
i
h
k
)
,
i
=
2
,
3
,
…
,
n
h_i=\frac{1}{g_{ii}}(b_i-\sum_{k=1}^{i-1}g_{ki}h_k), i=2,3,…,n
hi=gii1(bi−k=1∑i−1gkihk),i=2,3,…,n
现在,方程
A
x
=
b
Ax=b
Ax=b的解等价为
G
T
x
=
h
G^Tx=h
GTx=h的解。注意到
G
T
G^T
GT为上三角矩阵,因此
x
x
x可以利用熟知的回代法求出:
x
n
=
h
n
/
g
n
n
x_n=h_n/g_{nn}
xn=hn/gnn
x
i
=
1
g
i
i
(
h
i
−
∑
k
=
1
n
−
i
g
i
+
k
,
i
x
i
+
k
)
,
i
=
n
−
1
,
n
−
2
,
.
.
.
,
1
x_i=\frac{1}{g_{ii}}(h_i-\sum_{k=1}^{n-i}g_{i+k,i}x_{i+k}),i=n-1,n-2,...,1
xi=gii1(hi−k=1∑n−igi+k,ixi+k),i=n−1,n−2,...,1