5 * Revision 1.1.1.1 1996/04/01 15:02:20 mclareni
10 SUBROUTINE DFUNFT(SUB,K,M,N,NX,NC,X,Y,SY,A,AL,AU,MODE,EPS,MAXIT,
11 + IPRT,MFR,IAFR,PHI,DPHI,COV,STD,W,NERROR)
13 #include "gen/imp64.inc"
15 DIMENSION X(*),Y(*),SY(*)
16 DIMENSION A(*),AL(*),AU(*),DPHI(*),IAFR(*)
17 DIMENSION COV(NC,*),STD(*)
22 ***********************************************************************
23 * LEAMAX, VERSION: 15.03.1993
24 ***********************************************************************
26 * DFUNFT IS THE STEERING ROUTINE FOR NONLINEAR LEAST-SQUARES FITTING.
28 * SUBROUTINE CALLED: D501L1
31 * THE CONSTANTS, VARIABLES AND ARRAYS HAVE THE FOLLOWING MEANING.
33 * SUB NAME OF USER-SUPPLIED SUBROUTINE SUBPROGRAM, DECLARED
34 * EXTERNAL IN THE CALLING PROGRAM. THIS SUBPROGRAM MUST PROVIDE
35 * THE VALUES OF THE FUNCTION AND, IF MODE=1, THE VALUES OF THE
36 * DERIVATIVES (SEE EXAMPLE) .
37 * K (INTEGER) DIMENSION OF A SINGLE DATA POINT (OBSERVATION) X .
38 * M (INTEGER) NUMBER OF DATA POINTS (OBSERVATIONS) .
39 * N (INTEGER) NUMBER OF UNKNOWN PARAMETERS A.
40 * NX (INTEGER) DECLARED FIRST DIMENSION OF ARRAY X IN THE
41 * CALLING PROGRAM, WITH NX .GE. K .
42 * NC (INTEGER) DECLARED FIRST DIMENSION OF ARRAY COV IN THE
43 * CALLING PROGRAM, WITH NC .GE. N .
44 * X (DOUBLE PRECISION) TWO-DIMENSIONAL ARRAY OF DIMENSION (NX,M).
45 * ON ENTRY, X MUST CONTAIN THE DATA SET (X(I)) (THE I-TH
46 * COLUMN OF X BELONGS TO THE DATA POINT X(I), I=1,...,M).
47 * Y (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH M ,
48 * CONTAINS THE DATA SET (Y(I)) ON ENTRY.
49 * SY (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH M ,
50 * CONTAINS THE WEIGTHS (SIGMA(I)) OF THE DATA POINTS ON ENTRY.
51 * A (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH N .
52 * ON ENTRY, A MUST CONTAIN THE STARTING VALUES OF THE UNKNOWN
53 * PARAMETERS FOR THE LEVENBERG-MARQUARDT ALGORITHM.
54 * ON EXIT, A CONTAINS AN APPROXIMATION OF THE MINIMUM POINT.
55 * AL (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH N .
56 * ON ENTRY, AL MUST CONTAIN THE LOWER BOUNDS OF A .
57 * AU (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH N .
58 * ON ENTRY, AU MUST CONTAIN THE UPPER BOUNDS OF A .
60 * = 0: THE DERIVATIVE IS COMPUTED NUMERICALLY.
61 * = 1: THE DERIVATIVE HAS TO BE EVALUATED IN SUBPROGRAM SUB .
62 * EPS (DOUBLE PRECISION) USER-SUPPLIED TOLERANCE USED TO CONTROL
63 * THE TERMINATION CRITERION. EPS SHOULD BE CHOSEN ACCORDING
64 * TO THE ACCURACY REQUIRED BY THE UNDERLYING PROBLEM AND TO
65 * THE MACHINE ACCURACY ALSO (RECOMMENDED VALUE ON ENTRY:
67 * MAXIT (INTEGER) MAXIMUM PERMITTED NUMBER OF ITERATIONS.
68 * IPRT (INTEGER) PRINTING CONTROL. G
69 * = 0 : NO PRINTING OF INTERMEDIATE RESULTS
70 * = +/- L : PRINTING OF INTERMEDIATE RESULTS AT EVERY ABS(L)-TH
71 * ITERATION; IF IPRT < 0, PRINTING OF ALL INPUT
72 * PARAMETERS OF DSUMSQ IN ADDITION.
73 * MFR (INTEGER) ON EXIT, MFR CONTAINS THE NUMBER OF FREE VARIABLES
74 * AT THE SOLUTION POINT.
75 * IAFR (INTEGER) ONE-DIMENSIONAL ARRAY OF LENGTH 2 * N , USED AS
76 * WORKING SPACE. ON EXIT, THE FIRST MFR ELEMENTS OF IAFR
77 * CONTAIN THE INDICES OF THE FREE VARIABLES AT THE SOLUTION
79 * PHI (DOUBLE PRECISION) ON EXIT, PHI CONTAINS THE VALUE OF THE
80 * OBJECTIVE FUNCTION AT THE MINIMUM POINT.
81 * DPHI (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH N .
82 * ON EXIT, DPHI CONTAINS THE DERIVATIVES OF THE OBJECTIVE
83 * FUNCTION WITH RESPECT TO A (THE GRADIENT) AT THE LAST
85 * COV (DOUBLE PRECISION) TWO-DIMENSIONAL ARRAY OF DIMENSION (NC,N).
86 * ON EXIT, COV CONTAINS AN APPROXIMATION TO THE COVARIANCE
88 * STD (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH N .
89 * ON EXIT, STD CONTAINS APPROXIMATIONS TO THE STANDARD
90 * DEVIATIONS OF THE MODEL PARAMETER ESTIMATORS.
91 * W (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH
92 * 9*N+4*M+2*M*N+3*N*N , USED AS WORKING SPACE.
93 * NERROR (INTEGER) ERROR INDICATOR. ON EXIT:
94 * = 0: NO ERROR OR WARNING DETECTED.
95 * = 1: AT LEAST ONE OF THE CONSTANTS K, M, N, NX, NC, MAXIT IS
96 * ILLEGAL OR AT LEAST FOR ONE J THE RELATION
97 * AL(J) .LE. AU(J) IS NOT TRUE.
98 * = 2: THE MAXIMUM NUMBER MAXIT OF ITERATIONS HAS BEEN
100 * = 3: THE OBJECTIVE FUNCTION PHI OR ITS DERIVATIVE IS NOT
101 * DEFINED FOR THE CURRENT VALUES OF THE UNKNOWN
102 * PARAMETER VECTOR A.
103 * = 4: THE ROUTINES DGEQPF , DORMQR , DTRTRS OF THE LINEAR
104 * ALGEBRA PACKAGE LAPACK (F001) WERE UNABLE TO SOLVE
105 * THE LINEAR LEAST SQUARES PROBLEMS
106 * OR THE ROUTINE DSINV (F012) WAS UNABLE TO COMPUTE THE
107 * COVARIANCE MATRIX .
109 *************************************************************************
111 * THE FOLLOWING SUBROUTINE IS A SIMPLE EXAMPLE FOR SUB.
113 * SUBROUTINE SUB (K,X,N,A,F,DF,MODE,NERROR)
114 * IMPLICIT DOUBLE PRECISION (A-H,O-Z)
115 * DIMENSION A(*),X(*),DF(*)
118 * T=X(2)*A(2)+X(3)*A(3)
126 * IF(MODE .EQ. 0) RETURN
128 * DF(2)=-X(1)*X(2)/T**2
129 * DF(3)=-X(1)*X(3)/T**2
133 *************************************************************************
149 CALL D501L1('DFUNFT',SUB,K,M,X,NX,Y,SY,MODE,EPS,MAXIT,
150 1 IPRT,N,A,AL,AU,PHI,DPHI,IAFR,MFR,COV,NC,STD,
151 2 W(M1),W(M2),W(M3),W(M4),W(M5),W(M6),W(M7),W(M8),
152 3 W(M9),W(MA),W(MB),W(MC),W(MD),IAFR(N+1),NERROR)