实践中用于解决非厄米特征值问题(NHEP)(参见公式7.1及7.2)的主要直接方法 [1] 是QR算法。该算法首先计算非厄米矩阵A的Schur标准型(或简称为Schur分解):
QR算法起源于简单的QR迭代:
设A_0 = A,
对于k = 1,2, \ldots,
对A_{k-1}进行QR分解:A_{k-1} = Q_k R_k
计算A_{k} = R_k Q_k
在一定条件下,A_k会收敛至Schur型T。然而,QR迭代的收敛速度对于实际应用而言极其缓慢。为了使QR迭代成为快速有效的Schur分解计算方法,已开发出多项关键改进措施,包括海森堡约简、隐式移位、缩减及矩阵平衡等。感兴趣的读者可参阅[198,114]及相关文献,了解相关理论及实现细节。
QR算法对于一般n \times n矩阵的计算成本为O(n^3)次浮点运算及O(n^2)内存需求。对于实n \times n矩阵,一个粗略的估计是若同时计算U和T,则需约25n^3次浮点运算;若仅需特征值,则大约需要10n^3次浮点运算。
QR算法具有向后稳定性;即,对于计算得到的酉矩阵\widehat{U}(在机器精度范围内)及上三角矩阵\widehat{T},我们有
实现QR算法的子程序几乎存在于所有与线性代数相关的软件包中。在MATLAB中,它作为eig命令使用。[2] 在LAPACK[12]中,提供了以下驱动程序例程,用于执行计算Schur分解、特征值、特征向量及计算结果精度估计的变种任务:
xGEES | 计算Schur分解并按特征值排序, |
xGEESX | xGEES加上条件估计, |
xGEEV | 特征值与特征向量, |
xGEEVX | xGEEV加上条件估计, |
在ScaLAPACK[52]中,提供了用于并行执行海森堡约简及隐式移位QR迭代的计算例程,分别是PxGEHRD和PxLAHQR。