PROGRAM D10R9 C Driver for routine FRPRMN PARAMETER(NDIM=3,FTOL=1.0E-6,PIO2=1.5707963) DIMENSION P(NDIM) WRITE(*,'(/1X,A)') 'Program finds the minimum of a function' WRITE(*,'(1X,A)') 'with different trial starting vectors.' WRITE(*,'(1X,A)') 'True minimum is (0.5,0.5,0.5)' DO 11 K=0,4 ANGL=PIO2*K/4.0 P(1)=2.0*COS(ANGL) P(2)=2.0*SIN(ANGL) P(3)=0.0 WRITE(*,'(/1X,A,3(F6.4,A))') 'Starting vector: (', * P(1),',',P(2),',',P(3),')' CALL FRPRMN(P,NDIM,FTOL,ITER,FRET) WRITE(*,'(1X,A,I3)') 'Iterations:',ITER WRITE(*,'(1X,A,3(F6.4,A))') 'Solution vector: (', * P(1),',',P(2),',',P(3),')' WRITE(*,'(1X,A,E14.6)') 'Func. value at solution',FRET 11 CONTINUE END FUNCTION FUNC(X) DIMENSION X(3) FUNC=1.0-BESSJ0(X(1)-0.5)*BESSJ0(X(2)-0.5)*BESSJ0(X(3)-0.5) END SUBROUTINE DFUNC(X,DF) PARAMETER (NMAX=50) DIMENSION X(3),DF(NMAX) DF(1)=BESSJ1(X(1)-0.5)*BESSJ0(X(2)-0.5)*BESSJ0(X(3)-0.5) DF(2)=BESSJ0(X(1)-0.5)*BESSJ1(X(2)-0.5)*BESSJ0(X(3)-0.5) DF(3)=BESSJ0(X(1)-0.5)*BESSJ0(X(2)-0.5)*BESSJ1(X(3)-0.5) RETURN END