小矩阵的特征值

计算科学 线性代数 特征值
2021-12-15 09:46:30

我正在为 2x2、3x3 和 4x4 矩阵(实数、非对称)编写一个小型数值库。

许多数值分析文本强烈建议不要计算特征多项式的根,建议使用双位移 QR 算法。然而,矩阵的大小让我质疑简单地计算特征多项式并找到根是否足以解决这个问题。在 StackExchange 上找到了支持这一点的答案,但我知道多项式系数中的错误会产生不准确的多项式零点(从而产生不同的特征值)。另一方面,这个方程充其量只是四次的,我们有多项式根的解析公式,所以我们不应该离得太远。

在这种情况下,使用特征多项式获取特征值的优缺点是什么?

2个回答

首先要注意的是,找到多项式(任何多项式)的根和找到任意矩阵的特征值之间的对应关系是非常直接的,而且它是一个丰富的主题,请参阅Toh 和 Trefethen的 Pseudozeros of polynomials and pseudospectra of伴随矩阵以及那里的参考资料。

基本上,2×2 的情况是微不足道的,标准公式 在数值上是稳定和准确的,只要行列式 Δ的计算准确——当b^2时直接公式将不准确≈4ac,但由于 Kahan 有一个使用 FMA 的准确公式(https://hal.inria.fr/ensl-00649347v1/document)。

x1=bsign(b)Δ2a,x2=c/(ax1),Δ=det(b2a2cb)
Δb24ac

即使对于三次多项式,也没有这样的直接等价物。编辑:请参阅下面 CADJunkie 评论中 Kahan 方法的链接。这很可能是错误的。)直接公式并不总是在数值上稳定(我认为与您的假设相反),并且它不能在数值上保持相同通过在某处插入正确的符号来作为二次公式。您可以尝试以更高的精度评估它,例如使用双原生算术。但是直接作用于多项式的方法非常复杂。例如(https://doi.org/10.1145/2699468,它也适用于四次多项式)你可以使用牛顿方法和一个很好的预先计算的第一个猜测,但它变得非常复杂,而且加速甚至不是那么大.

4 次多项式的显式公式同样在数值上并不总是稳定的。最难的多项式往往有不常见的根(小,或彼此接近,大小相差很多),但即使在几十亿个纯随机多项式上测试您的代码通常也可以揭示数值错误。

与此相关的一个奇怪的事情是 Jenkins-Traub 是一种寻找多项式根的常用方法,它实际上是一种变相的特征值算法(逆迭代)。

我会说公式的明确性在某种程度上具有误导性:它会诱使您认为因为公式具有封闭形式,这意味着它在某种程度上更便宜/更容易。我真的建议您在一些测试数据上实际测试/基准测试。不一定是真的:确定 ≥ 3 次多项式的根确定小矩阵特征值的完整问题的一个小整数难度系数,并且特征值的标准库例程更加健壮并且经过良好测试。因此,通过将小特征值问题简化为低次多项式根问题,您不一定会简化它。3

在这种情况下,使用特征多项式获取特征值的优缺点是什么?

我认为主要的缺点是你做出的这个假设:

另一方面,这个方程充其量只是四次的,我们有多项式根的解析公式,所以我们不应该离得太远。

因为一个公式是封闭形式的,并且是分析性的,这意味着它很容易/便宜/准确,不一定是真的。对于您可能拥有的特定数据,这可能是正确的,但据我所知,一般情况下并非如此。

PS 封闭形式和非封闭形式之间的整个区别在计算机算术中变得非常挑剔:你可能认为是封闭形式,但就计算机算术而言关心的是,这只是另一个近似有理函数,它可能更快,但与定义特征值算法结果的近似有理函数没有根本不同。cos()

使用 QR 算法是更好的方法。我认为最好使用最适合手头任务的算法。

事实上,即使您试图计算多项式的根,而不打算将它们用作矩阵的特征值,通常也建议为该多项式创建伴随矩阵,并求解该矩阵的特征值。(即,执行与您正在考虑的相反的过程。)该过程非常稳健,但计算效率不是很高。特定于寻找多项式根任务的算法(例如,Jenkins-Traub、Laguerre 方法等)会更有效。即使您使用其中一种方法,在某些情况下,形成伴随矩阵并计算其特征值可能会产生更好的结果。

此外,正如基里尔所指出的,没有办法利用 3 次或 4 次多项式的封闭形式解决方案。几年前,在编写 Jenkins-Traub 算法的翻译之前,我对此进行了研究。对于数值结果,最好还是从头开始编写一个算法作为离散求解器并忽略封闭形式的解。