C MAIN PROGRAM FOR NONLINEAR LEAST-SQUARES DATA FITTING
C
      PARAMETER       (N = 2, LWORK = N*(N+10), MD = 4)
      REAL            X0(N), X(N), F, WORK(LWORK), T(MD), B(MD)
      COMMON /EXPDAT/ T, B, M
      EXTERNAL        CALCF
C
C DATA FOR DATA FITTING
C
      T(1) =  0.0
      T(2) =  1.0
      T(3) =  2.0
      T(4) =  3.0
      B(1) = 20.0
      B(2) =  9.0
      B(3) =  3.0
      B(4) =  1.0
C
C SPECIFY INITIAL ESTIMATE OF THE SOLUTION
C
      M     = 4
      X0(1) = 1.0
      X0(2) = 1.0
C
C MINIMIZE FUNCTION
C
      CALL UNCMIN (N, X0, CALCF, X, F, IERROR, WORK, LWORK)
C
C PRINT RESULTS
C
      WRITE (*,*) 'UNCMIN FOR NONLINEAR LEAST SQUARES RESULTS'
      IF (IERROR .NE. 0) WRITE (*,*) ' ERROR CODE =', IERROR
      WRITE (*,*) ' F(X*) =', F
      WRITE (*,*) ' X* =', (X(I), I = 1,N)
C
      WRITE (*,*) 
      WRITE (*,*) 
     * 'REFERENCE RESULTS (PARTIAL-LAST 8 LINES) FROM IBM PC/AT'
      WRITE (*,*) '    19.9145       -20.6011       -5.26250'
      WRITE (*,*) '    19.9900       -20.6230        19.9145'
      WRITE (*,*) '    20.0100       -20.6230        19.9145'    
      WRITE (*,*) '    19.9900       -20.6023        19.9145'
      WRITE (*,*) 'UNCMIN WARNING -- INFO = 1: PROBABLY CONVERGED, GRADI
     *ENT SMALL'
      WRITE (*,*) 'UNCMIN FOR NONLINEAR LEAST SQUARES RESULTS'
      WRITE (*,*) ' ERROR CODE =           1'
      WRITE (*,*) ' F(X*) =    91.0001'
      WRITE (*,*) ' X* =    19.9900       -20.6230'    
C
      STOP
      END
C
C OBJECTIVE FUNCTION
C
      SUBROUTINE CALCF (N, X, F)
      REAL            X(N), F, T(4), B(4)
      COMMON /EXPDAT/ T, B, M
C
      F = 0.0
      WRITE (*,*) X(1),X(2),X(3)
      DO 10 J = 1,M
         F = F + (B(J) - X(1)*EXP(X(2)*T(J)))**2
10    CONTINUE
C
      RETURN
      END
