下一节:加速 上一级:子空间迭代法 上一节:子空间维度

由于通过子空间迭代计算的每个近似特征值的收敛速度不同,通常的做法是每次提取特征值,并进行某种形式的收缩。即,一旦第一个特征向量收敛,就没有必要在后续迭代中继续将其与A相乘。实际上,我们可以冻结这个向量,只处理向量v_2, \ldots,v_m。然而,我们仍然需要在需要进行正交化时对冻结向量v_1进行后续正交化。这种策略的术语是锁定;也就是说,我们不再试图改进对v_1的锁定近似。

以下算法描述了一种实用的带缩小(锁定)的子空间迭代,用于计算n_{\mathrm{ev}}个主特征值。

算法 4.5 HEP带锁定和投影的子空间迭代
(1)  取初始猜测矩阵 Z,对其做QR分解得到 Z=V R。
(2)  令 j = 0
(3)  while j \le n_{ev} do
(4)      \hat{Y} = [V_j, A^\text{iter}V_{p-j}]
(5)      对 \hat{Y} 做正交化得到 \hat{Y} = V R (前 j 列保持不变)
(6)      H = V^\ast_{p-j} A V_{p-j}
(7)      计算 H 的特征分解 H = S \Theta S^\ast
(8)      测试特征值 \Theta 的收敛性
(9)      V = [V_j, V_{p-j} S]
(10)     令 j = j + i_\text{conv},其中 i_\text{conv} 是新收敛的特征值数量
(11) end while

下面我们讨论一些实现细节。

(1)
初始启动矩阵Z应构建为在感兴趣的特征向量方向上占主导地位,以加速收敛。当没有此类先验信息时,随机矩阵与其他选择一样好。
(4)
迭代参数 \mathrm{iter}(乘以 A 的次数)应选择为在保持合理数值精度的同时最小化正交化成本。放大因子(\lambda_1/\lambda_p)^\text{iter},其中特征值\lambda_i按绝对值递减排序,给出了精度损失。鲁蒂斯豪瑟[381]采取保守策略,仅允许放大因子为10,损失一位小数,而斯图尔特和詹宁斯[426]让算法运行至\epsilon_M^{-1/2},即机器精度的一半,但不超过10次迭代。



下一节:加速 上一级:子空间迭代法 上一节:子空间维度
Susan Blackford 2000-11-20