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

◆ Zgeqp3()

Sub Zgeqp3 ( M As  Long,
N As  Long,
A() As  Complex,
Jpvt() As  Long,
Tau() As  Complex,
Info As  Long 
)

QR分解 (ピボット選択付き) (複素行列)

目的
本ルーチンは行列AのQR分解をピボット選択付きで計算する.
A * P = Q * R
計算にはレベル3 BLASを用いる.
引数
[in]M行列 A の行数. (M >= 0) (M = 0 の場合, 処理を行わずに戻る)
[in]N行列 A の列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in,out]A()配列 A(LA1 - 1, LA2 - 1) (LA1 >= M, LA2 >= N)
[in] M×N行列 A.
[out] 上三角部分にmin(M, N)×N上台形行列Rが入る. 対角下の要素は, 配列Tau()と合わせて, min(M, N)個の基本鏡映変換の積としてユニタリ行列Qを表す.
[in,out]Jpvt()配列 Jpvt(LJpvt - 1) (LJpvt >= N)
[in] Jpvt(j-1) <> 0 の場合, Aの第j列はA*Pの前(先頭列)に入れ替えられる. Jpvt(j-1) = 0 の場合, Aの第j列はフリーな列である.
[out] Jpvt(j-1) = k の場合, A*Pの第j列は第k列であったことを示す.
[out]Tau()配列 Tau(LTau - 1) (LTau >= min(M, N))
基本鏡映変換のスカラー因子.
[out]Info= 0: 正常終了.
= -1: パラメータ M の誤り. (M < 0)
= -2: パラメータ N の誤り. (N < 0)
= -3: パラメータ A() の誤り.
= -4: パラメータ Jpvt() の誤り.
= -5: パラメータ Tau() の誤り.
出典
LAPACK
使用例
行列Aの行列AのQR分解を求める. ただし,
( 0.20-0.11i -0.93-0.32i 0.81+0.37i )
A = ( -0.80-0.92i -0.29+0.86i 0.64+0.51i )
( 0.71+0.59i -0.15+0.19i 0.20+0.94i )
とする.
Sub Ex_Zgeqp3()
Const M = 3, N = 3, K = N
Dim A(M - 1, N - 1) As Complex, Jpvt(N - 1) As Long, Tau(N - 1) As Complex
Dim Info As Long, I 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)
For I = 0 To N - 1
Jpvt(I) = 1
Next
Call Zgeqp3(M, N, A(), Jpvt(), Tau(), Info)
Debug.Print "R ="
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, 1)), Cimag(A(1, 1)), Creal(A(1, 2)), Cimag(A(1, 2))
Debug.Print Creal(A(2, 2)), Cimag(A(2, 2))
Debug.Print "Jpvt =", Jpvt(0), Jpvt(1), Jpvt(2)
Debug.Print "Info =", Info
Call Zungqr(M, N, K, A(), Tau(), Info)
Debug.Print "Q ="
Debug.Print Creal(A(0, 0)), Cimag(A(0, 0)), Creal(A(0, 1)), Cimag(A(0, 1))
Debug.Print Creal(A(1, 0)), Cimag(A(1, 0)), Creal(A(1, 1)), Cimag(A(1, 1))
Debug.Print Creal(A(2, 0)), Cimag(A(2, 0)), Creal(A(2, 1)), Cimag(A(2, 1))
Debug.Print Creal(A(0, 2)), Cimag(A(0, 2))
Debug.Print Creal(A(1, 2)), Cimag(A(1, 2))
Debug.Print Creal(A(2, 2)), Cimag(A(2, 2))
Debug.Print "Info =", Info
End Sub
実行結果
R =
-1.54618886297891 0 0.455571771900423 0.580588841049134
0.105614523497074 -0.57774313435356
1.14235325460067 0 -0.16000635361559 -0.558214300362838
1.30543219081149 0
Jpvt = 1 2 3
Info = 0
Q =
-0.129350304344243 7.11426673893335E-02 -0.726366393673366 -0.242754372725663
0.517401217376971 0.595011399983517 -0.157793930669391 0.252577062211036
-0.459193580422062 -0.381583397815516 -0.142116660471961 0.551879456556921
0.614237041991267 -0.119926029506194
5.77211185374505E-02 0.535006158572045
0.105825585638305 0.554588344523916
Info = 0