|
PROGRAM TEST
|
IMPLICIT NONE
|
C
|
INTEGER LDA, LDWORK, M, N
|
PARAMETER (M = 4)
|
PARAMETER (N = 4)
|
PARAMETER (LDA = M)
|
PARAMETER (LDWORK = M)
|
C
|
DOUBLE PRECISION A(LDA,N), TAU(N), WORK(LDWORK)
|
INTEGER ICOL, INFO, IROW
|
C
|
EXTERNAL DGELQF, DORGLQ
|
INTRINSIC ABS, MIN
|
C
|
C Initialize the array A to store the matrix A shown below.
|
C
|
C 1 1 1 1
|
C A = 1 -1 1 -1
|
C 5 -5 -1 1
|
C 9 -1 -5 -3
|
C
|
DATA A / 1.0D0, 1.0D0, 5.0D0, 9.0D0,
|
$ 1.0D0, -1.0D0, -5.0D0, -1.0D0,
|
$ 1.0D0, 1.0D0, -1.0D0, -5.0D0,
|
$ 1.0D0, -1.0D0, 1.0D0, -3.0D0 /
|
C
|
C Compute the LQ factorization of A and print L.
|
C
|
PRINT 1000
|
PRINT 1010, ((A(IROW,ICOL), ICOL = 1, N), IROW = 1, M)
|
CALL DGELQF (M, N, A, LDA, TAU, WORK, LDWORK, INFO)
|
IF (INFO .NE. 0) THEN
|
PRINT 1020, ABS(INFO)
|
STOP 1
|
END IF
|
PRINT 1030
|
DO 100, IROW = 1, M
|
PRINT 1010, (A(IROW,ICOL), ICOL = 1, MIN(N,IROW)),
|
$ (0.0D0, ICOL = IROW + 1, N)
|
100 CONTINUE
|
C
|
C Compute and print the matrix Q used in the LQ factorization
|
C of A.
|
C
|
CALL DORGLQ (N, N, N, A, LDA, TAU, WORK, LDWORK, INFO)
|
IF (INFO .NE. 0) THEN
|
PRINT 1040, ABS(INFO)
|
STOP 2
|
END IF
|
PRINT 1050
|
PRINT 1010, ((A(IROW,ICOL), ICOL = 1, N), IROW = 1, N)
|
C
|
1000 FORMAT (1X, 'A:')
|
1010 FORMAT (4(3X, F8.4))
|
1020 FORMAT (1X, 'Illegal value for argument #', I1,
|
$ ' in DGELQF.')
|
1030 FORMAT (/1X, 'L:')
|
1040 FORMAT (1X, 'Illegal value for argument #', I1,
|
$ ' in DORGLQ.')
|
1050 FORMAT (/1X, 'Q:')
|
C
|
END
|
|