SUBROUTINE N2G(N, P, X, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** VERSION OF NL2SOL THAT CALLS RN2G *** C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C REAL X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) REAL X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C NOTE... NL2SOL (MENTIONED BELOW) IS A CODE FOR SOLVING C NONLINEAR LEAST-SQUARES PROBLEMS. IT IS DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7 (1981), PP. 369-383 C (AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, C D.M. GAY, AND R.E. WELSCH). C C LIV GIVES THE LENGTH OF IV. IT MUST BE AT LEAST 82+P. IF NOT, C THEN N2G RETURNS WITH IV(1) = 15. WHEN N2G RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LIV IS STORED IN IV(LASTIV) = IV(44), C (PROVIDED THAT LIV .GE. 44). C C LV GIVES THE LENGTH OF V. THE MINIMUM VALUE FOR LV IS C LV0 = 105 + P*(N + 2*P + 17) + 2*N. IF LV IS SMALLER THAN THIS, C THEN N2G RETURNS WITH IV(1) = 16. WHEN N2G RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LV IS STORED IN IV(LASTV) = IV(45) C (PROVIDED LIV .GE. 45). C C RETURN CODES AND CONVERGENCE TOLERANCES ARE THE SAME AS FOR C NL2SOL, WITH SOME SMALL EXTENSIONS... IV(1) = 15 MEANS LIV WAS C TOO SMALL. IV(1) = 16 MEANS LV WAS TOO SMALL. C C THERE ARE TWO NEW V INPUT COMPONENTS... V(LMAXS) = V(36) AND C V(SCTOL) = V(37) SERVE WHERE V(LMAX0) AND V(RFCTOL) FORMERLY DID C IN THE SINGULAR CONVERGENCE TEST -- SEE THE NL2SOL DOCUMENTATION. C C *** DEFAULT VALUES *** C C DEFAULT VALUES ARE PROVIDED BY SUBROUTINE IVSET, RATHER THAN C DFAULT. THE CALLING SEQUENCE IS... C CALL IVSET(1, IV, LIV, LV, V) C THE FIRST PARAMETER IS AN INTEGER 1. IF LIV AND LV ARE LARGE C ENOUGH FOR IVSET, THEN IVSET SETS IV(1) TO 12. OTHERWISE IT C SETS IV(1) TO 15 OR 16. CALLING N2G WITH IV(1) = 0 CAUSES ALL C DEFAULT VALUES TO BE USED FOR THE INPUT COMPONENTS OF IV AND V. C IF YOU FIRST CALL IVSET, THEN SET IV(1) TO 13 AND CALL N2G, C THEN STORAGE ALLOCATION ONLY WILL BE PERFORMED. IN PARTICULAR, C IV(D) = IV(27), IV(J) = IV(70), AND IV(R) = IV(61) WILL BE SET C TO THE FIRST SUBSCRIPT IN V OF THE SCALE VECTOR, THE JACOBIAN C MATRIX, AND THE RESIDUAL VECTOR RESPECTIVELY, PROVIDED LIV AND LV C ARE LARGE ENOUGH. IF SO, THEN N2G RETURNS WITH IV(1) = 14. C WHEN CALLED WITH IV(1) = 14, N2G ASSUMES THAT STORAGE HAS C BEEN ALLOCATED, AND IT BEGINS THE MINIMIZATION ALGORITHM. C C *** SCALE VECTOR *** C C ONE DIFFERENCE WITH NL2SOL IS THAT THE SCALE VECTOR D IS C STORED IN V, STARTING AT A DIFFERENT SUBSCRIPT. THE STARTING C SUBSCRIPT VALUE IS STILL STORED IN IV(D) = IV(27). THE C DISCUSSION OF DEFAULT VALUES ABOVE TELLS HOW TO HAVE IV(D) SET C BEFORE THE ALGORITHM IS STARTED. C C *** REGRESSION DIAGNOSTICS *** C C IF IV(RDREQ) SO DICTATES, THEN ESTIMATES ARE COMPUTED OF THE C INFLUENCE EACH RESIDUAL COMPONENT HAS ON THE FINAL PARAMETER C ESTIMATE X. THE GENERAL IDEA IS THAT ONE MAY WISH TO EXAMINE C RESIDUAL COMPONENTS (AND THE DATA BEHIND THEM) FOR WHICH THE C INFLUENCE ESTIMATE IS SIGNIFICANTLY LARGER THAN MOST OF THE OTHER C INFLUENCE ESTIMATES. THESE ESTIMATES, HEREAFTER CALLED C REGRESSION DIAGNOSTICS, ARE ONLY COMPUTED IF IV(RDREQ) = 2 OR 3. C IN THIS CASE, FOR I = 1(1)N, C SQRT( G(I)**T * H(I)**-1 * G(I) ) C IS COMPUTED AND STORED IN V, STARTING AT V(IV(REGD)), WHERE C RDREQ = 57 AND REGD = 67. HERE G(I) STANDS FOR THE GRADIENT C RESULTING WHEN THE I-TH OBSERVATION IS DELETED AND H(I) STANDS C FOR AN APPROXIMATION TO THE CORRESPONDING HESSIAN AT X, THE SOLU- C TION CORRESPONDING TO ALL OBSERVATIONS. (THIS APPROXIMATION IS C OBTAINED BY SUBTRACTING THE FIRST-ORDER CONTRIBUTION OF THE I-TH C OBSERVATION TO THE HESSIAN FROM A FINITE-DIFFERENCE HESSIAN C APPROXIMATION. IF H IS INDEFINITE, THEN IV(REGD) IS SET TO -1. C IF H(I) IS INDEFINITE, THEN -1 IS RETURNED AS THE DIAGNOSTIC FOR C OBSERVATION I. IF NO DIAGNOSTICS ARE COMPUTED, PERHAPS BECAUSE C OF A FAILURE TO CONVERGE, THEN IV(REGD) = 0 IS RETURNED.) C PRINTING OF THE REGRESSION DIAGNOSTICS IS CONTROLLED BY C IV(COVPRT) = IV(14)... IF IV(COVPRT) = 3, THEN BOTH THE C COVARIANCE MATRIX AND THE REGRESSION DIAGNOSTICS ARE PRINTED. C IV(COVPRT) = 2 CAUSES ONLY THE REGRESSION DIAGNOSTICS TO BE C PRINTED, IV(COVPRT) = 1 CAUSES ONLY THE COVARIANCE MATRIX TO BE C PRINTED, AND IV(COVPRT) = 0 CAUSES NEITHER TO BE PRINTED. C C RDREQ = 57 AND REGD = 67. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RN2G, N2RDP C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C RN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C N2RDP... PRINTS REGRESSION DIAGNOSTICS. C C *** NO INTRINSIC FUNCTIONS *** C C *** LOCAL VARIABLES *** C INTEGER D1, DR1, IV1, N1, N2, NF, R1, RD1 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NFCALL, NFGCAL, R, REGD, REGD0, TOOBIG, VNEED C/6 C DATA D/27/, J/70/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, R/61/, C 1 REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NFCALL=6, NFGCAL=7, R=61, 1 REGD=67, REGD0=82, TOOBIG=2, VNEED=4) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL RN2G(X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL RN2G(V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 60 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 50 CALL CALCJ(N, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C C *** INDICATE WHETHER THE REGRESSION DIAGNOSTIC ARRAY WAS COMPUTED C *** AND PRINT IT IF SO REQUESTED... C 60 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 CALL N2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF N2G FOLLOWS *** END .