SVD算法的全面介绍
3.1:传统QR迭代算法[1,2,3] 设A Rm n(m n),可知奇异值分解可从实对称矩阵C ATA的Schur分解导出[1],因此我们自然想到先利用对称QR方法来实现C的Schur分解,然后借助C的Schur分解来实现A的奇异值分解,然而这样做有两个缺点:一是计算C ATA要很大的计算量;二是计算C ATA会引入较大的误差。因此Golub和Kahan在1965年提出了另一种十分稳定的方法,其基本思想就是隐含地应用对称QR算法于ATA上,而并不需要将C ATA计算出来。 方法第一步是:将A二对角化,即求正交矩阵U1和V1,使得
B T
U1AV1 ……(3.1.1)
0 m n
n
其中
1 2000 0 0023
B 00 0 ……(3.1.2)
000 n 0000 n
分解式(3.1.1)可以用Householder变换来实现,将A分块为 A v1A1
1n 1
先计算m阶Householder变换P1使得 并且形成:
m
Pv11 1e1( 1 R,e1 R)
T
u1 1
PA 11
1mA 1
使得 再计算n-1阶Householder变换H1
u e( R,e Rn 1) H
11
21
2
1
并形成:
H A11 v2A2
1n 2
然后对k 2,3,...,n 2依次进行:
使得 (a) 计算m-k+1阶Householder变换Pk
v e( R,e Rm k 1) P
kk
k1
k
1
并且形成:
T
1uk PkAk
m 1A k
使得 (b) 计算n-k阶Householder变换Hk