C MAIN PROGRAM TO MINIMIZE A FUNCTION REPRESENTED BY ROUTINE CALCF C PARAMETER (N = 2, 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...' X0(1)=.99 X0(2)=-.95 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 STOP 800 FORMAT (5F12.6) END C C OBJECTIVE FUNCTION C SUBROUTINE CALCF (N, X, F) DOUBLE PRECISION X(N), F, D(112,3), H(111), Z(111,3), SUM(3), DUM, $ XX(3,3), ZZ(3,3), WK(50) C WRITE(*,*) X(1),X(2) REWIND(55) DO 1 I=1,112 READ(55,*) (D(I,J),J=1,3) 1 CONTINUE DO 2 I=1,111 Z(I,1)=1.D0 Z(I,2)=D(I+1,1)/D(I,1) Z(I,3)=(D(I+1,2)+D(I+1,3))/D(I,2) H(I)=X(1)*Z(I,3)*Z(I,2)**X(2)-1.D0 2 CONTINUE SUM(1)=0.D0 SUM(2)=0.D0 SUM(3)=0.D0 DO 3 I=1,110 SUM(1)=SUM(1)+H(I+1)*Z(I,1) SUM(2)=SUM(2)+H(I+1)*Z(I,2) SUM(3)=SUM(3)+H(I+1)*Z(I,3) 3 CONTINUE C WRITE(*,*) SUM(1),SUM(2),SUM(3) DO 4 I=1,3 DO 4 J=1,3 DUM=0.D0 DO 5 K=1,110 DUM=DUM+Z(K,I)*Z(K,J) 5 CONTINUE ZZ(I,J)=DUM 4 CONTINUE DET=ZZ(1,1)*(ZZ(2,2)*ZZ(3,3)-ZZ(3,2)*ZZ(2,3))-ZZ(1,2)* $ (ZZ(2,1)*ZZ(3,3)-ZZ(3,1)*ZZ(2,3))+ZZ(1,3)*(ZZ(2,1)*ZZ(3,2) $ -ZZ(3,1)*ZZ(2,2)) XX(1,1)=(ZZ(2,2)*ZZ(3,3)-ZZ(3,2)*ZZ(2,3))/DET XX(1,2)=-(ZZ(2,1)*ZZ(3,3)-ZZ(3,1)*ZZ(2,3))/DET XX(2,1)=XX(1,2) XX(1,3)=(ZZ(2,1)*ZZ(3,2)-ZZ(2,2)*ZZ(3,1))/DET XX(3,1)=XX(1,3) XX(2,2)=(ZZ(1,1)*ZZ(3,3)-ZZ(3,1)*ZZ(1,3))/DET XX(2,3)=-(ZZ(1,1)*ZZ(3,2)-ZZ(3,1)*ZZ(1,2))/DET XX(3,2)=XX(2,3) XX(3,3)=(ZZ(1,1)*ZZ(2,2)-ZZ(2,1)*ZZ(1,2))/DET F=0.D0 DO 6 I=1,3 DUM=0.D0 DO 7 J=1,3 DUM=DUM+SUM(J)*XX(J,I) 7 CONTINUE F=F+DUM*SUM(I) 6 CONTINUE WRITE(*,*) F C RETURN END