C MAIN PROGRAM TO MINIMIZE A FUNCTION REPRESENTED BY ROUTINE CALCF C PARAMETER (N = 10, LWORK = N*(N+10)) REAL 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 UNCMIN (N, X0, CALCF, X, F, IERROR, WORK, LWORK) C C PRINT RESULTS C WRITE (*,*) 'UNCMIN 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 (*,*) ' UNCMIN WARNING -- INFO = 3: CANNOT FIND LOWER POINT' WRITE (*,*) ' ERROR CODE = 3' WRITE (*,*) ' F(X*) = 1.00116' WRITE (*,*) ' X* =' WRITE (*,*) * ' 0.999745 0.999598 0.999370 0.998893 0.998021' WRITE (*,*) * ' 0.996177 0.992586 0.985264 0.970914 0.942591' C STOP 800 FORMAT (5F12.6) END C C OBJECTIVE FUNCTION C SUBROUTINE CALCF (N, X, F) REAL X(N), F, T1, T2 C T1 = 0.0 T2 = 0.0 DO 10 I = 2,N T1 = T1 + (X(I)-X(I-1)**2)**2 T2 = T2 + (1.0-X(I-1))**2 10 CONTINUE F = 1.0 + 100.0*T1 + T2 C RETURN END