3

バージョン Boost boost_1_37_0 と MTL mtl4-alpha-1-r6418 でマトリックスを反転しようとしています。マトリックス反転コードが見つからないようです。私は例をグーグルで検索しましたが、上記のリリースでは欠落していると思われる lu.h を参照しているようです。ヒントはありますか?

@Mattは lu.hをコピーすることを提案しましたが、それは MTL4 ではなく MTL2 からのもののようです。VS05 以降の MTL2 でコンパイルできません。

では、MTL4 で行列反転を行う方法はありますか?

更新: Matt のことをよく理解していると思うので、この ITL パスをたどっています。

4

3 に答える 3

4

lu_factorを使用しているように見えますlu_inverse。ただし、ピボットと何をしなければならないかは覚えていません。ドキュメントから。

そして、ええ、あなたが言ったように、彼らのドキュメントには、どういうわけかlu.hが必要だと書かれているようです:

行列を反転するにはどうすればよいですか?

自問すべき最初の質問は、行列の逆行列を本当に計算したいのか、それとも線形システムを本当に解きたいのかということです。線形連立方程式を解くために、逆行列を明示的に計算する必要はありません。むしろ、行列の三角因子を計算し、その因子を使用して前方および後方三角解を実行する方が効率的です。線形システムの解決については、以下で詳しく説明します。本当に行列を反転させたい場合は、lu_inverse()mtl/lu.h に関数があります。

他に何もなければ、彼らのサイトで lu.h を見ることができます。

于 2008-12-03T16:03:17.673 に答える
0

MTL4 では、これを使用します。

mtl::matrix::inv(Matrix const &A, MatrixOut &Inv);

ここにapiへのリンクがあります。

于 2012-10-04T11:03:28.853 に答える
0

行列演算に boost や MTL を使用したことはありませんが、 JAMA/ TNTを使用したことがあります。

このページhttp://wiki.cs.princeton.edu/index.php/TNTは、行列を逆にする方法を示しています。基本的な方法はライブラリに依存しません:

  1. 行列 M を XY に因数分解します。ここで、X と Y は適切な因数分解です (LU は問題ありませんが、数値的な安定性のために、QR または SVD を使用する必要があると思います)。

  2. M が因数分解されているという前提条件で、N について I = MN = (XY)N を解きます。ライブラリには、このためのルーチンが必要です。

于 2008-12-10T18:46:05.937 に答える