1DGGQRF(1) LAPACK routine (version 3.2) DGGQRF(1)
2
3
4
6 DGGQRF - computes a generalized QR factorization of an N-by-M matrix A
7 and an N-by-P matrix B
8
10 SUBROUTINE DGGQRF( N, M, P, A, LDA, TAUA, B, LDB, TAUB, WORK, LWORK,
11 INFO )
12
13 INTEGER INFO, LDA, LDB, LWORK, M, N, P
14
15 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB(
16 * ), WORK( * )
17
19 DGGQRF computes a generalized QR factorization of an N-by-M matrix A
20 and an N-by-P matrix B:
21 A = Q*R, B = Q*T*Z,
22 where Q is an N-by-N orthogonal matrix, Z is a P-by-P orthogonal
23 matrix, and R and T assume one of the forms:
24 if N >= M, R = ( R11 ) M , or if N < M, R = ( R11 R12 ) N,
25 ( 0 ) N-M N M-N
26 M
27 where R11 is upper triangular, and
28 if N <= P, T = ( 0 T12 ) N, or if N > P, T = ( T11 ) N-P,
29 P-N N ( T21 ) P
30 P
31 where T12 or T21 is upper triangular.
32 In particular, if B is square and nonsingular, the GQR factorization of
33 A and B implicitly gives the QR factorization of inv(B)*A:
34 inv(B)*A = Z'*(inv(T)*R)
35 where inv(B) denotes the inverse of the matrix B, and Z' denotes the
36 transpose of the matrix Z.
37
39 N (input) INTEGER
40 The number of rows of the matrices A and B. N >= 0.
41
42 M (input) INTEGER
43 The number of columns of the matrix A. M >= 0.
44
45 P (input) INTEGER
46 The number of columns of the matrix B. P >= 0.
47
48 A (input/output) DOUBLE PRECISION array, dimension (LDA,M)
49 On entry, the N-by-M matrix A. On exit, the elements on and
50 above the diagonal of the array contain the min(N,M)-by-M upper
51 trapezoidal matrix R (R is upper triangular if N >= M); the
52 elements below the diagonal, with the array TAUA, represent the
53 orthogonal matrix Q as a product of min(N,M) elementary reflec‐
54 tors (see Further Details).
55
56 LDA (input) INTEGER
57 The leading dimension of the array A. LDA >= max(1,N).
58
59 TAUA (output) DOUBLE PRECISION array, dimension (min(N,M))
60 The scalar factors of the elementary reflectors which represent
61 the orthogonal matrix Q (see Further Details). B
62 (input/output) DOUBLE PRECISION array, dimension (LDB,P) On
63 entry, the N-by-P matrix B. On exit, if N <= P, the upper tri‐
64 angle of the subarray B(1:N,P-N+1:P) contains the N-by-N upper
65 triangular matrix T; if N > P, the elements on and above the
66 (N-P)-th subdiagonal contain the N-by-P upper trapezoidal
67 matrix T; the remaining elements, with the array TAUB, repre‐
68 sent the orthogonal matrix Z as a product of elementary reflec‐
69 tors (see Further Details).
70
71 LDB (input) INTEGER
72 The leading dimension of the array B. LDB >= max(1,N).
73
74 TAUB (output) DOUBLE PRECISION array, dimension (min(N,P))
75 The scalar factors of the elementary reflectors which represent
76 the orthogonal matrix Z (see Further Details). WORK
77 (workspace/output) DOUBLE PRECISION array, dimension
78 (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the opti‐
79 mal LWORK.
80
81 LWORK (input) INTEGER
82 The dimension of the array WORK. LWORK >= max(1,N,M,P). For
83 optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3), where
84 NB1 is the optimal blocksize for the QR factorization of an N-
85 by-M matrix, NB2 is the optimal blocksize for the RQ factoriza‐
86 tion of an N-by-P matrix, and NB3 is the optimal blocksize for
87 a call of DORMQR. If LWORK = -1, then a workspace query is
88 assumed; the routine only calculates the optimal size of the
89 WORK array, returns this value as the first entry of the WORK
90 array, and no error message related to LWORK is issued by
91 XERBLA.
92
93 INFO (output) INTEGER
94 = 0: successful exit
95 < 0: if INFO = -i, the i-th argument had an illegal value.
96
98 The matrix Q is represented as a product of elementary reflectors
99 Q = H(1) H(2) . . . H(k), where k = min(n,m).
100 Each H(i) has the form
101 H(i) = I - taua * v * v'
102 where taua is a real scalar, and v is a real vector with
103 v(1:i-1) = 0 and v(i) = 1; v(i+1:n) is stored on exit in A(i+1:n,i),
104 and taua in TAUA(i).
105 To form Q explicitly, use LAPACK subroutine DORGQR.
106 To use Q to update another matrix, use LAPACK subroutine DORMQR. The
107 matrix Z is represented as a product of elementary reflectors
108 Z = H(1) H(2) . . . H(k), where k = min(n,p).
109 Each H(i) has the form
110 H(i) = I - taub * v * v'
111 where taub is a real scalar, and v is a real vector with
112 v(p-k+i+1:p) = 0 and v(p-k+i) = 1; v(1:p-k+i-1) is stored on exit in
113 B(n-k+i,1:p-k+i-1), and taub in TAUB(i).
114 To form Z explicitly, use LAPACK subroutine DORGRQ.
115 To use Z to update another matrix, use LAPACK subroutine DORMRQ.
116
117
118
119 LAPACK routine (version 3.2) November 2008 DGGQRF(1)