SVD算法的全面介绍
Conergence
Criterion
1b
假定 j是由算法3.2.2计算得到,则当 j/ j tol时,把 j设置为0时。
假定 j是由算法3.2.2计算得到,当不需要求奇异向量时,则当
Criterion
2a
Conergence
0.5*tol* min j/(n 1)1/2
j n
2n
2
2
n 时,把 n设置为0时。
Conergence
Criterion
2b
2
2
1 时,把 2设置为0时。
假定 j是由算法3.2.2计算得到,当不需要求奇异向量时,则当
0.5*tol* min j/(n 1)1/2
j 1
22
既然是混合算法,那么就要有一个依据来判断什么时候采用什么算法比较有优势,令 max( i, i),现在就来给出这个选择算法的判断依据:
i
if(fudge*tol*(/ ) 采用零位移QR迭代法 else 采用传统的位移QR迭代法 endif
这个判据的依据是:判断传统的位移QR迭代法所引起的误差上限是否超过了最大所能容许的误差tol* ;而一般取因子fudge 1,这是为了在奇异值过于集中时,而少采用零位移的QR迭代法,一般来说取fudge min(n,m)。 实际的应用中,当上面判据已经决定采用传统的位移QR迭代法,还要经过一步判断以确认是否回到采用零位移QR迭代法的路上。具体原因如下:当计算得到所要采取的位移平方 2,知道Givens变换的旋转角的tangent值为
1 2 2 2
tan 2 2 1 2
1 1 1
1
2
所以当2 1 1时,这个旋转和零位移QR迭代法中的Givens旋转变换很接近,
1
而因为此时零位移QR迭代法更快更精确,所以我们将采用零位移QR迭代法。 当接近1的时候,几乎都采用传统的位tol是一个用户可选择的 tol 1的数,
移QR迭代法,这时计算得到的奇异值只有绝对精度;而当接近 时,则几乎都采用零位移QR迭代法,这将使算法失去立方收敛速度,而降低效率。 接着要考虑的是向下越界(Underflow),当从 n中减去一个数以使得它逼近0时,有可能造成向下越界(Underflow)。为防止向下越界,可以把 j和maxit* 相比较,