* F08BAF Example Program Text * Mark 21 Release. NAG Copyright 2004. * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER MMAX, NB, NMAX PARAMETER (MMAX=16,NB=64,NMAX=8) INTEGER LDA, LWORK PARAMETER (LDA=MMAX,LWORK=3*NMAX+NB*(NMAX+1)) * .. Local Scalars .. DOUBLE PRECISION RCOND INTEGER I, INFO, J, M, N, RANK * .. Local Arrays .. DOUBLE PRECISION A(LDA,NMAX), B(MMAX), WORK(LWORK) INTEGER JPVT(NMAX) * .. External Subroutines .. EXTERNAL DGELSY, F06DBF * .. Executable Statements .. WRITE (NOUT,*) 'F08BAF Example Program Results' WRITE (NOUT,*) * Skip heading in data file READ (NIN,*) READ (NIN,*) M, N IF (M.LE.MMAX .AND. N.LE.NMAX .AND. M.GE.N) THEN * * Read A and B from data file * READ (NIN,*) ((A(I,J),J=1,N),I=1,M) READ (NIN,*) (B(I),I=1,M) * * Initialize JPVT to be zero so that all columns are free * CALL F06DBF(N,0,JPVT,1) * * Choose RCOND to reflect the relative accuracy of the input data * RCOND = 0.01D0 * * Solve the least squares problem min( norm2(b - Ax) ) for the x * of minimum norm. * CALL DGELSY(M,N,1,A,LDA,B,M,JPVT,RCOND,RANK,WORK,LWORK,INFO) * * Print solution * WRITE (NOUT,*) 'Least squares solution' WRITE (NOUT,99999) (B(I),I=1,N) * * Print the effective rank of A * WRITE (NOUT,*) WRITE (NOUT,*) 'Tolerance used to estimate the rank of A' WRITE (NOUT,99998) RCOND WRITE (NOUT,*) 'Estimated rank of A' WRITE (NOUT,99997) RANK ELSE WRITE (NOUT,*) 'MMAX and/or NMAX too small, and/or M.LT.N' END IF STOP * 99999 FORMAT (1X,7F11.4) 99998 FORMAT (3X,1P,E11.2) 99997 FORMAT (1X,I6) END