本征库的Selfadjointeigensolver()方法的计算方法将计算所有本征值的本征向量。我想让它仅计算一个特定特征值的特征向量,例如最小的特征值或最小的特征值的第五个特征值。这可能吗?
如果矩阵是真实的,并且您已经在使用Eigen,最简单的方法是使用Spectra,这是仅标头的库,只需要Eigen。这是对旧式Arpack的重新设计,它使用Arnoldi幂迭代来迭代收敛到极值特征值/特征向量对。您可以一次请求“几个”特征对。
如果矩阵很复杂,则有两个选择。您可以直接选择Arpack++,它可以处理复杂的矩阵,但使用起来比较乏味,或者可以通过将矩阵分为explained here的实部和虚部来坚持Spectra,但这会带来很大的性能损失。本质上,如果您有一个复杂的N*N
矩阵A=B+iC
和向量x=u+iv
,则可以将特征值方程Ax=kx
转换为(B+iC)(u+iv)=k(u+iv)
,这可以写成2N*2N
问题。
如果矩阵确实很大,则可能需要考虑Slepc。