SVD算法的全面介绍
当 j小于maxit* 时就认为收敛;其中maxit是内部QR法最大可能出现的迭代次数,而 是向下越界限(即机器可识别的最小正数);这也就是说当矩阵具有接近或小于 的奇异值时,算法将失效。 总以上我们已经完成了构造新算法的所有理论准备,但是具体的程序中还有很多的细节值得研究和考虑,以下一一说明,更详细的说明可参考[13]: 1)“从上往下”还是“从下往上”开始进行“驱逐出境”运算:
因为零位移的QR迭代法是按小的奇异值到大的奇异值的次序逐个收敛的,所以矩阵的元素如果是左上角大于右下角时,按前面所将的“从上往下”开始进行“驱逐出境”时,收敛将会是快速的;而反之矩阵的元素如果是左上角小于右下角时,选择“从下往上”开始进行“驱逐出境”更快。而为了简单起见算法中只是按着比较s1和sn的大小来判断方向的;而当矩阵分成很多子矩阵时,每一个子矩阵都有自己的方向。
首先来给出传统方法的Upward算法如下:
算法3.1.3b:
(1) 输入二对角矩阵B的对角元素 i... 和次对角元素 i 1... ;
//其中,分别为子矩阵B左上角元素和右下角元素在总矩阵中的标号 (2) d i2 1 i2 2 i2 i2 1 /2,
x 2 ,y 1 ,k , Q I,P I;
(3) 计算c cos( ),s sin( )和 使得
( i2 i2 1) d sign(d,
cs x
sc y 0 , 如果k ,则 k 1 ; 更新:
T
T
y cs k0 x
sc
kk 1 k 1 k
Update(c,s,pk,pk 1) //利用算法3.1.2
//其中pk,pk 1分别为矩阵P的第k和k-1列
(4) 计算c cos( ),s sin( )和 使得
cs
xy sc 0 ,
k
Update(c,s,qk,qk 1) //利用算法3.1.2
//其中qk,qk 1分别为矩阵Q的第k和k-1列