]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/mathlib/gen/d/dmaxlk.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / d / dmaxlk.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1996/04/01 15:02:20  mclareni
6 * Mathlib gen
7 *
8 *
9 #include "gen/pilot.h"
10       SUBROUTINE DMAXLK(SUB,K,M,N,NX,X,A,AL,AU,MODE,EPS,MAXIT,IPRT,
11      +                  MFR,IAFR,PHI,DPHI,W,NERROR)
12
13 #include "gen/imp64.inc"
14       DIMENSION AL(*),AU(*),A(*),DPHI(*),IAFR(*),X(*),W(*)
15       EXTERNAL SUB
16
17 ***********************************************************************
18 *   LEAMAX, VERSION: 15.03.1993
19 ***********************************************************************
20 *
21 *   DMAXLK IS THE STEERING ROUTINE FOR MAXIMUM LIKELIHOOD ESTIMATION.
22 *
23 *   SUBROUTINE CALLED:    D501L2
24 *
25 *
26 *   THE CONSTANTS, VARIABLES AND ARRAYS HAVE THE FOLLOWING MEANING.
27 *
28 *   SUB    NAME OF USER-SUPPLIED SUBROUTINE SUBPROGRAM, DECLARED
29 *          EXTERNAL IN THE CALLING PROGRAM. THIS SUBPROGRAM MUST PROVIDE
30 *          THE VALUES OF THE FUNCTION AND, IF MODE=1, THE VALUES OF THE
31 *          DERIVATIVES (SEE EXAMPLE) .
32 *   K      (INTEGER) DIMENSION OF A SINGLE DATA POINT (OBSERVATION) X .
33 *   M      (INTEGER) NUMBER OF DATA POINTS (OBSERVATIONS).
34 *   N      (INTEGER) NUMBER OF UNKNOWN PARAMETERS A.
35 *   NX     (INTEGER) DECLARED FIRST DIMENSION OF ARRAY  X  IN THE
36 *          CALLING PROGRAM, WITH  NX .GE. K .
37 *   X      (DOUBLE PRECISION) TWO-DIMENSIONAL ARRAY OF DIMENSION (NX,M).
38 *          ON ENTRY, X MUST CONTAIN THE DATA SET  (X(I)) (THE I-TH
39 *          COLUMN OF X BELONGS TO THE DATA POINT X(I), I=1,...,M).
40 *   A      (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
41 *          ON ENTRY, A  MUST CONTAIN THE STARTING VALUES OF THE UNKNOWN
42 *          PARAMETERS FOR THE LEVENBERG-MARQUARDT ALGORITHM.
43 *          ON EXIT, A  CONTAINS AN APPROXIMATION OF THE MINIMUM POINT.
44 *   AL     (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
45 *          ON ENTRY, AL  MUST CONTAIN THE LOWER BOUNDS OF  A .
46 *   AU     (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
47 *          ON ENTRY, AU  MUST CONTAIN THE UPPER BOUNDS OF  A .
48 *   MODE   (INTEGER)
49 *          = 0: THE DERIVATIVE IS COMPUTED NUMERICALLY.
50 *          = 1: THE DERIVATIVE HAS TO BE EVALUATED IN SUBPROGRAM  SUB .
51 *   EPS    (DOUBLE PRECISION) USER-SUPPLIED TOLERANCE USED TO CONTROL
52 *          THE TERMINATION CRITERION. EPS SHOULD BE CHOSEN ACCORDING
53 *          TO THE ACCURACY REQUIRED BY THE UNDERLYING PROBLEM AND TO
54 *          THE MACHINE ACCURACY ALSO (RECOMMENDED VALUE ON ENTRY:
55 *          1D-6 ... 1D-12 ).
56 *   MAXIT  (INTEGER) MAXIMUM PERMITTED NUMBER OF ITERATIONS.
57 *   IPRT   (INTEGER) PRINTING CONTROL.                                  G
58 *          = 0     : NO PRINTING OF INTERMEDIATE RESULTS
59 *          = +/- L : PRINTING OF INTERMEDIATE RESULTS AT EVERY ABS(L)-TH
60 *                    ITERATION; IF  IPRT < 0, PRINTING OF ALL INPUT
61 *                    PARAMETERS OF DSUMSQ IN ADDITION.
62 *   MFR    (INTEGER) ON EXIT, MFR CONTAINS THE NUMBER OF FREE VARIABLES
63 *          AT THE SOLUTION POINT.
64 *   IAFR   (INTEGER) ONE-DIMENSIONAL ARRAY OF LENGTH  >= N , USED AS
65 *          WORKING SPACE. ON EXIT, THE FIRST  MFR  ELEMENTS OF  IAFR
66 *          CONTAIN THE INDICES OF THE FREE VARIABLES AT THE SOLUTION
67 *          POINT.
68 *   PHI    (DOUBLE PRECISION) ON EXIT, PHI  CONTAINS THE VALUE OF THE
69 *          OBJECTIVE FUNCTION AT THE MINIMUM POINT.
70 *   DPHI   (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
71 *          ON EXIT, DPHI  CONTAINS THE DERIVATIVES OF THE OBJECTIVE
72 *          FUNCTION WITH RESPECT TO A (THE GRADIENT) AT THE LAST
73 *          ITERATION POINT.
74 *   W      (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH
75 *          7*N+2*N*N , USED AS WORKING SPACE.
76 *   NERROR (INTEGER) ERROR INDICATOR. ON EXIT:
77 *           = 0: NO ERROR OR WARNING DETECTED.
78 *           = 1: AT LEAST ONE OF THE CONSTANTS K, M, N, NX, MAXIT IS
79 *                ILLEGAL OR AT LEAST FOR ONE J THE RELATION
80 *                AL(J) .LE. AU(J)  IS NOT TRUE.
81 *           = 2: THE MAXIMUM NUMBER  MAXIT  OF ITERATIONS HAS BEEN
82 *                REACHED.
83 *           = 3: THE OBJECTIVE FUNCTION  PHI  OR ITS DERIVATIVE IS NOT
84 *                DEFINED FOR THE CURRENT VALUES OF THE UNKNOWN
85 *                PARAMETER VECTOR  A.
86 *           = 4: THE ROUTINE  DSINV  (F012)  WAS UNABLE TO SOLVE THE
87 *                NORMAL EQUATIONS.
88 *
89 *************************************************************************
90 *
91 *   THE FOLLOWING SUBROUTINE IS A SIMPLE EXAMPLE FOR SUB.
92 *
93 *     SUBROUTINE SUB(K,X,N,A,F,DF,MODE,NERROR)
94 *
95 *     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
96 *     DIMENSION A(*),X(*),DF(*)
97 *     PARAMETER (PIR = 0.56418 95835 47756 287D0)
98 *     NERROR=1
99 *     IF(A(1) .EQ. 0) RETURN
100 *     T=0.5D0*((X(1)-1)/A(1))**2)
101 *     F=PIR*EXP(-T)/A(1)
102 *     IF(F .EQ. 0) RETURN
103 *     NERROR=0
104 *     IF(MODE .NE. 0) DF(1)=-F*(1-2*T)/A(1)**2
105 *     RETURN
106 *     END
107 *
108 *************************************************************************
109
110        CALL D501L2(K,M,X,NX,MODE,EPS,MAXIT,IPRT,N,A,AL,AU,
111      1             PHI,DPHI,IAFR,MFR,W(1),W(N+1),W(2*N+1),W(3*N+1),
112      2             W(4*N+1),W(5*N+1),W(6*N+1),W(7*N+1),W(7*N+N*N+1),
113      3             SUB,NERROR)
114
115       RETURN
116
117       END
118
119
120
121