【发布时间】:2011-09-29 17:28:58
【问题描述】:
我正在使用 LAPACK 的 ssteqr 函数来计算特征值/特征向量。 ssteqr 的文档说特征值是按 “升序” 排序的。假设特征向量列表也按升序排序是否合理?
【问题讨论】:
标签: lapack eigenvector eigenvalue
我正在使用 LAPACK 的 ssteqr 函数来计算特征值/特征向量。 ssteqr 的文档说特征值是按 “升序” 排序的。假设特征向量列表也按升序排序是否合理?
【问题讨论】:
标签: lapack eigenvector eigenvalue
是的,可以合理地假设特征向量是有序的,使得i-th 特征向量对应于i-th 特征值。
不过,如果我是你,我会检查每个特征值的特征向量乘以矩阵的结果。通过这种方式,您可以确定您正确解释了输出,并且您可以清楚地看到计算的准确性。
【讨论】:
这是一个老问题,但我最近对此感到困惑,所以我为当前和未来的读者添加了这个。
基本答案是,是的,对特征向量进行排序,使得第 i 个特征向量对应于第 i 个特征值。但是,请注意,由此获得的特征向量可能不是您想要的实际特征向量。之所以如此,是因为以下。
由于 ?steqr 函数仅适用于三对角矩阵,因此通常使用 LAPACK 的 ?sytrd 函数首先将原始对称矩阵(称为 M)转换为三对角形式,称为 T,使得 M = QTQT 其中 Q 是一个正交矩阵(并且 QT 表示它的转置)。然后在这个三对角矩阵 T 上应用 ?steqr 函数来找到它的特征值和特征向量。现在得到的(T的)特征值与M的特征值完全一样,所以如果你只想要特征值可以到此为止。但是如果对特征向量感兴趣,比如 OP,那么需要记住 T 和 M 的特征向量是不同的。求原始矩阵M的特征向量,需要将得到的T的特征向量左乘Q。这很容易通过使用 LAPACK 函数 orgtr 或 ormtr 来完成。请参阅此处以获得清晰的解释:https://software.intel.com/en-us/mkl-developer-reference-fortran-sytrd。
【讨论】: