(スパース) 行列の最大固有値を計算する必要があります。ベキ反復法を実装しましたが、収束が遅いのでパッケージを使いたいです。誰かお勧めはありますか?
最高の C++ 固有値計算パッケージは何ですか? 小さくてコンパイルしやすいものが望ましいです。
(スパース) 行列の最大固有値を計算する必要があります。ベキ反復法を実装しましたが、収束が遅いのでパッケージを使いたいです。誰かお勧めはありますか?
最高の C++ 固有値計算パッケージは何ですか? 小さくてコンパイルしやすいものが望ましいです。
私は自分で使用したことがないので詳細を提供することはできませんが、ARPACK、特に元のパッケージが Fortran77 にある C++ の適応である ARPACK++ が役立つと思います。MATLAB 関数 eigs() はこれを使用して、最大の固有値 (および対応する固有ベクトル) を見つけると思います。私が聞いたところによると、t は STL ともインターフェイスできるはずです。
MATLAB は、Fortran77 ルーチンの DSAUPD、DSEUPD、DNAUPD、DNEUPD、ZNAUPD、および ZNEUPD を使用します。それらは ARPACK++ で探すべきもののようです。
少なくともメモリが機能する場合、1つの可能性はBoost::uBlas
. Boost は全体としてかなり大きいですがuBlas
、それ自体はかなり合理的です。さらに、メモリが機能する場合、それはヘッダーのみのライブラリであるため、使用は非常に簡単です (最初にライブラリをビルドしたり、リンカー用に何かを設定したりする必要はありません)。
編集:かなり最適化されたコードを使用しても、固有値/ベクトルの計算は一般的にかなり遅いことを追加する必要があります。正確に何をしているかにもよりますが、(一例として) 行列のサブセットのみの固有値を計算する方法 (例: Landmark Multidimensional Scaling ) を調べる価値があることがよくあります。