【发布时间】:2011-03-08 17:17:57
【问题描述】:
我需要计算(稀疏)矩阵的最大特征值。我实现了幂次迭代的方法,但是收敛速度太慢了,所以我想用一个包来实现它。有人有推荐吗?
最好的 C++ 特征值计算包是什么?最好是小型且易于编译的。
【问题讨论】:
标签: c++ matrix eigenvalue
我需要计算(稀疏)矩阵的最大特征值。我实现了幂次迭代的方法,但是收敛速度太慢了,所以我想用一个包来实现它。有人有推荐吗?
最好的 C++ 特征值计算包是什么?最好是小型且易于编译的。
【问题讨论】:
标签: c++ matrix eigenvalue
我无法向您提供任何细节,因为我自己没有使用过它,但我认为 ARPACK 可能会有所帮助,尤其是 ARPACK++,它是 C++ 改编版,因为原始包位于 Fortran77 中。我认为 MATLAB 函数 eigs() 使用它来找到最大的特征值(和相应的特征向量)。据我所知,t 应该也可以与 STL 交互。
MATLAB 使用 Fortran77 例程 DSAUPD、DSEUPD、DNAUPD、DNEUPD、ZNAUPD 和 ZNEUPD。它们似乎是 ARPACK++ 中要寻找的。p>
【讨论】:
至少如果记忆有用,一种可能性是Boost::uBlas。虽然 Boost 整体相当大,但 uBlas 本身就更合理一些。此外,如果内存服务它是一个仅标头库,因此使用它非常容易(您不必先构建库,为链接器设置任何东西等)
编辑:我应该补充一点,通常计算特征值/向量非常慢,即使使用相当优化的代码也是如此。根据您正在做什么,通常值得研究一些方法(例如)让您只计算矩阵子集的特征值(例如,Landmark Multidimensional Scaling)。
【讨论】: