XLPack 6.1
Excel VBA 数値計算ライブラリ・リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ Zgetri()

Sub Zgetri ( N As  Long,
A() As  Complex,
IPiv() As  Long,
Info As  Long 
)

行列の逆行列 (複素行列)

目的
本ルーチンはZgetrfにより計算されたLU分解を用いて行列の逆行列を求める.

本ルーチンでは, Uの逆行列を求め, inv(A)についての連立方程式 inv(A)*L = inv(U) を解くことによりinv(A)を求める.
引数
[in]N行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in,out]A()配列 A(LA1 - 1, LA2 - 1) (LA1 >= N, LA2 >= N)
[in] Zgetrfにより計算された分解 A = P*L*U のLおよびU.
[out] Info = 0の場合, 元の行列Aの逆行列.
[in]IPiv()配列 IPiv(LIPiv - 1) (LIPiv >= N)
Dgetrfによるピボットインデックス. 1 <= i <= nに対して, 行列の第i行は第IPiv(i-1)行と交換されたことを表す.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N < 0)
= -2: パラメータ A() の誤り.
= -3: パラメータ IPiv() の誤り.
= i > 0: Uのi番目の対角要素が0である. 行列は特異で, その逆行列を求めることはできなかった.
出典
LAPACK
使用例
行列 A の逆行列を求める. ただし,
( 0.2-0.11i -0.93-0.32i 0.81+0.37i )
A = ( -0.8-0.92i -0.29+0.86i 0.64+0.51i )
( 0.71+0.59i -0.15+0.19i 0.2+0.94i )
とする.
Sub Ex_Zgetri()
Const N = 3
Dim A(N - 1, N - 1) As Complex, IPiv(N - 1) As Long
Dim Info As Long
A(0, 0) = Cmplx(0.2, -0.11): A(0, 1) = Cmplx(-0.93, -0.32): A(0, 2) = Cmplx(0.81, 0.37)
A(1, 0) = Cmplx(-0.8, -0.92): A(1, 1) = Cmplx(-0.29, 0.86): A(1, 2) = Cmplx(0.64, 0.51)
A(2, 0) = Cmplx(0.71, 0.59): A(2, 1) = Cmplx(-0.15, 0.19): A(2, 2) = Cmplx(0.2, 0.94)
Call Zgetrf(N, N, A(), IPiv(), Info)
If Info = 0 Then Call Zgetri(N, A(), IPiv(), Info)
Debug.Print "Inv(A) ="
Debug.Print Creal(A(0, 0)), Cimag(A(0, 0)), Creal(A(0, 1)), Cimag(A(0, 1))
Debug.Print Creal(A(0, 2)), Cimag(A(0, 2))
Debug.Print Creal(A(1, 0)), Cimag(A(1, 0)), Creal(A(1, 1)), Cimag(A(1, 1))
Debug.Print Creal(A(1, 2)), Cimag(A(1, 2))
Debug.Print Creal(A(2, 0)), Cimag(A(2, 0)), Creal(A(2, 1)), Cimag(A(2, 1))
Debug.Print Creal(A(2, 2)), Cimag(A(2, 2))
Debug.Print "Info =", Info
End Sub
実行結果
Inv(A) =
-0.201994189100174 -0.220248055307507 -0.368148317320952 0.290272208608198
0.360511523756756 -0.418803146203832
-0.614836963994613 0.455294217428579 6.83276126510658E-02 -0.256899969150471
9.45427369503751E-02 -0.502999571841184
0.47052389723088 9.18669160683443E-02 4.42160986558556E-02 -0.409830677026182
8.10655554407012E-02 -0.424831215613866
Info = 0