使用c ++特征库中的特征向量仅计算一个特征向量

问题描述 投票:2回答:1

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

c++ eigen eigenvector
1个回答
0
投票

如果矩阵是真实的,并且您已经在使用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

© www.soinside.com 2019 - 2024. All rights reserved.