13


3

私はいくつかの基本的な線形代数演算を実装しようとしています、そしてこれらの演算のうちの1つは三角(上および/または下)行列の反転です。 それを行うための簡単で安定したアルゴリズムはありますか?

ありがとうございました。

5 Answer


14


はい、 back replacementを使用してください。 行列を反転するための標準的なアルゴリズムは、そのLU分解(下三角行列と上三角行列への分解)を見つけ、三角部分に逆置換を使用してから、元の行列の逆行列を求めるために結果を組み合わせることです。


6


可能であれば反転しないでください。 これは数値線形代数の基本的な戒めの1つです。

行列L自体をメモリに保持して計算する方がはるかに速く、数値的に安定しています。

inv(L)b

inv(L)を使って何か他のことをする必要があるときはいつでもバック代入を使います。

それを反転するための慣習的なアルゴリズムは、システムを解くことを必要とすることに注意してください。

inv(L)[1 0 0 ...]、inv(L)[0 1 0 ....]、inv(L)[0 0 1 ....]

それから、まったく反転しない方がはるかに簡単です。


3


下三角行列Lが与えられた場合、後方置換により、任意の右辺bについてシステムL x = bをすばやく解くことができます。

Lを反転するには、右辺e1 =(1,0、…​、0)、e2 =(0,1、…​、0)、…​、en =(0)についてこのシステムを解くことができます。 、0、…​、1)を計算し、結果として得られた解ベクトルを単一の(必然的に下三角)行列にまとめます。

閉じた形の解に興味があるならば、逆行列の対角要素は元の対角要素の逆行列であり、逆行列の残りの要素に対する公式は対角要素から遠ざかるにつれてますます複雑になります。 。


1


単精度実数について話しているのなら、LAPACKルーチンのソースコード STRTRIとhttp://www.netlib.orgを見てください。 /lapack/single/strti2.f[STRTI2]


0


うわー、それは実質的に数値解析コースの内容の半分です。 標準的なアルゴリズムがそれを行います、そしてたくさんの缶詰のコード ここがあります。 これおよび他のほとんどの通常の数値解析問題のための究極の情報源は Numerical Recipesです。