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/