c++ - 使用 C++ 特征库中的 eigenvectors() 仅计算一个特征向量

标签 c++ eigen eigenvector

Eigen库的Selfadjointeigensolver()方法的compute方法计算所有特征值的特征向量。我想让它只计算一个特定特征值的特征向量,例如最小的或最小的第 5 个。这可能吗?

最佳答案

如果您的矩阵是真实的并且您已经在使用 Eigen,最简单的方法是使用 Spectra ,这是一个仅需要 Eigen 的 header 库。它是旧 Arpack 的重新设计,它使用 Arnoldi 幂迭代迭代收敛到极值特征值/特征向量对。您可以一次请求“几个”特征对。

如果您的矩阵很复杂,您有两个选择。要么你去Arpack++直接可以处理复杂的矩阵,但使用起来更乏味,或者您可以通过将矩阵分为实部和虚部来坚持使用 Spectra,如 explained here ,但这会带来很大的性能损失。本质上,如果您有一个复杂的N*N矩阵A=B+iC 和 vector x=u+iv,您可以将特征值方程转为Ax=kx转化为(B+iC)(u+iv)=k(u+iv),可以写成2N*2N > 问题。

如果您的矩阵确实很大,您可能需要考虑 Slepc .

关于c++ - 使用 C++ 特征库中的 eigenvectors() 仅计算一个特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57142561/

相关文章:

c++ - 在 C++ 中一次将相似的内容写入多个文件

c++ - 使用 ffmpeg - % 等进行转码转换器的进度单位是什么?

c++ - 使用 eigen/Intel MKL 求解稀疏线性系统

Python numpy/scipy 特征向量似乎不适合马尔可夫链模型

c++ - 为什么 QMediaPlayer::duration() 给我的值为 -1?

c++ - 如何获取CTreeCtrl中选中项的文件类型?文件扩展名可能被隐藏,因此 GetItemText 没有帮助

c++ - 对于巨大的稀疏对称矩阵,哪个是 Spectra 库中最快的特征值求解器?

c++ - 按常量偏移多段线

广义特征值的 Python eig 不返回正确的特征向量

java - Jama 和 Matlab LMNN 和特征值