Householder变换可以实现任意 m × n m\times n m×n矩阵 A A A的QR分解,其原理是使用变维向量的Householder变换,使得该向量除第一个元素外,其他元素皆变成0。
根据Householder变换一节的分析,欲使一个
p
p
p维向量
x
=
[
x
1
,
x
2
,
…
,
x
p
]
T
x=[x_1,x_2,…,x_p]^T
x=[x1,x2,…,xp]T的第1个元素后面的所有元索变为0,则
p
p
p维的Householder向量应取
ω
=
x
−
β
e
1
(
β
)
ˉ
(
β
−
x
1
)
(1)
\omega=\frac{x-\beta e_1}{\sqrt{\bar{(\beta)}(\beta-x_1)}} \tag{1}
ω=(β)ˉ(β−x1)x−βe1(1)
式中
(
β
)
ˉ
=
−
∣
x
1
∣
∣
∣
x
∣
∣
,
β
=
−
x
1
∣
x
1
∣
∣
∣
x
∣
∣
(2)
\bar{(\beta)}=-|x_1|||x||, \beta=-\frac{x_1}{|x_1|}||x|| \tag{2}
(β)ˉ=−∣x1∣∣∣x∣∣,β=−∣x1∣x1∣∣x∣∣(2)
假定
m
×
n
m\times n
m×n知阵
A
A
A的列分块形式为
A
m
×
n
=
[
a
1
,
a
2
,
…
,
a
n
]
A_{m\times n}=[a_1,a_2,…,a_n]
Am×n=[a1,a2,…,an]
首先令
x
=
a
1
=
[
a
11
,
a
21
,
…
,
a
m
1
]
T
x=a_1=[a_{11},a_{21},…,a_{m1}]^T
x=a1=[a11,a21,…,am1]T,并取
p
=
m
p=m
p=m,则按照式(1)和式(2),可以计算得到
u
1
=
ω
m
u_1=\omega_m
u1=ωm。此时,
H
1
=
I
−
u
1
u
1
T
→
A
1
=
H
1
A
=
[
a
1
(
1
)
,
a
2
(
1
)
,
…
,
a
n
(
1
)
)
]
H_1=I-u_1u_1^T→ A_1=H_1A=[a_1^{(1)},a_2^{(1)},…,a_n^{(1)})]
H1=I−u1u1T→A1=H1A=[a1(1),a2(1),…,an(1))]
变换后,矩阵
A
1
A_1
A1的第1列
a
1
(
1
)
a_1^{(1)}
a1(1)的第一个元素等于
(
a
11
2
+
a
21
2
+
…
+
a
m
1
2
)
1
/
2
(a_{11}^2+a_{21}^2+…+a_{m1}^2)^{1/2}
(a112+a212+…+am12)1/2,而该列的其他元素全部为0。
第二步针对矩阵
A
1
A_1
A1的第2列
a
2
(
1
)
a_2^{(1)}
a2(1),令
p
=
m
−
1
p=m-1
p=m−1和
x
=
[
a
22
(
1
)
,
a
32
(
1
)
,
…
,
a
m
2
(
1
)
]
T
x=[a_{22}^{(1)},a_{32}^{(1)},…,a_{m2}^{(1)}]^T
x=[a22(1),a32(1),…,am2(1)]T
又可按照式(1)和式(2)求出(m-1)维向量
ω
m
−
1
\omega_{m-1}
ωm−1。 此时,取
u
2
=
[
0
ω
m
−
1
]
u_2=
H
2
=
I
−
u
2
u
2
T
→
A
2
=
H
2
A
1
=
H
2
H
1
A
=
[
a
1
(
1
)
,
a
2
(
1
)
,
…
,
a
n
(
1
)
]
H_2=I-u_2u_2^T → A_2 = H_2A_1 = H_2H_1A=[a_1^{(1)},a_2^{(1)},…,a_n^{(1)}]
H2=I−u2u2T→A2=H2A1=H2H1A=[a1(1),a2(1),…,an(1)]
变换后,矩阵
A
2
A_2
A2的第1列与
A
1
A_1
A1的第1列相同,而第2列
a
1
(
1
)
a_1^{(1)}
a1(1)的第一个元素等于
a
12
(
1
)
a_{12}^{(1)}
a12(1)第二个元素等于
[
∣
a
22
(
1
)
∣
2
+
∣
a
32
(
1
)
∣
2
+
…
+
∣
a
m
2
(
1
)
∣
2
]
1
/
2
[|a_{22}^{(1)}|^2+|a_{32}^{(1)}|^2+…+|a_{m2}^{(1)}|^2]^{1/2}
[∣a22(1)∣2+∣a32(1)∣2+…+∣am2(1)∣2]1/2,而该列的其他元素全部为0。
类似地,又可针对矩阵
A
2
A_2
A2的第3列设计Householder变换矩阵
H
3
H_3
H3,使得
A
2
A_2
A2的第一、二个元素保持不变,其他元素组成的
m
−
2
m-2
m−2维向量
x
=
[
a
33
(
1
)
∣
2
+
∣
a
43
(
1
)
∣
2
+
…
+
∣
a
m
3
(
1
)
∣
2
]
x=[a_{33}^{(1)}|^2+|a_{43}^{(1)}|^2+…+|a_{m3}^{(1)}|^2]
x=[a33(1)∣2+∣a43(1)∣2+…+∣am3(1)∣2]变换为除第一个元素外的全部元素变为0。
假定矩阵
A
A
A经过
k
−
1
k-1
k−1次Householder变换后,已变成
A
(
k
−
1
)
A^{(k-1)}
A(k−1),即
A
(
k
−
1
)
=
H
k
−
1
A
(
k
−
2
)
=
H
k
−
1
…
H
1
A
A^{(k-1)}=H_{k-1}A^{(k-2)}=H_{k-1}…H_1A
A(k−1)=Hk−1A(k−2)=Hk−1…H1A
=
[
a
1
(
k
−
1
)
+
a
2
(
k
−
1
)
+
…
+
a
n
(
k
−
1
)
]
,
k
=
2
,
3
,
…
=[a_{1}^{(k-1)}+a_{2}^{(k-1)}+…+a_{n}^{(k-1)}], k = 2,3,…
=[a1(k−1)+a2(k−1)+…+an(k−1)],k=2,3,…
并且其前
k
−
1
k-1
k−1列具有以下变换结果:
a
j
(
k
−
1
)
=
[
a
1
j
(
k
−
1
)
,
.
.
.
,
a
j
j
(
k
−
1
)
,
0
,
.
.
.
,
0
]
T
,
j
=
1
,
2
,
…
,
k
−
1
a_j^{(k-1)}=[a_{1j}^{(k-1)},...,a_{jj}^{(k-1)},0,...,0]^T, j=1,2,…,k-1
aj(k−1)=[a1j(k−1),...,ajj(k−1),0,...,0]T,j=1,2,…,k−1
因此,第
k
k
k次Householder变换的目的就是保持前
k
−
1
k-1
k−1列不变,实现
A
(
k
−
1
)
A^(k-1)
A(k−1)的第
k
k
k列的下述变换:
H
ˉ
k
[
a
k
,
k
(
k
−
1
)
a
k
+
1
,
k
(
k
−
1
)
⋮
a
m
,
k
(
k
−
1
)
]
=
[
a
k
,
k
(
k
)
0
⋮
0
]
\bar{H}_k
这相当于对矩阵
A
(
k
−
1
)
A^{(k-1)}
A(k−1)进行Householder变换
H
k
A
(
k
−
1
)
H_kA^{(k-1)}
HkA(k−1)时取
H
k
=
[
I
k
−
1
0
0
H
~
k
]
H_k=
n
n
n次Householder变换后,即可实现QR分解。
例
已知线性方程组
x
1
+
2
x
2
=
5
x_1+2x_2=5
x1+2x2=5
2
x
1
+
3
x
2
=
−
2
2x_1+3x_2=-2
2x1+3x2=−2
6
x
1
+
7
x
2
=
1
6x_1+ 7x_2 = 1
6x1+7x2=1
用Householder变换求上述方程组的最小二乘解。
解
记增广矩阵
A
=
[
1
2
5
2
3
−
2
6
7
1
]
A=
针对第1列
[
1
,
2
,
6
]
T
[1,2,6]^T
[1,2,6]T,由式(1)和式(2)求得Householder向量
u
1
=
[
1.075
,
0.290
,
0.871
]
T
u_1=[1.075,0.290,0.871]^T
u1=[1.075,0.290,0.871]T。经过Householder矩阵
H
1
=
I
−
u
1
u
1
T
H_1=I-u_1u_1^T
H1=I−u1u1T变换后,得
H
1
A
=
[
−
6.415
−
7.826
−
23.008
0
0.592
0.875
0
0.808
1.438
]
H_1A=
针对上述矩阵的第2列,计算Householder向量
u
2
=
[
0
,
1.161
,
−
0.809
]
T
u_2=[0,1.161,-0.809]^T
u2=[0,1.161,−0.809]T。经过House holder变换
H
2
=
I
−
u
2
u
2
T
H_2=I-u_2u_2^T
H2=I−u2u2T后,即得QR分解为
H
2
H
1
A
=
[
−
6.415
−
7.826
−
23.008
0
−
1.105
−
1.851
0
0
−
0.160
]
H_2H_1A=
由此得线性方程组
−
6.415
x
1
−
7.826
x
2
=
−
23.008
-6.415x_1-7.826x_2=-23.008
−6.415x1−7.826x2=−23.008
−
1.105
x
2
=
−
1.851
-1.105x_2=-1.851
−1.105x2=−1.851
用回代法解之,得
x
2
=
1.675
x_2=1.675
x2=1.675和
x
1
=
1.543
x_1=1.543
x1=1.543。将这两个解代入原方程,得三个方程的拟合误差分别为
e
1
=
0.107
,
e
2
=
0.111
和
e
3
=
0.017
e_1=0.107,e_2=0.111和e_3=0.017
e1=0.107,e2=0.111和e3=0.017。
如果矩阵
A
m
×
n
A_{m\times n}
Am×n的秩小于
n
n
n,则上述Householder QR分解不一定能够产生正交矩阵
Q
Q
Q。为了解决这个问题,Golub与Van Loan提出使用带有列旋转的Householder OR分解算法。该算法计算分解
Q
T
A
Π
=
[
R
11
R
12
O
O
]
Q^TA\Pi=
式中,
Q
Q
Q为正交矩阵;
R
11
R_{11}
R11为
r
×
r
r\times r
r×r上三角矩阵,且非奇异;
r
=
r
a
n
k
(
A
)
r=rank(A)
r=rank(A);矩阵
Π
\Pi
Π为置换矩阵,矩阵乘积
A
Π
A\Pi
AΠ表示对矩阵A的列互换(称为列旋转)。
列旋转的原则是:在对矩阵 A A A的第 k k k列进行Householder变换之前,先比较 A A A的第 k k k列至第 n n n列中各列的范数,并把范数最大、且与第 k k k列相距最近的列记为 p i v ( k ) piv(k) piv(k),然后将第 p i v ( k ) piv(k) piv(k)列与第 k k k列相互交换位置。这相当于第 k k k次列旋转矩阵 Π \Pi Π由 n × n n\times n n×n单位矩阵交换第 p i v ( k ) piv(k) piv(k)和第 k k k列而成。
算法 具有列旋转的HouseholderQR分解算法
for j=1:n
c(j)=A(1:m,j)^TA(1: m,j)
end
r=0;T=max{c(1),c(2),...,c(n)}
求满足c(k)=T的最小整数k
whilet T>0
r=r+1
piv(r)=k:A(1:m,r)↔A(1:m,k);c(r)↔c(k)
v(r:m)=house(A(r:m,r))
A(r:m,r:n)=row.house(A(r:m,r:n),v(r:m))
A(r+1:m,r)=v(r+1:m)
for i=r+1:n
c(i)=c(i)- A(r,i)^2
end
if r<n
T=max{c(r+1),c(r+2),...,c(n)}
在k=r+1,r+2,...,n中,求满足c(k)=T的最小整数k
else
T=0
end
end
上述算法中, v = h o u s e ( x ) v=house(x) v=house(x)代表针对向量x的Householder向量函数;而 A = r o w . h o u s e ( A , v ) A= row.house(A,v) A=row.house(A,v)为Householder左乘的数,表示用Householder变换结果 P A = ( I − 2 v v T / v T v ) A PA=(I-2vv^T/v^Tv)A PA=(I−2vvT/vTv)A重写矩阵 A A A。
具有列旋转的HouseholderQR分解在矩阵的奇异值分解与特征值分解中有着重要的应用。
虽然我们分别叙述了修正Gram-Schmidt法和Householder法两种QR分解方法,但是这两种方法在数学上是等价的。除了存在
Q
Q
Q的第
j
j
j列和
R
R
R的第
j
j
j行的符号可同时反转的自由度以外,修正Gram-Schmidt法和Householder法是相同的。