7

次の線形方程式系を解きたいと思います。

 Ax = b

A はn x m行列 (正方ではない)、b と x は両方ともn x 1ベクトルです。A と b が既知の場合、n は 50 ~ 100 のオーダーで、m は約 2 です (つまり、A は最大 [100x2] になる可能性があります)。

私はの解決策を知っていますx$x = \inv(A^T A) A^T b$

uBLAS (Boost)、Lapack、Eigen など、いくつかの解決方法を見つけましたが、これらのパッケージを使用した場合の 'x' の CPU 計算時間がどれほど速いかはわかりません。また、これが「x」を解く理由が数値的に速いかどうかもわかりません

私にとって重要なのは、私が初心者であるため、CPU の計算時間ができるだけ短く、適切なドキュメントであるということです。

正規方程式を解いた後、回帰を使用して近似を改善し、後でカルマン フィルターを適用Ax = bしたいと考えています。

私の質問は、上記のニーズに対してどの C++ ライブラリがより堅牢で高速かということです。

4

5 に答える 5

7

方程式よりも多くの未知数があるため、これは最小二乗解です。m が実際に 2 に等しい場合、単純な線形最小二乗法で十分であることがわかります。数式は閉じた形式で書き出すことができます。ライブラリは必要ありません。

m が 1 桁の場合でも、A(転置)*A*X = A(転置)*b を使用して簡単に解決できると思います。係数を解く単純な LU 分解で十分です。それは、あなたが考えているよりもはるかに簡単な問題でなければなりません。

于 2011-01-03T14:17:26.463 に答える
7

最適化された BLAS バインディングで使用しない限り、uBlas は最適化されません。

以下は、マルチスレッドと SIMD 用に最適化されています。

  1. インテル MKL. C インターフェイスを備えた FORTRAN ライブラリ。無料ではありませんが、とても良いです。
  2. 固有。真の C++ ライブラリ。無料でオープンソース。使いやすくて良い。
  3. アトラス。FORTRAN と C。フリーでオープン ソース。Windows フレンドリーではありませんが、それ以外は優れています。

ところで、あなたが何をしているのか正確にはわかりませんが、通常、正規方程式は線形回帰を行うための適切な方法ではありません。マトリックスが適切に調整されていない限り、QR または SVD を優先する必要があります。

于 2011-01-03T14:04:37.677 に答える
2

ライセンスが問題にならない場合は、gnu Scientific Library を試すことができます。

http://www.gnu.org/software/gsl/

後で必要に応じて最適化されたライブラリ (たとえば、インテル、ATLAS、または ACML (AMD チップ) ライブラリ) と交換できる blas ライブラリが付属しています。

于 2011-01-03T14:14:29.447 に答える
1

MATLAB にアクセスできる場合は、その C ライブラリを使用することをお勧めします。

于 2011-01-03T13:42:30.117 に答える
-1

本当に専門化する必要がある場合は、Skilling メソッドを使用して逆行列を (任意の精度で) 近似できます。順序 (N^2) 操作のみを使用します (通常の逆行列の順序 N^3 ではなく、LU 分解など)。

ここにリンクされているギブスの論文で説明されています(約27ページ):

http://www.inference.phy.cam.ac.uk/mng10/GP/thesis.ps.gz

于 2011-01-03T14:24:32.593 に答える