SVD算法的全面介绍
算法3.1.2:
Update(c,s,v1,v2): replace n-vectors v1and v2 by c*v1 s*v2 and s*v1 c*v2
for i = 1 to n //这里的n为向量v1,v2的维数
t v1(i)
v1(i) c*t s*v2(i)
v2(i) s*t c*v2(i) endfor
由此可知传统SVD算法中完成一次QR迭代可如下进行:
算法3.1.3:
(1) 输入二对角矩阵B的对角元素 i... 和次对角元素 i 1... ;
//其中i,分别为子矩阵B在总矩阵中的上下标
(2) d 2 1 2 1 2 2 /2,
( 2 2) d sign(dx i2 ,y i i 1,k ,
Q I,P I;
(3) 计算c cos( ),s sin( )和r使得
cs
x,y sc r,0 ,
//可直接输入x,y调用算法3.1.1得到c,s和r;
并且更新
x k 1 k k 1 cs
y 0 sc
k 1 k 1 Update(c,s,qk,qk 1) //利用算法3.1.2
//其中qk,qk 1分别为矩阵Q的第k和k+1列
(4) 如果k i,则 k r;否则进行下一步 (5) 计算c cos( ),s sin( )和r使得
cs x r sc y 0 ,
//可直接输入x,y调用算法3.1.1得到c,s和r;
k r
Update(c,s,pk,pk 1) //利用算法3.1.2
//其中pk,pk 1分别为矩阵P的第k和k+1列
(6) 如果k 1,则
T