使用 LAPACK 的 ssteqr 计算特征向量时特征向量的排序



我正在使用LAPACK的ssteqr函数来计算特征值/特征向量。ssteqr的文档说特征值按升序排序。假设特征向量的列表也按升序排序是合理的吗?

是的,假设特征向量是有序的,使得i -th特征向量对应于i -th特征值是合理的。

然而,如果我是你,我会检查每个特征值的特征向量乘以矩阵的结果。通过这种方式,您可以确保正确地解释输出,并显式地看到计算的准确性。

这是一个老问题,但我最近一直在努力解决这个问题,所以我为现在和未来的读者添加了这个问题。

基本的答案是,是的,特征向量的排序使得i特征向量对应于i特征值。然而,请注意,由此获得的特征向量可能不是您想要的实际的特征向量。这是由于以下原因。由于steqr函数只作用于三对角矩阵,所以通常使用LAPACK的sytrd函数首先将原对称矩阵变换为M,将其变换为T的三对角形式,使得M = QTQT,其中Q是一个正交矩阵(QT表示它的转置)。然后在这个三对角矩阵T上应用?steqr函数来求它的特征值和特征向量。现在这样得到的特征值(T)与M的特征值完全相同,所以如果只想要特征值,可以停在这里。但是如果你对特征向量感兴趣,比如OP,那么你需要记住,TM的特征向量是不同的。为了求出原矩阵M的特征向量,需要将得到的T的特征向量左乘Q。这很容易通过使用LAPACK函数orgtr或ormtr来完成。这里有一个清晰的解释:https://software.intel.com/en-us/mkl-developer-reference-fortran-sytrd.

最新更新