什么是计算矩阵最大特征值的最佳小C ++包?

时间:2010-06-26 21:24:40

标签: c++ matrix eigenvalue

我需要计算(稀疏)矩阵的最大特征值。我实现了幂迭代方法,但收敛速度太慢,所以我想使用一个包。有人有推荐吗?

什么是最好的C ++特征值计算包?优选地,小的并且易于编译。

2 个答案:

答案 0 :(得分:2)

我无法向您提供任何细节,因为我自己没有使用它,但我认为ARPACK可能有所帮助,尤其是ARPACK ++,这是一个C ++适应,因为原始包在Fortran77中。我认为MATLAB函数eigs()使用它来找到最大的特征值(和相应的特征向量)。从我听到的应该也能够与STL接口。

MATLAB使用Fortran77例程DSAUPD,DSEUPD,DNAUPD,DNEUPD,ZNAUPD和ZNEUPD。它们看起来像是在ARPACK ++中寻找的。

Check it out here.

答案 1 :(得分:0)

至少如果记忆服务,一种可能性是Boost::uBlas。虽然Boost作为一个整体非常大,但uBlas本身更合理。此外,如果内存服务它是一个只有头的库,那么使用它很容易(你不必先构建库,为链接器设置任何东西等)。

编辑:我应该补充一点,即使使用相当优化的代码,计算特征值/向量通常也很慢。根据您正在做的事情,通常有必要研究一些方法(例如)让您只计算矩阵子集的特征值(例如Landmark Multidimensional Scaling)。