This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / d / dsumsq.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 DSUMSQ(SUB,M,N,NC,A,AL,AU,MODE,EPS,MAXIT,IPRT,
11      +                  MFR,IAFR,PHI,DPHI,COV,STD,W,NERROR)
12
13 #include "gen/imp64.inc"
14
15       DIMENSION A(*),AL(*),AU(*),DPHI(*),IAFR(*)
16       DIMENSION COV(NC,*),STD(*)
17       DIMENSION W(*)
18
19       EXTERNAL SUB
20
21
22 ***********************************************************************
23 *   LEAMAX, VERSION: 15.03.1993
24 ************************************************************************
25 *
26 *   DSUMSQ IS THE STEERING ROUTINE FOR MINIMIZING A SUM OF SQUARES
27 *
28 *   SUBROUTINE CALLED:     D501L1
29 *
30 *
31 *   THE CONSTANTS, VARIABLES AND ARRAYS HAVE THE FOLLOWING MEANING.
32 *
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 *   M      (INTEGER) NUMBER OF NONLINEAR FUNCTIONS.
38 *   N      (INTEGER) NUMBER OF UNKNOWN PARAMETERS A.
39 *   NC     (INTEGER) DECLARED FIRST DIMENSION OF ARRAY  COV  IN THE
40 *          CALLING PROGRAM, WITH  NC .GE. N .
41 *   A      (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
42 *          ON ENTRY, A  MUST CONTAIN THE STARTING VALUES OF THE UNKNOWN
43 *          PARAMETERS FOR THE LEVENBERG-MARQUARDT ALGORITHM.
44 *          ON EXIT, A  CONTAINS AN APPROXIMATION OF THE MINIMUM POINT.
45 *   AL     (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
46 *          ON ENTRY, AL  MUST CONTAIN THE LOWER BOUNDS OF  A .
47 *   AU     (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
48 *          ON ENTRY, AU  MUST CONTAIN THE UPPER BOUNDS OF  A .
49 *   MODE   (INTEGER)
50 *          = 0: THE JACOBIAN IS COMPUTED NUMERICALLY
51 *          = 1: THE JACOBIAN HAS TO BE EVALUATED IN SUBPROGRAM  SUB .
52 *   EPS    (DOUBLE PRECISION) USER-SUPPLIED TOLERANCE USED TO CONTROL
53 *          THE TERMINATION CRITERION. EPS SHOULD BE CHOSEN ACCORDING
54 *          TO THE ACCURACY REQUIRED BY THE UNDERLYING PROBLEM AND TO
55 *          THE MACHINE ACCURACY ALSO (RECOMMENDED VALUE ON ENTRY:
56 *          1D-6 ... 1D-12 ).
57 *   MAXIT  (INTEGER) MAXIMUM PERMITTED NUMBER OF ITERATIONS.
58 *   IPRT   (INTEGER) PRINTING CONTROL.
59 *          = 0     : NO PRINTING OF INTERMEDIATE RESULTS
60 *          = +/- L : PRINTING OF INTERMEDIATE RESULTS AT EVERY ABS(L)-TH
61 *                    ITERATION; IF  IPRT < 0, PRINTING OF ALL INPUT
62 *                    PARAMETERS OF DSUMSQ IN ADDITION.
63 *   MFR    (INTEGER) ON EXIT, MFR CONTAINS THE NUMBER OF FREE VARIABLES
64 *          AT THE SOLUTION POINT.
65 *   IAFR   (INTEGER) ONE-DIMENSIONAL ARRAY OF LENGTH  2 * N , USED AS
66 *          WORKING SPACE. ON EXIT, THE FIRST  MFR  ELEMENTS OF  IAFR
67 *          CONTAIN THE INDICES OF THE FREE VARIABLES AT THE SOLUTION
68 *          POINT.
69 *   PHI    (DOUBLE PRECISION) ON EXIT, PHI  CONTAINS THE VALUE OF THE
70 *          OBJECTIVE FUNCTION AT THE MINIMUM POINT.
71 *   DPHI   (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
72 *          ON EXIT, DPHI  CONTAINS THE DERIVATIVES OF THE OBJECTIVE
73 *          FUNCTION WITH RESPECT TO A (THE GRADIENT) AT THE LAST
74 *          ITERATION POINT.
75 *   COV    (DOUBLE PRECISION) TWO-DIMENSIONAL ARRAY OF DIMENSION (NC,N).
76 *          ON EXIT, COV CONTAINS AN APPROXIMATION TO THE COVARIANCE
77 *          MATRIX.
78 *   STD    (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH  N .
79 *          ON EXIT, STD  CONTAINS APPROXIMATIONS TO THE STANDARD
80 *          DEVIATIONS OF THE MODEL PARAMETER ESTIMATORS.
81 *   W      (DOUBLE PRECISION) ONE-DIMENSIONAL ARRAY OF LENGTH
82 *          9*N+4*M+2*M*N+3*N*N , USED AS WORKING SPACE.
83 *   NERROR (INTEGER) ERROR INDICATOR. ON EXIT:
84 *           = 0: NO ERROR OR WARNING DETECTED.
85 *           = 1: AT LEAST ONE OF THE CONSTANTS M, N, NC, MAXIT IS
86 *                ILLEGAL OR AT LEAST FOR ONE J THE RELATION
87 *                AL(J) .LE. AU(J)  IS NOT TRUE.
88 *           = 2: THE MAXIMUM NUMBER  MAXIT  OF ITERATIONS HAS BEEN
89 *                REACHED.
90 *           = 3: THE OBJECTIVE FUNCTION  PHI  OR ITS DERIVATIVE IS NOT
91 *                DEFINED FOR THE CURRENT VALUES OF THE UNKNOWN
92 *                PARAMETER VECTOR  A.
93 *           = 4: THE ROUTINES  DGEQPF , DORMQR , DTRTRS  OF THE LINEAR
94 *                ALGEBRA PACKAGE  LAPACK (F001)  WERE UNABLE TO SOLVE
95 *                THE LINEAR LEAST SQUARES PROBLEMS
96 *                OR THE ROUTINE  DSINV (F012)  WAS UNABLE TO COMPUTE THE
97 *                COVARIANCE MATRIX .
98 *
99 *************************************************************************
100 *
101 *   THE FOLLOWING SUBROUTINE IS A SIMPLE EXAMPLE FOR SUB.
102 *
103 *     SUBROUTINE SUB(N,A,M,F,DF,MODE,NERROR)
104 *     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
105 *     PARAMETER (Z0 = 0)
106 *     DIMENSION A(*),F(*),DF(M,*)
107 *     NERROR=0
108 *     F(1)=A(1)-1D6
109 *     F(2)=A(2)-2D-6
110 *     F(3)=A(1)*A(2)-2
111 *     IF(MODE .EQ. 0) RETURN
112 *     CALL DMSET(M,N,Z0,DF(1,1),DF(1,2),DF(2,1))
113 *     DF(1,1)=1
114 *     DF(2,2)=1
115 *     DF(3,1)=A(2)
116 *     DF(3,2)=A(1)
117 *     RETURN
118 *     END
119 *
120 *************************************************************************
121
122       M1=1
123       M2=M1+N
124       M3=M2+N
125       M4=M3+N
126       M5=M4+N
127       M6=M5+2*M
128       M7=M6+3*N
129       M8=M7+N
130       M9=M8+M+N
131       MA=M9+(N+M)*N
132       MB=MA+N*N
133       MC=MB+N*N
134       MD=MC+M
135
136       CALL D501L1('DSUMSQ',SUB,1,M,X,1,Y,SY,MODE,EPS,MAXIT,
137      1            IPRT,N,A,AL,AU,PHI,DPHI,IAFR,MFR,COV,NC,STD,
138      2            W(M1),W(M2),W(M3),W(M4),W(M5),W(M6),W(M7),W(M8),
139      3            W(M9),W(MA),W(MB),W(MC),W(MD),IAFR(N+1),NERROR)
140
141       RETURN
142
143       END
144
145
146