|
|
◆ Dgeqrf()
| Sub Dgeqrf |
( |
M As |
Long, |
|
|
N As |
Long, |
|
|
A() As |
Double, |
|
|
Tau() As |
Double, |
|
|
Info As |
Long |
|
) |
| |
QR分解
- 目的
- 本ルーチンはm×n行列AのQR分解を計算する.
- 引数
-
| [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が入る(M >= Nであれば, Rは上三角行列である). 対角より下の要素は, 配列Tau()と合わせて, min(M, N)個の基本鏡映変換の積として直交行列Qを表す (詳細を参照のこと). |
| [out] | Tau() | 配列 Tau(LTau - 1) (LTau >= min(M, N))
基本鏡映変換のスカラー因子 (詳細を参照のこと). |
| [out] | Info | = 0: 正常終了.
= -1: パラメータ M の誤り. (M < 0)
= -2: パラメータ N の誤り. (N < 0)
= -3: パラメータ A() の誤り.
= -4: パラメータ Tau() の誤り. |
- 詳細
- 行列Qは基本鏡映変換の積で表される.
Q = H(1) H(2) . . . H(k), ただし k = min(M, N).
各H(i)は次のように表される. ただし, tauは実数スカラー, また, vは実数ベクトルで, v(1〜i-1) = 0, v(i) = 1 である. v(i+1〜M)はA(i〜M-1, i-1)に, tauはTau(i-1)に格納される.
- 出典
- LAPACK
- 使用例
- 行列Aの行列AのQR分解を求める. ただし,
( 0.20 -0.11 -0.93 )
A = ( -0.32 0.81 0.37 )
( -0.80 -0.92 -0.29 )
である. Sub Ex_Dgeqrf()
Const M = 3, N = 3, K = N
Dim A(M - 1, N - 1) As Double, Tau(N - 1) As Double, Info As Long
A(0, 0) = 0.2: A(0, 1) = -0.11: A(0, 2) = -0.93
A(1, 0) = -0.32: A(1, 1) = 0.81: A(1, 2) = 0.37
A(2, 0) = -0.8: A(2, 1) = -0.92: A(2, 2) = -0.29
'-- Compute QR factorization of A
Call Dgeqrf(M, N, A(), Tau(), Info)
Debug.Print "R ="
Debug.Print A(0, 0), A(0, 1), A(0, 2)
Debug.Print A(1, 1), A(1, 2)
Debug.Print A(2, 2)
Debug.Print "Info =", Info
'-- Compute Q
Call Dorgqr(M, N, K, A(), Tau(), Info)
Debug.Print "Q ="
Debug.Print A(0, 0), A(0, 1), A(0, 2)
Debug.Print A(1, 0), A(1, 1), A(1, 2)
Debug.Print A(2, 0), A(2, 1), A(2, 2)
Debug.Print "Info =", Info
End Sub
Sub Dorgqr(M As Long, N As Long, K As Long, A() As Double, Tau() As Double, Info As Long) QR分解の行列Qの生成
Sub Dgeqrf(M As Long, N As Long, A() As Double, Tau() As Double, Info As Long) QR分解
- 実行結果
R =
-0.884533775499839 -0.514169173181655 8.18510293279503E-02
-1.11813687057967 -0.635776616242947
-0.821576839520579
Info = 0
Q =
-0.226107815823067 0.202352390539057 0.952852961199602
0.361772505316908 -0.890778487093709 0.275016983707865
0.904431263292269 0.406899492472248 0.128206446816755
Info = 0
|