SVD算法的全面介绍
迭代的第三步就是确定正交矩阵Q使得QT(G1TTG1)Q为对称三对角阵,这相当于将BG1二对角化,可以用“驱逐出境”法如下进行,取n 3为例:
于是我们可以左乘 可知BG1在(2,1)位置上出现了一个我们不希望有的非零元素,
一个(1,2)坐标平面的Givens变换J1消去这一非零元素;但是这样又在(1,3)位置上出现了一个非零元素;因此,我们又需右乘一个(2,3)坐标平面的Givens变换G2消去这一非零元素;这又会在(3,2)位置上出现了一个非零元素,再左乘一个(2,3)坐标平面的Givens变换J2消去这一非零元素。最终完成了n 3时的BG1二对角化任务。 对于一般的n,用完全类似的方法可确定2n-3个Givens变换J1,G2,J2,G3,…, Gn 1,Jn 1将BG1中不受欢迎的元素都驱逐出境, 即使: Jn 1Jn 2...J1(BG1)G2...Gn 1
为二对角矩阵,而且这样得到的G2...Gn 1满足 (G2...Gn 1)e1 e1 这样我们就得到了计算二对角阵奇异值的最基本的QR迭代算法了。
为了方便,我们在《QR分解算法及其评估》中的算法2.3.1的基础上构造以下算法;构造函数Givens(x,y,c,s,r),当已知x,y的值时,计算出满足
cs x r sc y 0 ,
的c,s,r;算法如下:
算法3.1.1:
cs x r
, 给定数值x,y,本函数计算c cos( ),s sin( ),使得
sc y 0
function: csr Givens(x,y)
T
T
ify 0
c 1,s 0; else
if y x
x/y;s r y*s;s 1/s;c s ; else
y/x;c r x*c;c 1/c;s c ; end end
并且可知每次对奇异向量的更新都相当于对奇异矩阵右乘上一个相应的Givens cs 矩阵 ,这只改变了矩阵的两列,具体操作可如下进行:
sc