C MAIN PROGRAM TO MINIMIZE A FUNCTION REPRESENTED BY ROUTINE CALCF C PARAMETER (N = 10, 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) = FLOAT(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 C STOP 800 FORMAT (5F12.6) END C C OBJECTIVE FUNCTION C SUBROUTINE CALCF (N, X, F) DOUBLE PRECISION X(N), F, T1, T2, T3, T4, T5, T6 C T1=.4*X(1)/X(4)-2 T2=.6*X(8)**0.3*X(6)**0.7-4 T3=EXP(X(5))+X(5)*X(5)*X(5)-3*X(5)-1.1 T4=(X(9)-100.0)**2+0.0001*(X(9)-300.0)**3 T5=(X(10)-1.0)**2*(X(2)-3.0)**2 T6=-X(3)*X(4)*X(7)-1.0 F=T1*T1+T2*T2+T3*T3+T4*T4+T5*T5+T6*T6 WRITE(*,*) F WRITE(*,800) X(1),X(2),X(3),X(4),X(5) 800 FORMAT (5F12.6) C RETURN END