LAPACK 有以下 4 个用于计算实对称矩阵的特征值的例程;即 DSYEV、DSYEVD、DSYEVX 和 DSYEVR(推荐使用 DSYEVR)。
如果我要计算特征值和所有特征向量,每个例程将执行多少次浮点运算。所有这些例程都是基于三对角化的吗?
LAPACK 有以下 4 个用于计算实对称矩阵的特征值的例程;即 DSYEV、DSYEVD、DSYEVX 和 DSYEVR(推荐使用 DSYEVR)。
如果我要计算特征值和所有特征向量,每个例程将执行多少次浮点运算。所有这些例程都是基于三对角化的吗?
首先,是的,这些都是基于初始的三对角化(通常引用为翻牌)。DSYEV 只是 DSYEVX 的一个更易于使用的版本,所以我们暂时忽略它。基本分类如下:
这些算法中的每一个的失败次数都高度依赖于特征值分布。例如,如果您的矩阵具有几乎退化的密集特征值簇,则这些算法往往具有降低的收敛顺序。充其量你有在三对角特征问题中失败,最坏的情况是如果您的集群大小为. 有关更详细的分析,请参阅此工作说明。
既然你想要特征向量,让我们看看它们提取的失败次数。隐式移位 QR 不断更新用于归约的正交矩阵,因此它总是在当需要特征向量时(基本上,每个 QR 凸起扫描都需要,你需要通常扫)。
对于 D&C 和 MRRR,教科书的描述是先计算特征值,然后通过逆迭代提取特征向量。这需要每个特征向量工作,因为通常 1-2 次迭代就足够了,所以它会是找到特征值后,努力获取所有特征向量。然而,在实践中,Lapack 做了一些更复杂的事情。
我对 D&C 不熟悉,但看看源代码,看起来它会随着它不断更新特征向量,所以它的运行时间可能介于两者之间和. 对于MRRR,本文分析了逆迭代的失败。在实践中,特征向量必须在整个算法中更新,并在检测到聚类时重新正交化。此过程的一些细节可以在 DSYEVR 的界面中进行控制,并且与 D&C 一样,实际运行时间介于二次和三次之间。