C MAIN PROGRAM TO MINIMIZE A FUNCTION REPRESENTED BY ROUTINE CALCF C PARAMETER (N = 1, LWORK = N*(N+10)) DOUBLE PRECISION X0(N), X(N), F, WORK(LWORK) EXTERNAL CALCF C C SPECIFY INITIAL ESTIMATE OF THE SOLUTION C WRITE (*,*) 'COMPUTING...' DO 10 I = 1,N X0(I) = I / FLOAT(N+1) 10 CONTINUE C C MINIMIZE FUNCTION C CALL UNCMND (N, X0, CALCF, X, F, IERROR, WORK, LWORK) C C PRINT RESULTS C WRITE (*,*) 'UNCMND RESULTS' IF (IERROR .NE. 0) WRITE (*,*) ' ERROR CODE =', IERROR WRITE (*,*) ' F(X*) =', F WRITE (*,*) ' X* =' WRITE (*,800) (X(I), I = 1,N) C WRITE (*,*) WRITE (*,*) 'REFERENCE RESULTS FROM IBM PC/AT' WRITE (*,*) 'UNCMND WARNING -- INFO = 1: PROBABLY CONVERGED, GRADI *ENT SMALL' WRITE (*,*) 'UNCMND RESULTS' WRITE (*,*) ' ERROR CODE = 1' WRITE (*,*) ' F(X*) = 1.00000000000001' WRITE (*,*) ' X* =' WRITE (*,*) ' 1.000000 1.000000 1.000000 1.000000 1. *000000' WRITE (*,*) ' 1.000000 1.000000 1.000000 1.000000 1. *000000' C STOP 800 FORMAT (5F12.6) END C C OBJECTIVE FUNCTION C SUBROUTINE CALCF (N, X, F) DOUBLE PRECISION X(N), F, T1, T2 C F = (X(1)-3)**2.d0 C RETURN END