Sub Ex_Dgeqp3()
Const M = 3, N = 3, K = N
Dim A(M - 1, N - 1) As Double, Jpvt(N - 1) As Long, Tau(N - 1) As Double
Dim Info As Long, I 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
For I = 0 To N - 1
Jpvt(I) = 1
Next
'-- Compute QR factorization of A
Call
Dgeqp3(M, N, A(), Jpvt(), 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 "Jpvt =", Jpvt(0), Jpvt(1), Jpvt(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 Dgeqp3(M As Long, N As Long, A() As Double, Jpvt() As Long, Tau() As Double, Info As Long)
QR分解 (ピボット選択付き)