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

时间:2011-09-29 17:28:59

标签: lapack eigenvector eigenvalue

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

2 个答案:

答案 0 :(得分:2)

是的,可以合理地假设特征向量是有序的,以便i - 特征向量对应于i - 特征值。

然而,如果我是你,我会检查每个特征值,即矩阵乘以特征向量的结果。这样您就可以确定正确解释输出,并且可以明确地看到计算的准确性。

答案 1 :(得分:0)

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

基本答案是,是的,对特征向量进行排序,使得 i 特征向量对应于 i 特征值。但是,请注意,这样获得的特征向量可能不是您想要的实际特征向量。这是因为以下原因。

由于?steqr函数仅适用于三对角矩阵,因此通常使用LAPACK的sytrd函数来首先转换原始对称矩阵,将其称为 M ,三对角形式,称之为 T ,这样 M = QTQ T 其中 Q 是一个正交矩阵(和< em> Q T 表示其转置)。然后在这个三对角矩阵 T 上应用?steqr函数来找到它的特征值和特征向量。现在获得的特征值( T )与 M 的特征值完全相同,因此如果只想要特征值,则可以在此处停止。但是如果人们对像OP这样的特征向量感兴趣,那么需要记住 T M 的特征向量是不同的。为了找到原始矩阵 M 的特征向量,需要将获得的 T 的特征向量乘以 Q 。通过使用LAPACK函数orgtr或ormtr可以很容易地完成此操作。请参阅此处以获得清晰的解释:https://software.intel.com/en-us/mkl-developer-reference-fortran-sytrd