私は線形代数の計算を行っており、基本的に2x2、2x1、3x1、1x2のさまざまな次元を処理できる非常に軽量で使いやすい行列クラスを探していました。そのようなクラスは、パフォーマンスのために、テンプレートを使用して実装でき、場合によっては特殊化を使用できると思います。使用可能な簡単な実装を知っている人はいますか?メモリが制限されている組み込み環境でこれを実行するため、「肥大化した」実装は必要ありません。
ありがとう
私は線形代数の計算を行っており、基本的に2x2、2x1、3x1、1x2のさまざまな次元を処理できる非常に軽量で使いやすい行列クラスを探していました。そのようなクラスは、パフォーマンスのために、テンプレートを使用して実装でき、場合によっては特殊化を使用できると思います。使用可能な簡単な実装を知っている人はいますか?メモリが制限されている組み込み環境でこれを実行するため、「肥大化した」実装は必要ありません。
ありがとう
Blitz++ -- またはBoost の uBLASを試すことができます
私は最近、さまざまな C++ マトリックス ライブラリを見てきましたが、Armadilloに一票です。
さらに、Armadillo はスタンドアロンで動作しますが、パフォーマンスを向上させるために利用可能な LAPACK (および BLAS) 実装と一緒に使用することを検討することをお勧めします。適切なオプションは、たとえばOpenBLAS (またはATLAS ) です。Armadillo の FAQを確認してください。いくつかの重要なトピックがカバーされています。
Google で簡単に検索すると、Armadillo が組み込みシステムで既に使用されていることを示すこのプレゼンテーションが掘り出されました。
マトリックス計算にはNewmatライブラリを使用します。オープンソースで使いやすいですが、軽量の定義に適合するかどうかはわかりません(Visual Studioが1.8MBの静的ライブラリにコンパイルする50を超えるソースファイルが含まれています)。
std::valarray はかなり軽量です。
手遅れかもしれませんが、別のオプションは次のとおりです。
CMLマトリックスはかなり優れていますが、組み込み環境には軽量ではない可能性があります。とにかくチェックしてください:http://cmldev.net/?p=418
私は十分に単純なライブラリを見つけることができなかったので、自分で書きました: http://koti.welho.com/aarpikar/lib/
一部の行または列をゼロに設定するだけで、さまざまな行列の次元 (2x2、3x3、3x1 など) を処理できるはずだと思います。内部的にはすべての操作が 4x4 行列で行われるため、これは最速のアプローチではありません。理論的には、1 ティックで 4x4 操作を処理できるようなプロセッサが存在する可能性があります。少なくとも、低レベルの行列計算を最適化するよりも、そのようなプロセッサの存在を信じたいと思います。:)
次のように、行列を配列に格納するのはどうですか
2x3 matrix = {2,3,val1,val2,...,val6}
これは非常に単純で、足し算も簡単です。ただし、独自の乗算関数を作成する必要があります。