1ZGGRQF(1)                LAPACK routine (version 3.2)                ZGGRQF(1)
2
3
4

NAME

6       ZGGRQF  - computes a generalized RQ factorization of an M-by-N matrix A
7       and a P-by-N matrix B
8

SYNOPSIS

10       SUBROUTINE ZGGRQF( M, P, N, A, LDA, TAUA, B, LDB,  TAUB,  WORK,  LWORK,
11                          INFO )
12
13           INTEGER        INFO, LDA, LDB, LWORK, M, N, P
14
15           COMPLEX*16     A(  LDA,  *  ),  B(  LDB, * ), TAUA( * ), TAUB( * ),
16                          WORK( * )
17

PURPOSE

19       ZGGRQF computes a generalized RQ factorization of an  M-by-N  matrix  A
20       and a P-by-N matrix B:
21                   A = R*Q,        B = Z*T*Q,
22       where  Q is an N-by-N unitary matrix, Z is a P-by-P unitary matrix, and
23       R and T assume one of the forms:
24       if M <= N,  R = ( 0  R12 ) M,   or if M > N,  R = ( R11 ) M-N,
25                        N-M  M                           ( R21 ) N
26                                                            N
27       where R12 or R21 is upper triangular, and
28       if P >= N,  T = ( T11 ) N  ,   or if P < N,  T = ( T11  T12 ) P,
29                       (  0  ) P-N                         P   N-P
30                          N
31       where T11 is upper triangular.
32       In particular, if B is square and nonsingular, the GRQ factorization of
33       A and B implicitly gives the RQ factorization of A*inv(B):
34                    A*inv(B) = (R*inv(T))*Z'
35       where  inv(B)  denotes  the inverse of the matrix B, and Z' denotes the
36       conjugate transpose of the matrix Z.
37

ARGUMENTS

39       M       (input) INTEGER
40               The number of rows of the matrix A.  M >= 0.
41
42       P       (input) INTEGER
43               The number of rows of the matrix B.  P >= 0.
44
45       N       (input) INTEGER
46               The number of columns of the matrices A and B. N >= 0.
47
48       A       (input/output) COMPLEX*16 array, dimension (LDA,N)
49               On entry, the M-by-N matrix A.  On exit, if M <= N,  the  upper
50               triangle  of  the  subarray  A(1:M,N-M+1:N) contains the M-by-M
51               upper triangular matrix R; if M > N, the elements on and  above
52               the  (M-N)-th  subdiagonal contain the M-by-N upper trapezoidal
53               matrix R; the remaining elements, with the array  TAUA,  repre‐
54               sent the unitary matrix Q as a product of elementary reflectors
55               (see Further Details).
56
57       LDA     (input) INTEGER
58               The leading dimension of the array A. LDA >= max(1,M).
59
60       TAUA    (output) COMPLEX*16 array, dimension (min(M,N))
61               The scalar factors of the elementary reflectors which represent
62               the    unitary    matrix    Q   (see   Further   Details).    B
63               (input/output) COMPLEX*16 array, dimension  (LDB,N)  On  entry,
64               the  P-by-N  matrix  B.  On exit, the elements on and above the
65               diagonal of the array contain the  min(P,N)-by-N  upper  trape‐
66               zoidal matrix T (T is upper triangular if P >= N); the elements
67               below the diagonal, with the array TAUB, represent the  unitary
68               matrix  Z  as  a  product of elementary reflectors (see Further
69               Details).  LDB     (input) INTEGER The leading dimension of the
70               array B. LDB >= max(1,P).
71
72       TAUB    (output) COMPLEX*16 array, dimension (min(P,N))
73               The scalar factors of the elementary reflectors which represent
74               the   unitary   matrix   Z   (see   Further   Details).    WORK
75               (workspace/output)  COMPLEX*16  array, dimension (MAX(1,LWORK))
76               On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
77
78       LWORK   (input) INTEGER
79               The dimension of the array WORK. LWORK  >=  max(1,N,M,P).   For
80               optimum performance LWORK >= max(N,M,P)*max(NB1,NB2,NB3), where
81               NB1 is the optimal blocksize for the RQ factorization of an  M-
82               by-N matrix, NB2 is the optimal blocksize for the QR factoriza‐
83               tion of a P-by-N matrix, and NB3 is the optimal blocksize for a
84               call  of  ZUNMRQ.   If  LWORK  =  -1, then a workspace query is
85               assumed; the routine only calculates the optimal  size  of  the
86               WORK  array,  returns this value as the first entry of the WORK
87               array, and no error message  related  to  LWORK  is  issued  by
88               XERBLA.
89
90       INFO    (output) INTEGER
91               = 0:  successful exit
92               < 0:  if INFO=-i, the i-th argument had an illegal value.
93

FURTHER DETAILS

95       The matrix Q is represented as a product of elementary reflectors
96          Q = H(1) H(2) . . . H(k), where k = min(m,n).
97       Each H(i) has the form
98          H(i) = I - taua * v * v'
99       where  taua  is  a  complex scalar, and v is a complex vector with v(n-
100       k+i+1:n) = 0 and v(n-k+i) = 1; v(1:n-k+i-1) is stored on exit  in  A(m-
101       k+i,1:n-k+i-1), and taua in TAUA(i).
102       To form Q explicitly, use LAPACK subroutine ZUNGRQ.
103       To  use  Q to update another matrix, use LAPACK subroutine ZUNMRQ.  The
104       matrix Z is represented as a product of elementary reflectors
105          Z = H(1) H(2) . . . H(k), where k = min(p,n).
106       Each H(i) has the form
107          H(i) = I - taub * v * v'
108       where taub is a complex scalar, and v is a complex vector with v(1:i-1)
109       = 0 and v(i) = 1; v(i+1:p) is stored on exit in B(i+1:p,i), and taub in
110       TAUB(i).
111       To form Z explicitly, use LAPACK subroutine ZUNGQR.
112       To use Z to update another matrix, use LAPACK subroutine ZUNMQR.
113
114
115
116 LAPACK routine (version 3.2)    November 2008                       ZGGRQF(1)
Impressum