2

タイプ Ax=b の数千回の SMALL 線形システムを解く必要があります。ここで、A は 3x3 以上で最大 8x8 の行列です。私はこのhttp://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/を認識しているので、行列が小さくても行列を反転するのは賢明だとは思いませんか? では、それを行う最も効率的な方法は何ですか?私は Fortran でプログラミングしているので、おそらく lapack ライブラリを使用する必要がありますか? 私の行列は完全で、一般的に非対称です。ありがとうございます。

4

2 に答える 2

2

警告: 私はこれを詳しく調べたわけではありませんが、喜んで共有したい経験があります。

私の経験では、3x3 システムを解く最速の方法は、基本的にCramer のルールを使用することです。同じ行列 A で複数のシステムを解く必要がある場合は、A の逆行列を事前に計算する必要があります。これは 2x2 と 3x3 にのみ当てはまります。

同じ行列を使用して複数の 4x4 連立方程式を解かなければならない場合でも、逆行列を使用すると、LU の前方および後方置換よりも著しく高速になります。使用する操作が少ないことを覚えているようで、実際には違いはさらに大きくなります (これも私の経験では)。行列のサイズが大きくなるにつれて、差が縮小し、漸近的に差がなくなります。差分行列を使用してシステムを解いている場合、逆行列を計算する利点はないと思います。

すべての場合において、逆関数を使用してシステムを解くことは、LU 分解を使用するよりもはるかに精度が低くなる可能性があります。A はかなり悪条件です。したがって、精度が問題になる場合は、LU 因数分解が間違いなく適しています。

于 2013-04-02T09:05:22.327 に答える