Previous Next Contents Generated Index Doc Set Home



RQ Factorization of a General Matrix

The subroutines described in this section compute an RQ factorization for a general matrix A.

Calling Sequence

CALL DGERQF 
(M, N, DA, LDA, DTAU, DWORK, LDWORK, INFO)
CALL SGERQF 
(M, N, SA, LDA, STAU, SWORK, LDWORK, INFO)
CALL ZGERQF 
(M, N, ZA, LDA, ZTAU, ZWORK, LDWORK, INFO)
CALL CGERQF 
(M, N, CA, LDA, CTAU, CWORK, LDWORK, INFO)






void dgerqf 
(int m, int n, double *da, int lda, double *dtau, int 
*info)
void sgerqf 
(int m, int n, float *sa, int lda, float *stau, int 
*info)
void zgerqf 
(int m, int n, doublecomplex *za, int lda, 
doublecomplex *ztau, int *info)
void cgerqf 
(int m, int n, complex *ca, int lda, complex *ctau, int 
*info)

Arguments

M

Number of rows of the matrix A. M 0.

N

Number of columns of the matrix A. N 0.

xA

On entry, the matrix A.
On exit, A and TAU contain an RQ factorization of the matrix A.

LDA

Leading dimension of the array A as specified in a dimension or type statement. LDA max(1, M).

xTAU

On exit, the min(M, N) scalar factors of the elementary reflectors. The elementary reflectors in xTAU together with xA contain an RQ factorization of the matrix A that can be used by other LAPACK subroutines that operate on the matrix A.

xWORK

Scratch array with a dimension of LDWORK.

LDWORK

Leading dimension of the array WORK as specified in a dimension or type statement. LDWORK max(1, M).

INFO

On exit:

INFO = 0

Subroutine completed normally.

INFO < 0

The ith argument, where i = |INFO|, had an illegal value.

Sample Program




      PROGRAM TEST
      IMPLICIT NONE
C
      INTEGER           LDA, LDR, LDTAU, LDWORK, M, N
      PARAMETER        (M = 5)
      PARAMETER        (N = 4)
      PARAMETER        (LDA = M)
      PARAMETER        (LDR = M)
      PARAMETER        (LDTAU = LDA)
      PARAMETER        (LDWORK = M)
C
      DOUBLE PRECISION  A(LDA,N), R(LDR,N), TAU(LDTAU)
      DOUBLE PRECISION  WORK(LDWORK)
      INTEGER           ICOL, INFO, IROW
C
      EXTERNAL          DCOPY, DGERQF, DORGRQ
      INTRINSIC         ABS, MAX
C
C     Initialize the array A to store the matrix A shown below.
C
C         1   1   0   0
C         1   1   1   1
C     A = 1   1  -1  -1
C         1  -1   1  -1
C         1  -1  -1   1
C
      DATA A / 1.0D0, 1.0D0,  1.0D0,  1.0D0,  1.0D0,
     $         1.0D0, 1.0D0,  1.0D0, -1.0D0, -1.0D0,
     $         0.0D0, 1.0D0, -1.0D0,  1.0D0, -1.0D0,
     $         0.0D0, 1.0D0, -1.0D0, -1.0D0,  1.0D0 /
C
C     Print the initial value of the array A.
C
      PRINT 1000
      DO 100, IROW = 1, M
        PRINT 1010, (A(IROW,ICOL), ICOL = 1, N)
  100 CONTINUE
C
C     Compute the RQ factorization of A.
C
      CALL DGERQF (M, N, A, LDA, TAU, WORK, LDWORK, INFO)
      IF (INFO .NE. 0) THEN
        PRINT 1020, ABS(INFO)
        STOP 1
      END IF
      DO 110, ICOL = 1, N
        CALL DCOPY (M, A(1,ICOL), 1, R(1,ICOL), 1)
  110 CONTINUE
C
C     Compute and print the matrix Q used in the RQ factorization
C     of A.
C
      CALL DORGRQ (N, N, N, A(M-N+1,1), LDA, TAU, WORK, LDWORK,
     $             INFO)
      IF (INFO .NE. 0) THEN
        PRINT 1030, ABS(INFO)
        STOP 2
      END IF
      PRINT 1040
      DO 120, IROW = 1, M
        PRINT 1010, (0.0D0, ICOL = 1, IROW - (M - N) - 1),
     $              (R(IROW,ICOL), ICOL = MAX(1,IROW - (M - N)),N)
  120 CONTINUE
      PRINT 1050
      DO 130, IROW = M - N + 1, M
        PRINT 1010, (A(IROW,ICOL), ICOL = 1, N)
  130 CONTINUE
C
 1000 FORMAT (1X, 'A:')
 1010 FORMAT (5(3X, F8.4))
 1020 FORMAT (1X, 'Illegal value for argument #',
     $        I1, ' in DGERQF.')
 1030 FORMAT (1X, 'Illegal value for argument #',
     $        I1, ' in DORGRQ.')
 1040 FORMAT (/1X, 'R:')
 1050 FORMAT (/1X, 'Q:')
C
      END
 

Sample Output

 
 A:
     1.0000     1.0000     0.0000     0.0000
     1.0000     1.0000     1.0000     1.0000
     1.0000     1.0000    -1.0000    -1.0000
     1.0000    -1.0000     1.0000    -1.0000
     1.0000    -1.0000    -1.0000     1.0000



 R:
    -1.0000    -1.0000     0.0000     0.0000
    -2.0000     0.0000     0.0000     0.0000
     0.0000    -2.0000     0.0000     0.0000
     0.0000     0.0000    -2.0000     0.0000
     0.0000     0.0000     0.0000    -2.0000



 Q:
    -0.5000    -0.5000    -0.5000    -0.5000
    -0.5000    -0.5000     0.5000     0.5000
    -0.5000     0.5000    -0.5000     0.5000
    -0.5000     0.5000     0.5000    -0.5000






Previous Next Contents Generated Index Doc Set Home