5 * Revision 1.1.1.1 1996/04/01 15:02:19 mclareni
10 SUBROUTINE D501L2(K,N,X,NX,MODE,EPS,MAXIT,IPRT,M,A,AL,AU,
11 1 PHI1,DPHI,IAFR,MFR,STD,P,LAMU,DSCAL,B,W1,W2,
14 #include "gen/imp64.inc"
15 #include "gen/def64.inc"
16 + JP2,LAMBDA,LAMU,LK,MY
17 LOGICAL LFN,LID,LRP,LPR
18 DIMENSION X(*),A(*),AL(*),AU(*),DPHI(*),STD(*),P(*),LAMU(*)
19 DIMENSION DSCAL(*),B(*),W1(*),W2(*),AM(M,*),COV(M,*),IAFR(*)
20 PARAMETER (Z0 = 0, Z1 = 1, HALF = Z1/2, R3 = Z1/3, R10 = Z1/10)
21 PARAMETER (SIG1 = R10, SIG2 = 11*R10, COEF = R10**3, STEP = Z1)
22 PARAMETER (RHO1 = R10**4, RHO2 = Z1/4, RHO3 = 3*Z1/4)
25 ************************************************************************
26 * LEAMAX, VERSION: 15.03.1993
27 ************************************************************************
29 * THIS ROUTINE IS ONE OF THE MAIN ROUTINES OF THE LEAMAX PACKAGE
30 * FOR SOLVING THE PROBLEM OF MAXIMUM LIKELIHOOD ESTIMATION.
31 * BOUNDS ON THE VARIABLES MAY BE SET.
33 ************************************************************************
35 ************************************************************************
36 * COMPUTE AN APPROXIMATION EPS0 TO THE RELATIVE MACHINE PRECISION
37 ************************************************************************
41 IF (Z1+EPS0 .NE. Z1) GO TO 10
44 ************************************************************************
45 * CHECK THE VALUES OF INPUT PARAMETERS
46 ************************************************************************
50 CALL D501P1(K,N,M,X,NX,Y,SY,MODE,EPS0,EPS,MAXIT,IPRT,M,A,AL,AU,
53 IF(NERROR .NE. 0) RETURN
55 ************************************************************************
57 ************************************************************************
68 CALL DVSET(M,Z1,DSCAL(1),DSCAL(2))
69 CALL DVSET(M,Z0,LAMU(1),LAMU(2))
70 CALL DVSET(M,Z0,STD(1),STD(2))
72 ************************************************************************
73 * COMPUTE INITIAL VALUE PHI1 OF OBJECTIVE FUNCTION
74 ************************************************************************
79 CALL SUB(K,X(IX),M,A,F0,ZZ,0,NERROR)
80 IF(F0 .LE. 0 .OR. NERROR .NE. 0) THEN
87 ************************************************************************
88 * COMPUTE J(TRANS) X J, B, DPHI, DSCAL, LAMU, MFR, IAFR
89 ************************************************************************
91 CALL D501N2(K,N,M,A,AL,AU,X,NX,W1,B,DPHI,DSCAL,LAMU,AM,COV,
92 + IAFR,MFR,SUB,EPS0,EPS1,MODE,NERROR)
93 IF(NERROR .NE. 0) RETURN
95 ************************************************************************
96 * IF MFR = 0 MINIMUM IN A CORNER; STOP ITERATION
97 ************************************************************************
99 IF(MFR .EQ. 0) GO TO 190
101 ************************************************************************
103 ************************************************************************
108 ************************************************************************
109 * COMPUTE THE L2-NORM OF THE PROJECTED GRADIENT
110 ************************************************************************
112 DPHINO=SQRT(DVMPY(MFR,B(1),B(2),B(1),B(2)))
114 IF(LPR) CALL D501P2(LRP,M,A,DPHI,STD,LAMU,PHI1,DPHINO,ITER,LFN,
119 40 DA=DA+(DSCAL(I)*A(IAFR(I)))**2
122 ************************************************************************
123 * ITERATION WITH GAUSS-NEWTON STEP
124 ************************************************************************
128 ************************************************************************
129 * SOLVE NORMAL EQUATIONS
130 ************************************************************************
132 CALL DVSCL(MFR,-Z1,B(1),B(2),W1(1),W1(2))
133 CALL DSINV(MFR,AM,M,NERROR)
135 IF(NERROR .NE. 0) THEN
139 CALL DMMPY(MFR,MFR,AM(1,1),AM(1,2),AM(2,1),W1(1),W1(2),P(1),P(2))
142 ************************************************************************
143 * COMPUTE THE L2-NORM OF THE SCALED VECTOR P
144 ************************************************************************
148 60 DP=DP+(DSCAL(I)*P(I))**2
151 ************************************************************************
152 * COMPUTE THE STEP SIZE ALFA
153 ************************************************************************
163 ALFA1=(ALFA1-A(IAFR(I)))/P(I)
164 IF(ALFA1 .EQ. 0) THEN
172 ************************************************************************
173 * COMPUTE INITIAL DELTA IF NECESSARY
174 ************************************************************************
177 DELTA=STEP*MAX(DA,DP/SIG2)
180 IF(DELTA .LE. EPS*DA) GO TO 190
182 ************************************************************************
183 * CONTINUATION WITH GAUSS-NEWTON OR SWITCHING TO LEVENBERG-MARQUARDT?
184 ************************************************************************
186 IF(DP .GT. SIG2*DELTA) THEN
188 ************************************************************************
189 * DO THE LEVENBERG - MARQUARDT STEP, (HEBDEN'S METHOD).
190 * - COMPUTE THE LM - PARAMETER LAMBDA
191 * - COMPUTE THE CORRESPONDING STEP P, ITS DP AND ALFA.
192 ************************************************************************
194 CALL DVSCL(MFR,-Z1,B(1),B(2),STD(1),STD(2))
197 80 UK=UK+(DPHI(IAFR(I))/DSCAL(I))**2
200 ************************************************************************
201 * COMPUTE INITIAL LAMBDA
202 ************************************************************************
210 IF(ITERA .GE. 50) GO TO 190
212 ************************************************************************
213 * RESET LAMBDA IF NECESSARY
214 ************************************************************************
216 IF(LK .GE. LAMBDA .OR. LAMBDA .GE. UK)
217 + LAMBDA=MAX(COEF*UK,SQRT(LK*UK))
219 ************************************************************************
220 * COMPUTE NEW P FOR NEW LAMBDA
221 ************************************************************************
223 CALL DMCPY(MFR,MFR,COV(1,1),COV(1,2),COV(2,1),
224 + AM(1,1),AM(1,2),AM(2,1))
226 100 AM(I,I)=AM(I,I)+LAMBDA*DSCAL(I)**2
228 ************************************************************************
229 * SOLVE NORMAL EQUATIONS
230 ************************************************************************
232 CALL DSINV(MFR,AM,M,NERROR)
233 IF(NERROR .NE. 0) THEN
237 CALL DMMPY(MFR,MFR,AM(1,1),AM(1,2),AM(2,1),STD(1),STD(2),
240 ************************************************************************
241 * COMPUTE THE L2-NORM OF THE SCALED VECTOR P
242 ************************************************************************
246 110 DP=DP+(DSCAL(I)*P(I))**2
249 ************************************************************************
250 * STOP ITERATION IN THE CASE OF NORM EQUAL TO ZERO
251 ************************************************************************
253 IF (DP .LE. 0) GO TO 190
255 IF(SIG1*DELTA .GT. DP .OR. DP .GT. SIG2*DELTA) THEN
257 ************************************************************************
258 * CONTINUE ITERATION FOR LAMBDA
259 ************************************************************************
263 120 W1(I)=DSCAL(I)**2*P(I)
264 P1P=-DMBIL(MFR,W1(1),W1(2),AM(1,1),AM(1,2),AM(2,1),
267 ************************************************************************
268 * UPDATE LK, UK, LAMBDA
269 ************************************************************************
271 IF(P1 .LT. 0) UK=LAMBDA
272 LK=MAX(LK,LAMBDA-P1/P1P)
273 IF(LK .GE. UK) UK=2*LK
274 LAMBDA=LAMBDA-(DP/DELTA)*(P1/P1P)
279 ************************************************************************
280 * END OF LEVENBERG - MARQUARDT STEP
281 ************************************************************************
291 ALFA1=(ALFA1-A(IAFR(I)))/P(I)
292 IF(ALFA1 .EQ. 0) THEN
300 ************************************************************************
301 * COMPUTE A + ALPHA * P
302 ************************************************************************
303 CALL DVCPY(M,A(1),A(2),W1(1),W1(2))
305 140 W1(IAFR(I))=A(IAFR(I))+ALFA*P(I)
307 ************************************************************************
308 * COMPUTE VALUE PHI2 OF OBJECTIVE FUNCTION
309 ************************************************************************
314 CALL SUB(K,X(IX),M,W1,F0,ZZ,0,NERROR)
315 IF(F0 .LE. 0 .OR. NERROR .NE. 0) THEN
323 AAU=MAX(ABS(PHI1),ABS(PHI2))
324 IF(AAU .GT. 0) PHMAXI=1/AAU
326 CALL DVSCL(MFR,PHMAXI,P(1),P(2),W2(1),W2(2))
327 JP2=DMBIL(MFR,W2(1),W2(2),COV(1,1),COV(1,2),COV(2,1),W2(1),W2(2))
329 ************************************************************************
330 * COMPUTE THE APPROXIMATION MEASURE RHO AND THE UPDATING FACTOR MY
332 ************************************************************************
334 IF(PHI1 .LE. PHI2) THEN
338 S2=2*(PHI1-PHI2)*PHMAXI**2
339 S3=LAMBDA*(DP*PHMAXI)**2
346 MY=MIN(MAX(MY/S2,R10),HALF)
350 ************************************************************************
351 * END OF COMPUTATTION OF RHO AND MY
352 ************************************************************************
354 ************************************************************************
355 * IF RHO .LE. RHO1, REDUCE DELTA BY FACTOR MY AND MAKE NEW LEVENBERG-
356 * MARQUARDT STEP, OTHERWISE ACCEPT P
357 ************************************************************************
359 IF(RHO .LE. RHO1) THEN
363 160 DA=DA+(DSCAL(I)*A(IAFR(I)))**2
367 CALL DVCPY(M,W1(1),W1(2),A(1),A(2))
370 170 DA=DA+(DSCAL(I)*A(IAFR(I)))**2
374 ************************************************************************
375 * COMPUTE J(TRANS) X J, B, DPHI, DSCAL, LAMU, MFR, IAFR
376 ************************************************************************
378 CALL D501N2(K,N,M,A,AL,AU,X,NX,W1,B,DPHI,DSCAL,LAMU,AM,COV,
379 + IAFR,MFR,SUB,EPS0,EPS1,MODE,NERROR)
380 IF(NERROR .NE. 0) RETURN
382 ************************************************************************
383 * IF MFR = 0 MINIMUM IN A CORNER; STOP ITERATION
384 ************************************************************************
391 ************************************************************************
392 * COMPUTE THE L2-NORM OF THE PROJECTED GRADIENT
393 ************************************************************************
395 DPHINO=SQRT(DVMPY(MFR,B(1),B(2),B(1),B(2)))
397 ************************************************************************
398 * TERMINATION CRITERION
399 ************************************************************************
402 1 .AND. PHI1-PHI2 .LE. EPS*(1+ABS(PHI2))
403 2 .AND. DP .LE. SQRT(EPS)*(1+DA)
404 3 .AND. DPHINO .LE. EPS**R3*(1+ABS(PHI2))) LFN=.TRUE.
410 IF(ITER .GE. MAXIT) THEN
411 IF(LPR) CALL D501P2(LRP,M,A,DPHI,STD,LAMU,PHI1,DPHINO,ITER,LFN,
418 IF(MOD(ITER,IPRT) .EQ. 0)
419 1 CALL D501P2(LRP,M,A,DPHI,STD,LAMU,PHI1,DPHINO,ITER,LFN,
423 ************************************************************************
424 * UPDATE DELTA AND GO BACK TO GAUSS-NEWTON STEP
425 ************************************************************************
427 IF(MFROLD .NE. MFR) LID=.FALSE.
428 IF(RHO .LE. RHO2) THEN
430 ELSE IF(RHO .GE. RHO3 .OR. LAMBDA .EQ. 0) THEN
438 ************************************************************************
440 ************************************************************************
444 ************************************************************************
445 * COMPUTE J(TRANS) X J, B, DPHI, DSCAL, LAMU, MFR, IAFR
446 ************************************************************************
448 CALL D501N2(K,N,M,A,AL,AU,X,NX,W1,B,DPHI,DSCAL,LAMU,AM,COV,
449 + IAFR,MFR,SUB,EPS0,EPS1,MODE,MERROR)
450 IF(MERROR .NE. 0) THEN
455 ************************************************************************
456 * COMPUTE THE L2-NORM OF THE PROJECTED GRADIENT
457 ************************************************************************
459 DPHINO=SQRT(DVMPY(MFR,B(1),B(2),B(1),B(2)))
461 ************************************************************************
462 * COMPUTE THE VALUE PHI1 OF THE OBJECTIVE FUNCTION
463 ************************************************************************
468 CALL SUB(K,X(IX),M,A,F0,ZZ,0,MERROR)
469 IF(F0 .LE. 0 .OR. MERROR .NE. 0) THEN
477 ************************************************************************
478 * PRINT LAST ITERATION RESULTS
479 ************************************************************************
481 IF(LPR) CALL D501P2(LRP,M,A,DPHI,STD,LAMU,PHI1,DPHINO,ITER,LFN,