線形方程式 Ax = b の解はx = A-1bと記述できますが、解を求める際に最初にAの逆行列を計算し次にA-1bを計算するというやり方は良い方法ではありません。このような方程式を解くためには、nAG数値計算ライブラリのチャプターF04及びF07ルーチンをご利用下さい。これらのルーチンを使用することにより速く実行することができ、また数値的に安定しており正確です。 同様に、最小2乗問題を解く場合も疑似逆行列を計算するのではなくnAG数値計算ライブラリのチャプターF04及びF08ルーチンをご利用下さい。
n次の非特異正方行列に関しては、行列が正定値の実対称行列か正定値の複素エルミート行列のどちらかであることがわかっている場合は適切なルーチンを使用しないと無駄で不経済な処理となってしまいます。正定値であることがわかっていない場合は一般的なルーチンを使用する必要があります。nAG数値計算ライブラリのほとんどのルーチンで、逆行列は以下の線形方程式を解いて求められています。
- Axi = ei (i=1,2,...,n ) ei : 恒等行列のi番目の列
逆行列を求める代表的なnAG数値計算ライブラリルーチンに以下があります。それぞれルーチンを呼び出すサンプルソースコードが提供されておりサンプルソースコードを説明しているWebページを参照いただけます。
ルーチン名 | 用途 | ルーチンを呼び出すサンプルソースコード |
F07AJ | 実行列の逆行列 |
Fortranのサンプルソースコード C言語のサンプルソースコード |
F07AW | 複素行列の逆行列 |
Fortranのサンプルソースコード C言語のサンプルソースコード |
F01BL | 実行列の疑似逆行列 | Fortranのサンプルソースコード |
他にも元となる行列の種類によって逆行列を求める多様なルーチンが用意されています。
以下は元となる行列の種類と使用するルーチン(Fortranライブラリの場合)の対応表です。
実行列の場合
nxn行列 ランクn |
実行列 | 帯行列 | 対称行列 | 正定値 | 保証精度 | 三角行列 | 線形配列 | 1つの三角形要素が線形配列 | 使用する ルーチン名 |
○ | ○ | ○ | - | - | - | - | - | - | 注1 |
○ | ○ | × | ○ | ○ | ○ | - | - | - | F01ABF |
○ | ○ | × | ○ | ○ | × | - | - | ○ | F07GDF 及び F07GJF |
○ | ○ | × | ○ | ○ | × | - | - | × | F01ADF あるいは (F07FDF 及び F07FJF) |
○ | ○ | × | ○ | × | - | - | - | ○ | F07PDF 及び F07PJF |
○ | ○ | × | ○ | × | - | - | - | × | F07MDF 及び F07MJF |
○ | ○ | × | × | - | - | ○ | ○ | - | F07UJF |
○ | ○ | × | × | - | - | ○ | × | - | F07TJF |
○ | ○ | × | × | - | × | × | - | - | F07ADF 及び F07AJF |
○ | ○ | × | × | - | ○ | × | - | - | F04AEF |
複素行列の場合
nxn行列 ランクn |
実行列 | 帯行列 | エルミート | 対称行列 | 三角行列 | 線形配列 | 正定値 | 1つの三角形要素が線形配列 | 使用する ルーチン名 |
○ | × | ○ | - | - | - | - | - | - | 注1 |
○ | × | × | ○ | - | - | - | ○ | ○ | F07GRF 及び F07GWF |
○ | × | × | ○ | - | - | - | ○ | × | F07FRF 及び F07FWF |
○ | × | × | ○ | - | - | - | × | ○ | F07PRF 及び F07PWF |
○ | × | × | ○ | - | - | - | × | × | F07MRF 及び F07MWF |
○ | × | × | × | ○ | - | - | - | ○ | F07QRF 及び F07QWF |
○ | × | × | × | ○ | - | - | - | × | F07NRF 及び F07NWF |
○ | × | × | × | × | ○ | ○ | - | - | F07UWF |
○ | × | × | × | × | ○ | × | - | - | F07TWF |
○ | × | × | × | × | × | - | - | - | F07ANF あるいは (F07ARF 及び F07AWF) |
注1: | 帯行列Aの逆行列は一般にAとは同じ形をしていません。このような行列を求める関数は特別には提供されていません。行列はフル行列として処理されるか、または方程式Ax=B(この場合Bは恒等行列へ初期化されています)を解く必要があります。後者についてはF04チャプターのセクション4を参照下さい。 |
疑似行列の場合
nxn行列 ランクn |
複素行列 | フルランク | m<n の mxn行列 | 効率性より 信頼性重視 |
使用する ルーチン名 |
× | ○ | ○ | ○ | - | F01RJF 及び F01RKF |
× | ○ | ○ | × | - | F08ASF 及び (F08AUF あるいは F08ATF) |
× | ○ | × | - | - | F08KPF |
× | × | ○ | ○ | - | F01QJF 及び F01QKF |
× | × | ○ | × | - | F08AEF 及び (F08AGF あるいは F08AFF) |
× | × | × | ○ | - | F08KBF |
× | × | × | × | ○ | F08KBF |
× | × | × | × | × | F01BLF |
逆行列を求める方法についての詳細はチャプターF01を参照下さい。