最も広く使用されている C++ ベクトル/行列数学/線形代数ライブラリと、それらのコストと利点のトレードオフは何ですか? [closed] 質問する

最も広く使用されている C++ ベクトル/行列数学/線形代数ライブラリと、それらのコストと利点のトレードオフは何ですか? [closed] 質問する

多くのプロジェクトでは、徐々に行列計算を行う必要性に迫られ、最初にいくつかのベクトル クラスを構築し、徐々に機能を追加していき、最終的には中途半端なカスタム線形代数ライブラリを構築し、それに依存するという罠に陥っているようです。

関連するライブラリ (OpenCV、OpenSceneGraph など) への依存関係を構築せずに、これを回避したいと思います。

一般的に使用されている行列数学/線形代数ライブラリにはどのようなものがありますか。また、あるライブラリを他のライブラリよりも使用する理由は何でしょうか。何らかの理由で使用しない方がよいライブラリはありますか。私は特にこれを幾何学/時間コンテキスト*(2,3,4 次元)*で使用していますが、将来的にはより高次元のデータを使用する可能性があります。

API、速度、メモリ使用量、広さ/完全性、狭さ/特異性、拡張性、成熟度/安定性のいずれかに関して違いを探しています。

アップデート

最終的に私は Eigen3 を使用しましたが、非常に満足しています。

ベストアンサー1

かなりの数のプロジェクトが汎用グラフィックツールキットこれには GMTL が使われています。これは非常に小さく、非常に機能的で、広く使用されているため信頼性も高いです。OpenSG、VRJuggler、その他のプロジェクトはすべて、独自の手作業による vertor/matrix 計算の代わりにこれを使用するように切り替えました。

とてもいいと思います。すべてをテンプレート経由で行うので、非常に柔軟で、非常に高速です。


編集:

コメントでの議論と編集の後、特定の実装の利点と欠点、そして状況に応じてどちらか一方を選択する理由について、さらに情報を提供しようと思いました。

GMTL-

利点: グラフィック エンジン専用に設計されたシンプルな API。他のパッケージには含まれていない、レンダリング向けのプリミティブ タイプ (平面、AABB、複数の補間を含む四次元など) が多数含まれています。メモリ オーバーヘッドが非常に低く、非常に高速で、使いやすいです。

欠点: API はレンダリングとグラフィックスに特化しています。汎用 (NxM) マトリックス、マトリックス分解と解決などは、従来のグラフィックス/ジオメトリ アプリケーションの領域外であるため、含まれていません。

アイゲン-

利点:クリーンなAPI、かなり使いやすいです。ジオメトリモジュールクォータニオンと幾何学的変換を装備。メモリオーバーヘッドが低い。完全、高性能大規模な NxN 行列の解法やその他の汎用数学ルーチン。

欠点: 希望する範囲よりも少し広い可能性があります (?)。GMTL と比較すると、ジオメトリ/レンダリング固有のルーチンが少なくなります (例: オイラー角の定義など)。

IMSL-

利点: 非常に完全な数値ライブラリ。非常に高速 (おそらく最速のソルバー)。これまでで最大かつ最も完全な数学 API。商用サポートされ、成熟しており、安定しています。

欠点: コスト - 安価ではありません。幾何学/レンダリング固有のメソッドがほとんどないため、線形代数クラスをベースに独自のメソッドを作成する必要があります。

NT2-

利点: MATLAB に慣れている場合、より使い慣れた構文を提供します。大規模な行列などの完全な分解と解決を提供します。

欠点: 数学的であり、レンダリングに重点が置かれていません。おそらく Eigen ほどパフォーマンスは高くありません。

ラパック-

利点: 非常に安定した、実績のあるアルゴリズム。長い間使われてきました。完全な行列の解決など。難解な数学のための多くのオプション。

欠点: 場合によってはそれほどパフォーマンスが高くありません。Fortran から移植されており、使用方法に奇妙な API があります。

個人的には、これは1つの質問に集約されます。これをどのように使うつもりかということです。レンダリングとグラフィックスだけに焦点を当てているのであれば、汎用グラフィックツールキットはパフォーマンスが良く、多くの便利なレンダリング操作をすぐにサポートしており、独自の実装は必要ありません。汎用的な行列解法(つまり、大きな行列のSVDまたはLU分解)が必要な場合は、アイゲンは、それを処理し、いくつかの幾何学的演算を提供し、大規模な行列ソリューションで非常にパフォーマンスが高いためです。独自のグラフィックス/幾何学的演算 (行列/ベクトルの上に) をさらに記述する必要があるかもしれませんが、それほどひどいことではありません。

おすすめ記事