C MAIN PROGRAM FOR NONLINEAR LEAST-SQUARES DATA FITTING C PARAMETER (N = 2, LWORK = N*(N+10), MD = 4) REAL X0(N), X(N), F, WORK(LWORK), T(MD), B(MD) COMMON /EXPDAT/ T, B, M EXTERNAL CALCF C C DATA FOR DATA FITTING C T(1) = 0.0 T(2) = 1.0 T(3) = 2.0 T(4) = 3.0 B(1) = 20.0 B(2) = 9.0 B(3) = 3.0 B(4) = 1.0 C C SPECIFY INITIAL ESTIMATE OF THE SOLUTION C M = 4 X0(1) = 1.0 X0(2) = 1.0 C C MINIMIZE FUNCTION C CALL UNCMIN (N, X0, CALCF, X, F, IERROR, WORK, LWORK) C C PRINT RESULTS C WRITE (*,*) 'UNCMIN FOR NONLINEAR LEAST SQUARES RESULTS' IF (IERROR .NE. 0) WRITE (*,*) ' ERROR CODE =', IERROR WRITE (*,*) ' F(X*) =', F WRITE (*,*) ' X* =', (X(I), I = 1,N) C WRITE (*,*) WRITE (*,*) * 'REFERENCE RESULTS (PARTIAL-LAST 8 LINES) FROM IBM PC/AT' WRITE (*,*) ' 19.9145 -20.6011 -5.26250' WRITE (*,*) ' 19.9900 -20.6230 19.9145' WRITE (*,*) ' 20.0100 -20.6230 19.9145' WRITE (*,*) ' 19.9900 -20.6023 19.9145' WRITE (*,*) 'UNCMIN WARNING -- INFO = 1: PROBABLY CONVERGED, GRADI *ENT SMALL' WRITE (*,*) 'UNCMIN FOR NONLINEAR LEAST SQUARES RESULTS' WRITE (*,*) ' ERROR CODE = 1' WRITE (*,*) ' F(X*) = 91.0001' WRITE (*,*) ' X* = 19.9900 -20.6230' C STOP END C C OBJECTIVE FUNCTION C SUBROUTINE CALCF (N, X, F) REAL X(N), F, T(4), B(4) COMMON /EXPDAT/ T, B, M C F = 0.0 WRITE (*,*) X(1),X(2),X(3) DO 10 J = 1,M F = F + (B(J) - X(1)*EXP(X(2)*T(J)))**2 10 CONTINUE C RETURN END