我需要计算(稀疏)矩阵的最大特征值。我实现了幂迭代方法,但收敛速度太慢,所以我想使用一个包。有人有推荐吗?
什么是最好的C ++特征值计算包?优选地,小的并且易于编译。
答案 0 :(得分:2)
我无法向您提供任何细节,因为我自己没有使用它,但我认为ARPACK可能有所帮助,尤其是ARPACK ++,这是一个C ++适应,因为原始包在Fortran77中。我认为MATLAB函数eigs()使用它来找到最大的特征值(和相应的特征向量)。从我听到的应该也能够与STL接口。
MATLAB使用Fortran77例程DSAUPD,DSEUPD,DNAUPD,DNEUPD,ZNAUPD和ZNEUPD。它们看起来像是在ARPACK ++中寻找的。 p>
答案 1 :(得分:0)
至少如果记忆服务,一种可能性是Boost::uBlas
。虽然Boost作为一个整体非常大,但uBlas
本身更合理。此外,如果内存服务它是一个只有头的库,那么使用它很容易(你不必先构建库,为链接器设置任何东西等)。
编辑:我应该补充一点,即使使用相当优化的代码,计算特征值/向量通常也很慢。根据您正在做的事情,通常有必要研究一些方法(例如)让您只计算矩阵子集的特征值(例如Landmark Multidimensional Scaling)。