SVD算法的全面介绍
的j置零;
(ii)如果 j 0,j 2, ,n,则输出有关信息结束;否则, 1: 0,确定正整数
p q,使得
p q 1 n 0, j 0,p j q; (iii)如果存在i满足p i q 1使得
i B ,
则 i: 0,x: i 1,y: i 1, i 1: 0,l: 1,转步(iv),否则转步(4). (iv)确定c cos ,s sin 和 使
cs x 0 sc y ,
cs y
//这也相对于 ,所以可以直接调用算法3.1.1得到
sc x 0
i l: , U: UG(i,i l, )T;
T
T
cs c s
//这相当于U(1:n;i,i l) U(1:n;i,i l) U(1:n;i,i l) ;
sc sc
(v)如果l q i,则
x: s i l 1, i l 1: c i l 1,y: i l 1,l: l 1, 转步(iv),否则转步(i).
(4)SVD迭代:应用算法3.1.3于二对角阵
0 p p 1
p 1p 2
, B1
q
0 q 得
B1: PTB1Q,
U: Udiag(Ip,P,In p q), V: Vdiag(Ip,Q,In p q)
然后转步(3)。
,这一算法可计算任意一个m n实矩阵A的奇异值分解:A U VT。如果用U
分别表示U,V和 的计算值,则误差分析的结果表明: 和 V
W U,其中 WTW I, U ; Um2
Z V,其中ZTZ I, V ; Vn2
WT(A A)Z,其中 A A 。 22
这里 为略大于机器精度的一个数。由此可见,这一算法有相当好的数值稳定性;再加上奇异值对扰动的不敏感性,即知利用这一算法可求得相当精确的奇异值,