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

◆ Zsytri()

Sub Zsytri ( Uplo As  String,
N As  Long,
A() As  Complex,
IPiv() As  Long,
Info As  Long 
)

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

目的
本ルーチンはZsytrfにより計算された分解 A = U*D*U^T または A = L*D*L^T を用いて, 複素対称行列Aの逆行列を求める.
引数
[in]Uplo分解形が上三角行列あるいは下三角行列のどちらで格納されているかを指定.
= "U": 上三角, 分解形は A = U*D*U^T.
= "L": 下三角, 分解形は A = L*D*L^T.
[in]N行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in,out]A()配列 A(LA1 - 1, LA2 - 1) (LA1 >= N, LA2 >= N)
[in] Zsytrfにより求められたUまたはLを得るために使われるブロック対角行列Dおよび乗数.
[out] Info = 0の場合, 元の行列Aの(対称な)逆行列. Uploに従い, 逆行列の上あるいは下三角部分が出力され, A()の対角要素より下あるいは上の残りの部分は参照されない.
[in]IPiv()配列 IPiv(LIPiv - 1) (LIPiv >= N)
Zsytrfにより求められた行および列の交換とDのブロック構造の情報.
[out]Info= 0: 正常終了.
= -1: パラメータ Uplo の誤り. (Uplo <> "U"および"L")
= -2: パラメータ N の誤り. (N < 0)
= -3: パラメータ A() の誤り.
= -4: パラメータ IPiv() の誤り.
= i > 0: Dのi番目の要素が0である. 行列は特異で, その逆行列を求めることはできなかった.
出典
LAPACK
使用例
行列 A の逆行列を求める. ただし,
( 0.20-0.11i -0.93-0.32i -0.80-0.92i )
A = ( -0.93-0.32i 0.81+0.37i -0.29+0.86i )
( -0.80-0.92i -0.29+0.86i 0.64+0.51i )
とする.
Sub Ex_Zsytri()
Const N = 3
Dim A(N - 1, N - 1) As Complex, IPiv(N - 1) As Long, Info As Long
A(0, 0) = Cmplx(0.2, -0.11)
A(1, 0) = Cmplx(-0.93, -0.32): A(1, 1) = Cmplx(0.81, 0.37)
A(2, 0) = Cmplx(-0.8, -0.92): A(2, 1) = Cmplx(-0.29, 0.86): A(2, 2) = Cmplx(0.64, 0.51)
Call Zsytrf("L", N, A(), IPiv(), Info)
If Info = 0 Then Call Zsytri("L", 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.719227845649432 2.10409854531818E-02 0 0
0 0
-0.530264806881645 0.461068985285655 0.415967871341667 0.574878197201315
0 0
-0.378362108041106 0.215383726745448 -0.459100384344751 -0.118538953519092
0.392991440632119 -2.46277479810784E-02
Info = 0