|
PROGRAM TEST
|
IMPLICIT NONE
|
C
|
INTEGER LDA, LDB, LDSING, LDWORK, M, N, NRHS
|
PARAMETER (M = 4)
|
PARAMETER (N = 4)
|
PARAMETER (LDA = M)
|
PARAMETER (LDB = M)
|
PARAMETER (LDSING = M)
|
PARAMETER (LDWORK = 5 * N)
|
PARAMETER (NRHS = 1)
|
C
|
DOUBLE PRECISION A(LDA,N), B(LDB,NRHS), RCOND, SING(LDSING)
|
DOUBLE PRECISION SMALL, WORK(LDWORK)
|
INTEGER ICOL, INFO, IROW, IRANK
|
C
|
EXTERNAL DGELSS
|
INTRINSIC ABS, SQRT
|
C
|
C Initialize the array A to store the coefficient matrix A
|
C shown below. Initialize the array B to store the right
|
C hand side vector b shown below. The element labeled z in
|
C the last column of A differs from 2 only in the last few
|
C bits. This makes columns three and four nearly equal.
|
C
|
C 1 6 2 z 96
|
C A = 1 -2 -8 -8 b = 192
|
C 1 -2 4 4 192
|
C 1 6 14 14 -96
|
C
|
DATA A / 1.0D0, 1.0D0, 1.0D0, 1.0D0,
|
$ 6.0D0, -2.0D0, -2.0D0, 6.0D0,
|
$ 2.0D0, -8.0D0, 4.0D0, 1.4D1,
|
$ 2.0D0, -8.0D0, 4.0D0, 1.4D1 /
|
DATA B / 9.6D1, 1.92D2, 1.92D2, -9.6D1 /
|
C
|
C Print the initial value of the arrays.
|
C
|
SMALL = ((((2.0D0 / 3.0D0) + 4.0D0) - 4.0D0) -
|
$ (2.0D0 / 3.0D0))
|
A(1,N) = A(1,N-1) + SMALL
|
PRINT 1000
|
PRINT 1010, ((A(IROW,ICOL), ICOL = 1, N), IROW = 1, M)
|
PRINT 1020
|
PRINT 1030, B
|
C
|
C Compute and print the rank of A and the solution to the
|
C minimization problem.
|
C
|
RCOND = SQRT(2.2D-16)
|
CALL DGELSS (M, N, NRHS, A, LDA, B, LDB, SING, RCOND, IRANK,
|
$ WORK, LDWORK, INFO)
|
IF (INFO .NE. 0) THEN
|
PRINT 1040, ABS(INFO)
|
STOP 1
|
END IF
|
PRINT 1050, IRANK
|
PRINT 1060
|
PRINT 1030, B
|
C
|
1000 FORMAT (1X, 'A:')
|
1010 FORMAT (4(3X, F8.4))
|
1020 FORMAT (/1X, 'b:')
|
1030 FORMAT (1X, F8.4)
|
1040 FORMAT (1X, 'Illegal value for argument #', I1,
|
$ ' in DGELSS.')
|
1050 FORMAT (/1X, 'Numerical rank of A: ', I1)
|
1060 FORMAT (/1X, 'min(b - Ax):')
|
C
|
END
|
|