SVD算法的全面介绍
y cs k 10 x
sc k 1k 2 k 1k 2
; k k 1,转步(3)
否则,
cs sc
迭代结束。
T
T
上述算法的导出是在T BTB不可约的条件下进行的。从T BTB容易推出,T不可约的充分必要条件是 i和 i(除 n外)都不为零,而当某个 i 0时,B具有形状
B0 B 1
0B2 因此,可将B的奇异值分解问题分解为两个低阶二对角阵的奇异值分解问题;而当
某个 i 0时,我们可以给B依次左乘(i,i 1),(i,i 2), ,(i,n)坐标平面内适当选取的Givens变换使B变为第i行全为零的二对角阵. 因此,此种情形亦可约化为两个低阶二对角阵的奇异值分解问题.
在实际计算时,当 i或 j很小时,就可将B分解为两个低阶二对角阵的奇异值分解问题.通常使用的准则是:当
i B 或 j j j 1
时,就将 i或 j视作零,这里 是一个略大于机器精度的正数. 综述上面的讨论,就可得到传统的计算奇异值分解的算法如下:
算法3.1.4 (传统的SVD算法)
(1)输入A Rm n(m n)及允许误差 . (2)二对角化:计算Householder变换P1, ,Pn, H1, ,Hn 2使得
B nT
(P P)A(H H) 1n1n 2 0 m n,
0 1 2
; 其中B
n 0 n
U: PP12 Pn, V: H1H2 Hn 2.
(3)收敛性检验: (i)将所有满足
j j j 1