要应用此算法,我们需要指定初始向量{v}_0、容差\epsilon、目标值\tau以及指定应计算多少个接近\tau的特征对的数值{k}_{\max}。{m}_{\max}表示搜索子空间的最大维度。如果超过此值,将使用指定维度{m}_{\min}的子空间进行重启。
通常,当\tau选择大于\lambda_{\max}(A)时,算法会输出{k}_{\max}个最大特征值;当\tau选择小于\lambda_{\min}(A)时,则会输出{k}_{\max}个最小特征值。计算得到的特征对(\widetilde\lambda_j,\widetilde{x}_{j}),满足\Vert\widetilde{x}_{j}\Vert _2=1,满足\Vert A \widetilde{x}_{j}-\widetilde\lambda_j\widetilde{x}_{j}\Vert _2\leq j\epsilon,其中\widetilde{x}_j表示\widetilde{X}的第j列。
原则上,该算法计算最接近指定目标值\tau的{k}_{\max}个特征值。这仅在需要{k}_{\max}个最大或最小特征值时可靠。对于内部特征值集,我们将在第4.7.4节中描述更安全的技术。现在,我们将根据前几节的讨论,对算法的一些部分进行评论。
如果{m}=0,这是一个空循环。
矩阵{V}表示列向量为{v}_j的n阶{m}矩阵,{V^A}\equiv AV亦然;S是列向量为s_j的{m}阶矩阵,\Theta = \mathrm{diag}(\theta_1,\ldots,\theta_m)。
偶尔,A的某个所需特征向量可能未被检测到,例如,如果v_0在相应特征向量方向上没有分量。对于随机初始向量,这种情况不太可能发生。(参见算法4.13的注释(14)。)
当然,修正方程可以通过任何合适的迭代过程近似求解,例如预处理Krylov子空间方法。由于\widetilde{Q}的出现,在使用预处理矩阵A-\theta I时需要谨慎。预处理器的引入可以遵循与单向量Jacobi-Davidson算法相同的原则;参见算法4.18的模板。确保迭代求解器的初始向量{t}_0满足正交约束\widetilde{Q}^\ast {t}_0=0。注意,如果在几次Jacobi-Davidson迭代中保持{K}不变,算法4.18每步可以节省显著的计算量。在这种情况下,{\widehat{Q}}的列可以从之前的步骤中保存。同样,算法4.18中的矩阵{\mathcal M}及其{\mathcal L}{\mathcal U}分解也可以从之前的步骤中更新。