私はこれまでにオンライン調査から以下を収集しました:
私は少しArmadilloを使用しましたが、インターフェースが十分に直感的であることがわかり、Ubuntuのバイナリパッケージを見つけるのは簡単でした(そして、他のLinuxディストリビューションを想定しています)。私はソースからそれをコンパイルしていませんが、私の希望はそれがそれほど難しくないことです。それは私の設計基準のほとんどを満たし、密な線形代数を使用します。LAPACKまたはMKLルーチンを呼び出すことができます。通常、Armadilloをコンパイルする必要はありません。純粋にテンプレートベースのライブラリです。ヘッダーとBLAS / LAPACKまたはMKLなどへのリンクを含めるだけです。
Eigenについて良いことを聞いたことがありますが、使用していません。高速であると主張し、テンプレートを使用し、密な線形代数をサポートします。依存関係としてLAPACKやBLASはありませんが、LAPACKでできることはすべて実行できるようです(さらに、LAPACKではできないこともできます)。多くのプロジェクトでEigenが使用されていますが、これは有望です。Ubuntu用のバイナリパッケージがありますが、ヘッダーのみのライブラリとして他の場所でも使用するのは簡単です。
マトリックステンプレートライブラリのバージョン4にも有望に見える、とテンプレートを使用しています。密および疎線形代数の両方をサポートし、UMFPACKを疎ソルバーとして呼び出すことができます。機能は、彼らのウェブサイトからやや不明瞭です。Ubuntuのバイナリパッケージがあり、Webサイトからダウンロードできます。
Argonne National Laboratoryのチームによって作成されたPETScは、スパースおよびデンスの線形ソルバーにアクセスできるため、マトリックスライブラリとして機能できると考えています。Cで書かれていますが、C ++バインディングがあります(そうでなくても、C ++からCを呼び出しても問題ありません)。ドキュメントは非常に徹底的です。このパッケージは、私が今やりたいこと(混合整数線形プログラムをセットアップするための行列の乗算とインデックス付け)に対して少しやり過ぎですが、将来、またはさまざまなニーズを持つ他の人々のための行列形式として役立つ可能性があります私よりも。
サンディア国立研究所のチームが作成したTrilinosは、Epetraコンポーネントを介して密行列と疎行列のオブジェクト指向C ++インターフェイスを提供し、Tpetraコンポーネントを介して密行列と疎行列のテンプレートインターフェイスを提供します。また、線形ソルバーと固有値ソルバーの機能を提供するコンポーネントもあります。ドキュメントは、PETScほど洗練されていたり、目立っているようには見えません。トリリノスは、PETScのサンディアのアナログのようです。PETScは、Trilinosソルバーのいくつかを呼び出すことができます。TrilinosのバイナリはLinuxで利用可能です。
Blitzは、Linuxバイナリを含むC ++オブジェクト指向ライブラリです。メーリングリストはアクティブですが、積極的にメンテナンスされているようには見えません(2012-06-29:昨日新しいバージョンが登場しました!)。BLASを超えた数値線形代数の方法ではあまり効果がなく、密なマトリックスライブラリのように見えます。テンプレートを使用します。
Boost :: uBLASはC ++オブジェクト指向ライブラリであり、Boostプロジェクトの一部です。テンプレートと密な数値線形代数をサポートします。それほど高速ではないと聞いたことがあります。
テンプレート数値Toolkitは、 NISTが開発したC ++オブジェクト指向のライブラリです。その作者であるRoldan Pozoは、時々パッチを提供しているようですが、もはや活発に開発されていないようです(最終更新は2010年でした)。密な線形代数に焦点を当て、いくつかの基本的な行列分解と固有値ソルバーのインターフェイスを提供します。
Jack Poulsonが開発したElementalは、FLAMEに似たスタイルで記述された分散メモリ(並列)高密度線形代数ソフトウェアパッケージです。プロジェクトの機能と背景のリストについては、彼のドキュメントを参照してください。FLAME自体には、オブジェクト指向のCで記述されているlibflameと呼ばれる、シーケンシャルおよび共有メモリの密な線形代数のライブラリが関連付けられています。線形代数ライブラリは、より科学的であり、黒人の芸術ではありません。
リストに追加できるライブラリは他にもあります。スパース線形代数パッケージを「マトリックスライブラリ」として数えている場合、Cで知っている最高のフリー代数は、オブジェクト指向スタイルでプログラムされたSuiteSparseです。SuiteSparseを使用しましたが、かなり簡単に手に入れることができました。スパース問題を多数の小さくて密度の高い線形代数の部分問題に分解するアルゴリズムの一部は、BLASとLAPACKに依存しています。このパッケージの主執筆者であるティム・デイビスは、信じられないほど役に立ち、万能の男です。
ハーウェルサブルーチンライブラリフォームに必要事項を記入して、ダウンロードしたいファイルごとに電子メールを受信するこのプロセスを通過する必要があるものの、そのスパース線形代数ルーチンのために有名であり、学術的なユーザーのための無料です。サブルーチンには多くの場合依存関係があるため、1つのソルバーを使用するには5つまたは6つのファイルをダウンロードする必要があり、特にフォームの承認が即座に行われないため、プロセスは多少面倒になります。
他のスパース線形代数ソルバーもありますが、私が知る限り、MUMPSと他のパッケージは主に線形システムのソリューションに焦点を当てており、線形システムの解決は今のところ私の懸念事項ではありません。(たぶん後で、その機能が必要になるでしょうし、他の人にとっても役に立つかもしれません。)