LAPACK 对称特征值例程 DSYEV、DSYEVD、DSYEVX 和 DSYEVR 的触发器计数

计算科学 线性代数 特征值 拉帕克
2021-12-05 07:28:38

LAPACK 有以下 4 个用于计算实对称矩阵的特征值的例程;即 DSYEV、DSYEVD、DSYEVX 和 DSYEVR(推荐使用 DSYEVR)。

如果我要计算特征值和所有特征向量,每个例程将执行多少次浮点运算。所有这些例程都是基于三对角化的吗?

1个回答

首先,是的,这些都是基于初始的三对角化(通常引用为43n3翻牌)。DSYEV 只是 DSYEVX 的一个更易于使用的版本,所以我们暂时忽略它。基本分类如下:

  • DSYEVX:三对角隐式移动 QR(凸出追逐)
  • DSYEVD:分而治之(按等级 1 修改拼接)
  • DSYEVR:使用多重相对鲁棒表示 (MRRR) 算法(对称 dqds)

这些算法中的每一个的失败次数都高度依赖于特征值分布。例如,如果您的矩阵具有几乎退化的密集特征值簇,则这些算法往往具有降低的收敛顺序。充其量你有O(n2)在三对角特征问题中失败,最坏的情况是O(n3)如果您的集群大小为O(n). 有关更详细的分析,请参阅此工作说明。

既然你想要特征向量,让我们看看它们提取的失败次数。隐式移位 QR 不断更新用于归约的正交矩阵,因此它总是在O(n3)当需要特征向量时(基本上,每个 QR 凸起扫描都需要O(n2),你需要O(n)通常扫)。

对于 D&C 和 MRRR,教科书的描述是先计算特征值,然后通过逆迭代提取特征向量。这需要O(n)每个特征向量工作,因为通常 1-2 次迭代就足够了,所以它会是O(n2)找到特征值后,努力获取所有特征向量。然而,在实践中,Lapack 做了一些更复杂的事情。

我对 D&C 不熟悉,但看看源代码,看起来它会随着它不断更新特征向量,所以它的运行时间可能介于两者之间O(n2)O(n3). 对于MRRR,本文分析了逆迭代的失败。在实践中,特征向量必须在整个算法中更新,并在检测到聚类时重新正交化。此过程的一些细节可以在 DSYEVR 的界面中进行控制,并且与 D&C 一样,实际运行时间介于二次和三次之间。