C ALGORITHM 742, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 21, NO. 1, MARCH, 1995, P. 98-110. C c*** spsrc.f C...................................................................... C THIS SUBROUTINE INSERTS A KNOT, NAMELY THE DATA POINT X(INKNOT), C INTO THE SPLINE KNOT SEQUENCE OF THE THE LINEAR SPLINE C APPROXIMATION SX(.) DEFINED IN SUBROUTINE L2CXFT. C C CALLS SUBROUTINE PLUS. C...................................................................... SUBROUTINE ADDKNT(INKNOT,E,B,D,X,F,AKN,IAKN,IACT,NK,NACT,I1,N) * IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION E(I1-1:N),B(I1-1:N),D(I1-1:N),X(I1:N),F(I1:N), 1 AKN(I1-2:N),IAKN(I1-1:N),IACT(I1:N) C C.... I N P U T .... C INKNOT INTEGER VARIABLE, SUCH THAT X(INKNOT) IS INSERTED C INTO THE KNOT SEQUENCE AKN(.). C E,B,D,X,F,AKN,IAKN,IACT,I1,N,NK,NACT AS THEY ARE C DEFINED IN SUBROUTINE L2CXFT. C C.... O U T P U T .... C E,B,D,AKN,IAKN,IACT AFTER INSERTING X(INKNOT) INTO AKN(.). C NK INCREASED BY ONE. C NACT DECREASED BY ONE. C C.... M E T H O D .... C FIND POSITION J IN THE KNOT SEQUENCE AKN(.) SUCH THAT C AKN(J-1) < X(INKNOT) < AKN(J) BEFORE INSERTION AND C AKN(J)=X(INKNOT) AFTER INSERTION. C CALL SUBROUTINE PLUS TO MODIFY THE NORMAL EQUATIONS THAT ARE C AFFECTED BY THE KNOT INSERTION. HENCE THE 'HAT' BASIS FUNCTIONS C AFFECTED BY THE INSERTION HAVE TO DETERMINED. THE J-TH BASIS C FUNCTION IS DEFINED FROM X(IP) TO X(IR), AND IS CENTERED AT C X(IQ). ALSO THE (J-1)-TH BASIS FUNCTIONS IS CENTERED AT X(IP) AND C IS DEFINED FROM X(IPL) TO X(IQ). THE (J+1)-TH BASIS FUNCTION C IS CENTERED AT X(IR) AND IS DEFINED FROM X(IQ) TO X(IRR). C REVISE IACT(.), THE INDICES OF THE ACTIVE CONSTRAINTS. C...................................................................... I0=I1-1 C C GIVEN X(INKNOT), APPLY BISECTION IN [I0,NK) IN ORDER TO FIND IP C SUCH THAT AKN(IP) < X(INKNOT) < AKN(IP+1). C IP=I0 IR=NK 20 IF (IR-IP.EQ.1) GO TO 30 IQ=(IP+IR)/2 IF (INKNOT .LT. IAKN(IQ)) THEN IR=IQ ELSE IP=IQ END IF GO TO 20 30 CONTINUE C DO 100 I=NK,IP+1,-1 B(I+1)=B(I) E(I+1)=E(I) D(I+1)=D(I) AKN(I+1)=AKN(I) 100 IAKN(I+1)=IAKN(I) J=IP+1 E(J)=0. B(J)=0. D(J)=0. NK=NK+1 AKN(J)=X(INKNOT) IAKN(J)=INKNOT C C DEFINE SUPPORTS OF NEW BASIS FUNCTIONS THAT FOLLOW THE KNOT C INSERTION. C IF (J.EQ.I1) THEN IPL=I1 ELSE IPL=IAKN(J-2) END IF C IF (J.EQ.NK-1) THEN IRR=N ELSE IRR=IAKN(J+2) END IF C IP=IAKN(J-1) IQ=IAKN(J) IR=IAKN(J+1) C C MODIFY NORMAL EQUATIONS. C CALL PLUS(X,F,AKN,E,B,D,NK,I1,N,IPL,IP,IQ,IR,IRR,J) C C REVISE ACTIVE CONSTRAINTS. C NACT>=I1 BECAUSE THE KNOT INSERTION SHOWS THAT THERE EXISTS C AT LEAST ONE ACTIVE CONSTRAINT. C IF (NACT.EQ.I1) GO TO 140 C C I1 THE INNER PRODUCT OF TWO VECTORS AND, C THE SPLINE COEFFICIENTS COEF(.) ARE DETERMINED BY SOLVING THE C NORMAL EQUATIONS C D(J)*COEF(J-1)+E(J)*COEF(J)+D(J+1)*COEF(J+1)=B(J) C FOR J=I1-1,I1,...,NK C WHERE C D(J)=, J=I1-1,I1,...,NK C E(J)=, J=I1-1,I1,...,NK C B(J)=, J=I1-1,I1,...,NK. C...................................................................... I0=I1-1 C C.....DERIVE COEF(.) BY FACTORIZATION C UE(I0)=E(I0) COEF(I0)=B(I0) DO 10 I=I0+1,NK UE(I)=E(I)-D(I)/UE(I-1)*D(I) 10 COEF(I)=B(I)-D(I)*COEF(I-1)/UE(I-1) COEF(NK)=COEF(NK)/UE(NK) DO 20 I=NK-1,I0,-1 20 COEF(I)=(COEF(I)-D(I+1)*COEF(I+1))/UE(I) C RETURN END C....................................................................... C THIS SUBROUTINE DELETES THE KNOT AKN(KNOUT) OF THE LINEAR C SPLINE APPROXIMATION SX(.) DEFINED IN SUBROUTINE L2CXFT. C C CALLS SUBROUTINE MINUS1. C....................................................................... SUBROUTINE DELKNT(E,B,D,AKN,IAKN,IACT,NK,NACT,I1,N,KNOUT) * IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION E(I1-1:N),B(I1-1:N),D(I1-1:N),AKN(I1-2:N),IAKN(I1-1:N), 1 IACT(I1:N) C C.... I N P U T .... C KNOUT INTEGER VARIABLE, SUCH THAT AKN(KNOUT) IS THE KNOT TO C BE DELETED FROM THE KNOT SEQUENCE AKN(.). C E,B,D,AKN,IAKN,IACT,I1,N,NK,NACT AS THEY ARE DEFINED IN C SUBROUTINE L2CXFT. C C.... O U T P U T .... C E,B,D,AKN,IAKN,IACT AFTER DELETING THE KNOT AKN(KNOUT). C NK DECREASED BY ONE. C NACT INCREASED BY ONE. C C.... M E T H O D .... C SINCE AKN(J) IS DELETED THE J-TH NORMAL EQUATION IS DELETED TOO. C THEN CALL SUBROUTINE MINUS1 TO MODIFY THE (J-1) AND (J+1) NORMAL C EQUATIONS. SHIFT E,B,D,AKN AND IAKN. C REVISE IACT(.), THE INDICES OF THE ACTIVE CONSTRAINTS. C....................................................................... I0=I1-1 J=IAKN(KNOUT)-1 C C MODIFY NORMAL EQUATIONS. C CALL MINUS1(E,B,D,AKN,I1,N,KNOUT) C C SHIFT ARRAYS. C DO 5 I=KNOUT,NK-1 AKN(I)=AKN(I+1) IAKN(I)=IAKN(I+1) E(I)=E(I+1) B(I)=B(I+1) 5 D(I)=D(I+1) C C SET LAST POSITION TO ZERO. C AKN(NK)=0. IAKN(NK)=0 E(NK)=0. B(NK)=0. D(NK)=0. NK=NK-1 C C UPDATE IACT(.). C C GIVEN J=IAKN(KNOUT)-1, APPLY BISECTION IN [I1,NACT] IN ORDER C TO FIND IR SUCH THAT IACT(IR-1) < J < IACT(IR) , OR C IQ IS OUTSIDE [I1,NACT]. C IF (NACT.EQ.I0) THEN IR=I1 GO TO 130 END IF IF (J.LT.IACT(I1)) THEN IR=I1 GO TO 110 END IF IF (J.GT.IACT(NACT)) THEN IR=NACT+1 GO TO 130 END IF C C APPLY BISECTION. C IP=I1 IR=NACT 100 IQ=(IP+IR)/2 IF (IR-IP.EQ.1) GO TO 110 IF (J.LT.IACT(IQ)) THEN IR=IQ ELSE IP=IQ END IF GO TO 100 110 CONTINUE DO 120 I=NACT,IR,-1 120 IACT(I+1)=IACT(I) 130 IACT(IR)=J NACT=NACT+1 C RETURN END C...................................................................... C L2CXFT: A FORTRAN SUBROUTINE FOR LEAST SQUARES DATA FITTING C WITH NON-NEGATIVE SECOND DIVIDED DIFFERENCES. C BY I.C. DEMETRIOU, DEPARTMENT OF ECONOMICS, UNIVERSITY OF ATHENS, C 8 PESMAZOGLOU STREET, ATHENS 105 59, GREECE. C TEL : (GR) 01-3242438, 8017732 C E-MAIL: DEMETRI@AUEB.ARIADNE-T.GR C...................................................................... C THE USER GIVES THE NOISY FUNCTION MEASUREMENTS F(I): I=1,2,...N C AT THE ABSCISSAE X(1) THE INNER PRODUCT OF TWO VECTORS AND, C THE COEFFICIENTS OF SX(.) ARE DETERMINED BY SOLVING THE C THE POSITIVE DEFINITE SYSTEM OF THE NORMAL EQUATIONS C EFFICIENTLY AND STABLY BY CHOLESKY FACTORIZATION C D(J)*COEF(J-1)+E(J)*COEF(J)+D(J+1)*COEF(J+1)=B(J) C FOR J=I1-1,I1,...,NK C WHERE BY <.,.> IS DENOTED THE SCALAR PRODUCT OF TWO VECTORS C AND C D(J)=, J=I1,I1+1,...,NK C E(J)=, J=I1-1,I1,...,NK C B(J)=, J=I1-1,I1,...,NK. C (SUBROUTINE CFLGRF). C C B) CALCULATION OF THE LAGRANGE MULTIPLIERS C THE LAGRANGE EQUATIONS AT AN ESTIMATE SX(.) ARE C 2*(SX(II+1)-F(II+1))=SIGMA(PAR(II)*A(II,.)) C FOR II=IACT(I), I=I1,I1+1,...,NACT C WHERE A(II,J) IS THE J-TH COMPONENT OF THE NORMAL C OF THE II-TH CONSTRAINT AND C A(II,J)<>0 ONLY FOR (II.LE.J.LE.II+2). C (ARRAY A(.,.) IS NOT ACTUALLY USED IN THIS SUBROUTINE; C INSTEAD ARRAYS EC(.) AND DC(.) ARE EMPLOYED.). BECAUSE C THIS SYSTEM IS OVERDETERMINED PAR(IACT(.)) IS DERIVED C BY CHOOSING FROM THE LAGRANGE EQUATIONS THOSE EQUATIONS THAT C CORRESPOND TO THE SECOND NON-ZERO COMPONENT OF A(IACT(.),.); C SO A BLOCK DIAGONAL POSITIVE DEFINITE SYSTEM IS OBTAINED THAT C IS SOLVED EFFICIENTLY AND STABLY BY CHOLESKY FACTORIZATION. C (SUBROUTINE CFLGRF). C C C) PARTICULAR METHODS ARE DEVELOPED FOR INSERTING INTO AND C DELETING FROM THE SPLINE APPROXIMATION ONE KNOT ECONOMICALLY. C (SUBROUTINES ADDKNT AND DELKNT). C...................................................................... C SET CERTAIN INITIAL VALUES. C MODE=1 I0=I1-1 ITREF=0 ITEST=0 ZERO=0. DO 10 I=1,10 10 ITER(I)=0 C IF (N.LT.I1) THEN MODE=4 CALL MESSGE(ZERO,0,0,ITER,10) GO TO 1000 END IF C C IF N=I1 OR N=I1+1 THEN THE DATA ITSELF IS THE REQUIRED FIT. C IF (N.EQ.I1) THEN SX(I1)=F(I1) AKN(I1-1)=X(I1) IAKN(I1-1)=I1 COEF(I1-1)=F(I1) CALL MESSGE(ZERO,0,0,ITER,20) GO TO 1000 END IF C IF (N.EQ.I1+1) THEN SX(I1)=F(I1) SX(N)=F(N) AKN(I1-1)=X(I1) AKN(I1)=X(N) IAKN(I1-1)=I1 IAKN(I1)=N COEF(I1-1)=F(I1) COEF(I1)=F(N) CALL MESSGE(ZERO,0,0,ITER,20) GO TO 1000 END IF C C.... I N I T I A L I Z E ............................................. C C THERE ARE N-2 CONSTRAINTS DEFINED BY THE DIVIDED DIFFERENCES. C WE ASSOCIATE THE I-TH CONSTRAINT WITH THE I-TH DIVIDED DIFFER- C ENCE. SET COEFFICIENTS OF FULL SYSTEM OF EQUATIONS OF LAGRANGE C MULTIPLIERS. SINCE GRAD(F)=2*(SX-F), THE COEFFICIENTS ARE C SCALED BY 2. C DO 50 I=I1,N-3 CX2=X(I+2)-X(I+1) CX1=X(I+1)-X(I) CX3=X(I+2)-X(I) CX2=1/CX2 CX1=1/CX1 EC(I)=-(CX1+CX2)/2 50 DC(I+1)=CX2/2 CX2=X(N)-X(N-1) CX1=X(N-1)-X(N-2) CX3=X(N)-X(N-2) CX2=1/CX2 CX1=1/CX1 EC(N-2)=-(CX1+CX2)/2 C DO 60 I=I1,N-2 60 PAR(I)=0.0 C C.... CALCULATE STARTING POINT BY L2ILS ............................... C CALL L2ILS(COEF,AKN,IAKN,D,E,B,Z,U,NK,F,X,I1,N) C C INITIALIZE INDICES OF ACTIVE CONSTRAINTS IN IACT(.). C J=I0 I=I1+1 IAKN(I0)=I1 KL=I0 80 IF (IAKN(J).LT.I .AND. I.LT.IAKN(J+1)) THEN KL=KL+1 IACT(KL)=I-1 I=I+1 GO TO 80 END IF J=J+1 I=I+1 IF (J.LT.NK) GO TO 80 NACT=KL ITER(2)=NACT-I0 C C.... ITERATE BY ONE, UNTIL FIRST FEASIBLE LAGRANGIAN VECTOR IS FOUND. C C CALCULATE COEF OVER KNOTS, SPLINE OVER ABSCISSAE AND C LAGRANGE MULTIPLIERS. C 90 CALL CFLGRF(SX,PAR,COEF,IACT,E,B,D,X,AKN,IAKN,F,DC,EC,U, 1 RES,NK,NACT,I1,N,ITREF,ITER(3)) ITER(3)=ITER(3)+1 C C FIND MINIMUM LAGRANGE MULTIPLIER. C IF (NACT .LE. I0) GO TO 150 AMINLA=PAR(IACT(I1)) IPAR=IACT(I1) IF (I1 .EQ. NACT) GO TO 110 DO 100 I=I1+1,NACT IF (PAR(IACT(I)) .LT. AMINLA) THEN AMINLA=PAR(IACT(I)) IPAR=IACT(I) END IF 100 CONTINUE 110 ITER(4)=NACT-I0 IF (AMINLA .GE. 0.0) GO TO 150 C C INSERT A KNOT WHERE THE LEAST NEGATIVE LAGRANGE MULTIPLIER. C INKNOT=IPAR+1 PAR(IPAR)=0.0 CALL ADDKNT(INKNOT,E,B,D,X,F,AKN,IAKN,IACT,NK,NACT,I1,N) GO TO 90 C C.... M A I N I T E R A T I O N ...................................... C 150 CONTINUE C C EXAMINE CONVEXITES AT ALL KNOTS OF SPLINE APPROXIMATION. C SPECIAL CASE: IF NK-I0=1 THEN SX(.) IS A STRAIGHT LINE. C IF (NK-I0 .EQ. 1) GO TO 1000 C C FIND THE KNOT OF THE MOST VIOLATED CONSTRAINT. C CVMAX=0. KL=I0 K=0 DO 160 J=I1,NK-1 JJ=IAKN(J) CKNOT=(SX(JJ+1)-SX(JJ))/(X(JJ+1)-X(JJ))- 1 (SX(JJ)-SX(JJ-1))/(X(JJ)-X(JJ-1)) SUM2=1/(X(JJ+1)-X(JJ))**2+ 1 ((X(JJ+1)-X(JJ-1))/((X(JJ+1)-X(JJ))*(X(JJ)-X(JJ-1))))**2+ 2 1/(X(JJ)-X(JJ-1))**2 SUM2=SQRT(SUM2) CKNOT=CKNOT/SUM2 IF (CKNOT .LT. 0.) K=K+1 IF (CKNOT .LT. CVMAX) THEN CVMAX=CKNOT KNTOUT=J IAKNJ=IAKN(J) KL=KL+1 END IF 160 CONTINUE C C IF KL=I0 THEN SX(.) IS CONVEX. SINCE AT THIS LEVEL PAR(.) ARE C ALL NON-NEGATIVE THE KUHN-TUCKER CONDITIONS ARE SATISFIED. C C.... T E R M I N A T I O N ........................................... C IF (KL .EQ. I0) GO TO 1000 C C MSG: PRINT CVMAX,IAKNJ,K. C IF (IPRINT.NE.0) CALL MESSGE(CVMAX,K,IAKNJ,ITER,160) C C POWELL'S SAFEGUARD TERMINATION TEST: C RETURN, IF DUE TO ROUNDING ERRORS, THE CHANGE IN SX(.) MAY C NOT INCREASE THE OBJECTIVE FUNCTION. C IF (ITER(1).EQ.0) GO TO 190 R=0.0 T=0.0 DO 170 I=I1,N R=R+(SX(I)-SXOLD(I))*(SX(I)+SXOLD(I)-2*F(I)) 170 T=T+ABS(SX(I)-SXOLD(I))*(ABS(SX(I)+SXOLD(I))+2*ABS(F(I))) IF (T+R.LE.T .OR. T+1.5*R.LE.T+R) THEN IF (ITEST.EQ.1) THEN MODE=2 IF (IPRINT.NE.0) CALL MESSGE(ZERO,0,0,ITER,170) C C MSG: L2CXFT RETURNS BECAUSE THE ACCURACY IS C INSUFFICIENT TO MAINTAIN INCREASING C THE FUNCTION VALUES. C GO TO 1000 END IF C IF (IPRINT.EQ.0) GO TO 180 IF (ITREF.EQ.0) CALL MESSGE (ZERO,0,0,ITER,180) C C MSG: ITERATIVE REFINEMENT IS INITIATED. C 180 ITREF=1 ITEST=1 ELSE ITEST=0 END IF 190 CONTINUE C C KEEP OLD LAGRANGE MULTIPLIERS AND OLD SPLINE APPROXIMATION. C DO 200 I=I1,N-2 200 PAROLD(I)=PAR(I) DO 210 I=I1,N 210 SXOLD(I)=SX(I) C C TERMINATION ON ITERATION COUNT. C ITER(1)=ITER(1)+1 IF (ITER(1).GT.3*(N-I0)) THEN MODE=3 CALL MESSGE(ZERO,0,0,ITER,210) C C MSG: L2CXFT QUITS ON ITERATION COUNT. C GO TO 1000 END IF C C CALCULATE A SEARCH DIRECTION (DELETE THE KNOT KNTOUT). C CALL DELKNT(E,B,D,AKN,IAKN,IACT,NK,NACT,I1,N,KNTOUT) ITER(6)=ITER(6)+1 C C SOLVE FOR SX(.) OVER AKN(.). C 220 CALL CFLGRF(SX,PAR,COEF,IACT,E,B,D,X,AKN,IAKN,F,DC,EC,U, 1 RES,NK,NACT,I1,N,ITREF,ITER(3)) ITER(3)=ITER(3)+1 C IPAR=IAKNJ-1 IF (IPRINT.NE.0) CALL MESSGE(PAR(IPAR),0,0,ITER,220) C C MSG: PRINT MULTIPLIER OF INSERTED CONSTRAINT. C C APPLY POWELL'S TECHNIQUE IN ORDER THAT THE INDEX IPAR C REMAIN IN ACTIVE SET. SET PAR(IPAR)=MAX(PAR(IPAR),0.0) C BECAUSE IN THEORY HOLDS THAT PAR(IPAR)>0. C IF (PAR(IPAR).LT.0.0) PAR(IPAR)=0.0 C C EXAMINE SIGN OF LAGRANGE MULTIPLIERS C 300 IF (NACT .EQ. I0) GO TO 150 KL=I0 THETA=2.0 DO 320 I=I1,NACT K=IACT(I) IF (PAR(K)) 310,320,320 310 RATIO=PAROLD(K)/(PAROLD(K)-PAR(K)) IF (THETA .LE. RATIO) GO TO 320 THETA=RATIO IPAR=K KL=I1 320 CONTINUE C C.... ITERATE IN THE PRIMAL SPACE ...................................... C IF KL=I0 THEN PAR(.) ARE NON-NEGATIVE. BRANCH WHERE TEST C PRIMAL FEASIBILITY. C IF (KL .EQ. I0) GO TO 150 C C.... RECOVER NON-NEGATIVITY OF LAGRANGE MULTIPLIERS ................... C DO 340 I=I1,NACT K=IACT(I) 340 PAROLD(K)=(1-THETA)*PAROLD(K)+THETA*PAR(K) C C INSERT KNOT IPAR+1 INTO THE SPLINE AND SOLVE FOR SX(.). C I1NEW=I1 350 INKNOT=IPAR+1 PAR(IPAR)=0. CALL ADDKNT(INKNOT,E,B,D,X,F,AKN,IAKN,IACT,NK,NACT,I1,N) ITER(5)=ITER(5)+1 C C TEST THE FEASIBILITY OF PAROLD(.). ALL PAROLD(.) MUST BE C NON-NEGATIVE BECAUSE OF THE WAY THETA WAS DETERMINED. OTHERWISE, C THIS IS DUE TO ROUND-OFF ERROR. HENCE, ANY NEGATIVITY C IS TREATED AS BEING ZERO. SEE LAWSON & HANSON (SOLVING C LEAST SQUARES PROBLEMS, PRENTICE-HALL, 1974, p.307). C IF (NACT .EQ. I0) GO TO 370 IF (I1NEW .GT. NACT) GO TO 370 DO 360 I=I1NEW,NACT IPAR=IACT(I) IF (PAROLD(IPAR) .LT. 0.0) THEN IF (IPRINT.NE.0) CALL MESSGE(PAROLD(IPAR),IPAR,0,ITER,350) C C MSG: ITERATION IN THE DUAL SPACE DUE TO ROUND OFF. C PRINT ACTIVE CONSTRAINT AND LAGRANGE MULTIPLIER. C I1NEW=I GO TO 350 END IF 360 CONTINUE C 370 CONTINUE C CALL CFLGRF(SX,PAR,COEF,IACT,E,B,D,X,AKN,IAKN,F,DC,EC,U, 1 RES,NK,NACT,I1,N,ITREF,ITER(3)) ITER(3)=ITER(3)+1 C C.... ITERATE IN THE DUAL SPACE ........................................ C GO TO 300 1000 CONTINUE C CALL MESSGE(ZERO,NACT-I0,MODE,ITER,1000) C C MSG: PRINT MODE AND C INITIAL ACTIVE SET C STARTING ACTIVE SET C FINAL ACTIVE SET C ADDITIONS OF CONSTRAINTS C DELETIONS OF CONSTRAINTS C C.... END OF SUBROUTINE L2CXFT ......................................... C RETURN END C...................................................................... C GIVEN N NOISY FUNCTION MEASUREMENTS F(I): I=1,2,...N C AT THE ABSCISSAE X(1) THE INNER PRODUCT OF TWO VECTORS AND, C THE COEFFICIENTS OF SX(.) ARE DETERMINED BY SOLVING THE C NORMAL EQUATIONS C D(I)*COEF(I-1)+E(I)*COEF(I)+D(I+1)*COEF(I+1)=B(I) C FOR I=I1-1,I1,...,J C WHERE C D(I)=, I=I1-1,I1,...,J C E(I)=, I=I1-1,I1,...,J C B(I)=, I=I1-1,I1,...,J. C C THEN PROCEED AS IN REFERENCE QUOTED. C...................................................................... C NO TEST ON THE CONDITIONS N=I1 BECAUSE THE KNOT INSERTION SHOWS THAT THERE EXISTS C AT LEAST ONE ACTIVE CONSTRAINT. C IF (NACT.EQ.I1) GO TO 140 C C I1 THE INNER PRODUCT OF TWO VECTORS AND, C THE SPLINE COEFFICIENTS COEF(.) ARE DETERMINED BY SOLVING THE C NORMAL EQUATIONS C D(J)*COEF(J-1)+E(J)*COEF(J)+D(J+1)*COEF(J+1)=B(J) C FOR J=I1-1,I1,...,NK C WHERE C D(J)=, J=I1-1,I1,...,NK C E(J)=, J=I1-1,I1,...,NK C B(J)=, J=I1-1,I1,...,NK. C...................................................................... I0=I1-1 C C.....DERIVE COEF(.) BY FACTORIZATION C UE(I0)=E(I0) COEF(I0)=B(I0) DO 10 I=I0+1,NK UE(I)=E(I)-D(I)/UE(I-1)*D(I) 10 COEF(I)=B(I)-D(I)*COEF(I-1)/UE(I-1) COEF(NK)=COEF(NK)/UE(NK) DO 20 I=NK-1,I0,-1 20 COEF(I)=(COEF(I)-D(I+1)*COEF(I+1))/UE(I) C RETURN END C....................................................................... C THIS SUBROUTINE DELETES THE KNOT AKN(KNOUT) OF THE LINEAR C SPLINE APPROXIMATION SX(.) DEFINED IN SUBROUTINE L2CXFT. C C CALLS SUBROUTINE MINUS1. C....................................................................... SUBROUTINE DELKNT(E,B,D,AKN,IAKN,IACT,NK,NACT,I1,N,KNOUT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION E(I1-1:N),B(I1-1:N),D(I1-1:N),AKN(I1-2:N),IAKN(I1-1:N), 1 IACT(I1:N) C C.... I N P U T .... C KNOUT INTEGER VARIABLE, SUCH THAT AKN(KNOUT) IS THE KNOT TO C BE DELETED FROM THE KNOT SEQUENCE AKN(.). C E,B,D,AKN,IAKN,IACT,I1,N,NK,NACT AS THEY ARE DEFINED IN C SUBROUTINE L2CXFT. C C.... O U T P U T .... C E,B,D,AKN,IAKN,IACT AFTER DELETING THE KNOT AKN(KNOUT). C NK DECREASED BY ONE. C NACT INCREASED BY ONE. C C.... M E T H O D .... C SINCE AKN(J) IS DELETED THE J-TH NORMAL EQUATION IS DELETED TOO. C THEN CALL SUBROUTINE MINUS1 TO MODIFY THE (J-1) AND (J+1) NORMAL C EQUATIONS. SHIFT E,B,D,AKN AND IAKN. C REVISE IACT(.), THE INDICES OF THE ACTIVE CONSTRAINTS. C....................................................................... I0=I1-1 J=IAKN(KNOUT)-1 C C MODIFY NORMAL EQUATIONS. C CALL MINUS1(E,B,D,AKN,I1,N,KNOUT) C C SHIFT ARRAYS. C DO 5 I=KNOUT,NK-1 AKN(I)=AKN(I+1) IAKN(I)=IAKN(I+1) E(I)=E(I+1) B(I)=B(I+1) 5 D(I)=D(I+1) C C SET LAST POSITION TO ZERO. C AKN(NK)=0. IAKN(NK)=0 E(NK)=0. B(NK)=0. D(NK)=0. NK=NK-1 C C UPDATE IACT(.). C C GIVEN J=IAKN(KNOUT)-1, APPLY BISECTION IN [I1,NACT] IN ORDER C TO FIND IR SUCH THAT IACT(IR-1) < J < IACT(IR) , OR C IQ IS OUTSIDE [I1,NACT]. C IF (NACT.EQ.I0) THEN IR=I1 GO TO 130 END IF IF (J.LT.IACT(I1)) THEN IR=I1 GO TO 110 END IF IF (J.GT.IACT(NACT)) THEN IR=NACT+1 GO TO 130 END IF C C APPLY BISECTION. C IP=I1 IR=NACT 100 IQ=(IP+IR)/2 IF (IR-IP.EQ.1) GO TO 110 IF (J.LT.IACT(IQ)) THEN IR=IQ ELSE IP=IQ END IF GO TO 100 110 CONTINUE DO 120 I=NACT,IR,-1 120 IACT(I+1)=IACT(I) 130 IACT(IR)=J NACT=NACT+1 C RETURN END C...................................................................... C L2CXFT: A FORTRAN SUBROUTINE FOR LEAST SQUARES DATA FITTING C WITH NON-NEGATIVE SECOND DIVIDED DIFFERENCES. C BY I.C. DEMETRIOU, DEPARTMENT OF ECONOMICS, UNIVERSITY OF ATHENS, C 8 PESMAZOGLOU STREET, ATHENS 105 59, GREECE. C TEL : (GR) 01-3242438, 8017732 C E-MAIL: DEMETRI@AUEB.ARIADNE-T.GR C...................................................................... C THE USER GIVES THE NOISY FUNCTION MEASUREMENTS F(I): I=1,2,...N C AT THE ABSCISSAE X(1) THE INNER PRODUCT OF TWO VECTORS AND, C THE COEFFICIENTS OF SX(.) ARE DETERMINED BY SOLVING THE C THE POSITIVE DEFINITE SYSTEM OF THE NORMAL EQUATIONS C EFFICIENTLY AND STABLY BY CHOLESKY FACTORIZATION C D(J)*COEF(J-1)+E(J)*COEF(J)+D(J+1)*COEF(J+1)=B(J) C FOR J=I1-1,I1,...,NK C WHERE BY <.,.> IS DENOTED THE SCALAR PRODUCT OF TWO VECTORS C AND C D(J)=, J=I1,I1+1,...,NK C E(J)=, J=I1-1,I1,...,NK C B(J)=, J=I1-1,I1,...,NK. C (SUBROUTINE CFLGRF). C C B) CALCULATION OF THE LAGRANGE MULTIPLIERS C THE LAGRANGE EQUATIONS AT AN ESTIMATE SX(.) ARE C 2*(SX(II+1)-F(II+1))=SIGMA(PAR(II)*A(II,.)) C FOR II=IACT(I), I=I1,I1+1,...,NACT C WHERE A(II,J) IS THE J-TH COMPONENT OF THE NORMAL C OF THE II-TH CONSTRAINT AND C A(II,J)<>0 ONLY FOR (II.LE.J.LE.II+2). C (ARRAY A(.,.) IS NOT ACTUALLY USED IN THIS SUBROUTINE; C INSTEAD ARRAYS EC(.) AND DC(.) ARE EMPLOYED.). BECAUSE C THIS SYSTEM IS OVERDETERMINED PAR(IACT(.)) IS DERIVED C BY CHOOSING FROM THE LAGRANGE EQUATIONS THOSE EQUATIONS THAT C CORRESPOND TO THE SECOND NON-ZERO COMPONENT OF A(IACT(.),.); C SO A BLOCK DIAGONAL POSITIVE DEFINITE SYSTEM IS OBTAINED THAT C IS SOLVED EFFICIENTLY AND STABLY BY CHOLESKY FACTORIZATION. C (SUBROUTINE CFLGRF). C C C) PARTICULAR METHODS ARE DEVELOPED FOR INSERTING INTO AND C DELETING FROM THE SPLINE APPROXIMATION ONE KNOT ECONOMICALLY. C (SUBROUTINES ADDKNT AND DELKNT). C...................................................................... C SET CERTAIN INITIAL VALUES. C MODE=1 I0=I1-1 ITREF=0 ITEST=0 ZERO=0. DO 10 I=1,10 10 ITER(I)=0 C IF (N.LT.I1) THEN MODE=4 CALL MESSGE(ZERO,0,0,ITER,10) GO TO 1000 END IF C C IF N=I1 OR N=I1+1 THEN THE DATA ITSELF IS THE REQUIRED FIT. C IF (N.EQ.I1) THEN SX(I1)=F(I1) AKN(I1-1)=X(I1) IAKN(I1-1)=I1 COEF(I1-1)=F(I1) CALL MESSGE(ZERO,0,0,ITER,20) GO TO 1000 END IF C IF (N.EQ.I1+1) THEN SX(I1)=F(I1) SX(N)=F(N) AKN(I1-1)=X(I1) AKN(I1)=X(N) IAKN(I1-1)=I1 IAKN(I1)=N COEF(I1-1)=F(I1) COEF(I1)=F(N) CALL MESSGE(ZERO,0,0,ITER,20) GO TO 1000 END IF C C.... I N I T I A L I Z E ............................................. C C THERE ARE N-2 CONSTRAINTS DEFINED BY THE DIVIDED DIFFERENCES. C WE ASSOCIATE THE I-TH CONSTRAINT WITH THE I-TH DIVIDED DIFFER- C ENCE. SET COEFFICIENTS OF FULL SYSTEM OF EQUATIONS OF LAGRANGE C MULTIPLIERS. SINCE GRAD(F)=2*(SX-F), THE COEFFICIENTS ARE C SCALED BY 2. C DO 50 I=I1,N-3 CX2=X(I+2)-X(I+1) CX1=X(I+1)-X(I) CX3=X(I+2)-X(I) CX2=1/CX2 CX1=1/CX1 EC(I)=-(CX1+CX2)/2 50 DC(I+1)=CX2/2 CX2=X(N)-X(N-1) CX1=X(N-1)-X(N-2) CX3=X(N)-X(N-2) CX2=1/CX2 CX1=1/CX1 EC(N-2)=-(CX1+CX2)/2 C DO 60 I=I1,N-2 60 PAR(I)=0.0 C C.... CALCULATE STARTING POINT BY L2ILS ............................... C CALL L2ILS(COEF,AKN,IAKN,D,E,B,Z,U,NK,F,X,I1,N) C C INITIALIZE INDICES OF ACTIVE CONSTRAINTS IN IACT(.). C J=I0 I=I1+1 IAKN(I0)=I1 KL=I0 80 IF (IAKN(J).LT.I .AND. I.LT.IAKN(J+1)) THEN KL=KL+1 IACT(KL)=I-1 I=I+1 GO TO 80 END IF J=J+1 I=I+1 IF (J.LT.NK) GO TO 80 NACT=KL ITER(2)=NACT-I0 C C.... ITERATE BY ONE, UNTIL FIRST FEASIBLE LAGRANGIAN VECTOR IS FOUND. C C CALCULATE COEF OVER KNOTS, SPLINE OVER ABSCISSAE AND C LAGRANGE MULTIPLIERS. C 90 CALL CFLGRF(SX,PAR,COEF,IACT,E,B,D,X,AKN,IAKN,F,DC,EC,U, 1 RES,NK,NACT,I1,N,ITREF,ITER(3)) ITER(3)=ITER(3)+1 C C FIND MINIMUM LAGRANGE MULTIPLIER. C IF (NACT .LE. I0) GO TO 150 AMINLA=PAR(IACT(I1)) IPAR=IACT(I1) IF (I1 .EQ. NACT) GO TO 110 DO 100 I=I1+1,NACT IF (PAR(IACT(I)) .LT. AMINLA) THEN AMINLA=PAR(IACT(I)) IPAR=IACT(I) END IF 100 CONTINUE 110 ITER(4)=NACT-I0 IF (AMINLA .GE. 0.0) GO TO 150 C C INSERT A KNOT WHERE THE LEAST NEGATIVE LAGRANGE MULTIPLIER. C INKNOT=IPAR+1 PAR(IPAR)=0.0 CALL ADDKNT(INKNOT,E,B,D,X,F,AKN,IAKN,IACT,NK,NACT,I1,N) GO TO 90 C C.... M A I N I T E R A T I O N ...................................... C 150 CONTINUE C C EXAMINE CONVEXITES AT ALL KNOTS OF SPLINE APPROXIMATION. C SPECIAL CASE: IF NK-I0=1 THEN SX(.) IS A STRAIGHT LINE. C IF (NK-I0 .EQ. 1) GO TO 1000 C C FIND THE KNOT OF THE MOST VIOLATED CONSTRAINT. C CVMAX=0. KL=I0 K=0 DO 160 J=I1,NK-1 JJ=IAKN(J) CKNOT=(SX(JJ+1)-SX(JJ))/(X(JJ+1)-X(JJ))- 1 (SX(JJ)-SX(JJ-1))/(X(JJ)-X(JJ-1)) SUM2=1/(X(JJ+1)-X(JJ))**2+ 1 ((X(JJ+1)-X(JJ-1))/((X(JJ+1)-X(JJ))*(X(JJ)-X(JJ-1))))**2+ 2 1/(X(JJ)-X(JJ-1))**2 SUM2=SQRT(SUM2) CKNOT=CKNOT/SUM2 IF (CKNOT .LT. 0.) K=K+1 IF (CKNOT .LT. CVMAX) THEN CVMAX=CKNOT KNTOUT=J IAKNJ=IAKN(J) KL=KL+1 END IF 160 CONTINUE C C IF KL=I0 THEN SX(.) IS CONVEX. SINCE AT THIS LEVEL PAR(.) ARE C ALL NON-NEGATIVE THE KUHN-TUCKER CONDITIONS ARE SATISFIED. C C.... T E R M I N A T I O N ........................................... C IF (KL .EQ. I0) GO TO 1000 C C MSG: PRINT CVMAX,IAKNJ,K. C IF (IPRINT.NE.0) CALL MESSGE(CVMAX,K,IAKNJ,ITER,160) C C POWELL'S SAFEGUARD TERMINATION TEST: C RETURN, IF DUE TO ROUNDING ERRORS, THE CHANGE IN SX(.) MAY C NOT INCREASE THE OBJECTIVE FUNCTION. C IF (ITER(1).EQ.0) GO TO 190 R=0.0 T=0.0 DO 170 I=I1,N R=R+(SX(I)-SXOLD(I))*(SX(I)+SXOLD(I)-2*F(I)) 170 T=T+ABS(SX(I)-SXOLD(I))*(ABS(SX(I)+SXOLD(I))+2*ABS(F(I))) IF (T+R.LE.T .OR. T+1.5*R.LE.T+R) THEN IF (ITEST.EQ.1) THEN MODE=2 IF (IPRINT.NE.0) CALL MESSGE(ZERO,0,0,ITER,170) C C MSG: L2CXFT RETURNS BECAUSE THE ACCURACY IS C INSUFFICIENT TO MAINTAIN INCREASING C THE FUNCTION VALUES. C GO TO 1000 END IF C IF (IPRINT.EQ.0) GO TO 180 IF (ITREF.EQ.0) CALL MESSGE (ZERO,0,0,ITER,180) C C MSG: ITERATIVE REFINEMENT IS INITIATED. C 180 ITREF=1 ITEST=1 ELSE ITEST=0 END IF 190 CONTINUE C C KEEP OLD LAGRANGE MULTIPLIERS AND OLD SPLINE APPROXIMATION. C DO 200 I=I1,N-2 200 PAROLD(I)=PAR(I) DO 210 I=I1,N 210 SXOLD(I)=SX(I) C C TERMINATION ON ITERATION COUNT. C ITER(1)=ITER(1)+1 IF (ITER(1).GT.3*(N-I0)) THEN MODE=3 CALL MESSGE(ZERO,0,0,ITER,210) C C MSG: L2CXFT QUITS ON ITERATION COUNT. C GO TO 1000 END IF C C CALCULATE A SEARCH DIRECTION (DELETE THE KNOT KNTOUT). C CALL DELKNT(E,B,D,AKN,IAKN,IACT,NK,NACT,I1,N,KNTOUT) ITER(6)=ITER(6)+1 C C SOLVE FOR SX(.) OVER AKN(.). C 220 CALL CFLGRF(SX,PAR,COEF,IACT,E,B,D,X,AKN,IAKN,F,DC,EC,U, 1 RES,NK,NACT,I1,N,ITREF,ITER(3)) ITER(3)=ITER(3)+1 C IPAR=IAKNJ-1 IF (IPRINT.NE.0) CALL MESSGE(PAR(IPAR),0,0,ITER,220) C C MSG: PRINT MULTIPLIER OF INSERTED CONSTRAINT. C C APPLY POWELL'S TECHNIQUE IN ORDER THAT THE INDEX IPAR C REMAIN IN ACTIVE SET. SET PAR(IPAR)=MAX(PAR(IPAR),0.0) C BECAUSE IN THEORY HOLDS THAT PAR(IPAR)>0. C IF (PAR(IPAR).LT.0.0) PAR(IPAR)=0.0 C C EXAMINE SIGN OF LAGRANGE MULTIPLIERS C 300 IF (NACT .EQ. I0) GO TO 150 KL=I0 THETA=2.0 DO 320 I=I1,NACT K=IACT(I) IF (PAR(K)) 310,320,320 310 RATIO=PAROLD(K)/(PAROLD(K)-PAR(K)) IF (THETA .LE. RATIO) GO TO 320 THETA=RATIO IPAR=K KL=I1 320 CONTINUE C C.... ITERATE IN THE PRIMAL SPACE ...................................... C IF KL=I0 THEN PAR(.) ARE NON-NEGATIVE. BRANCH WHERE TEST C PRIMAL FEASIBILITY. C IF (KL .EQ. I0) GO TO 150 C C.... RECOVER NON-NEGATIVITY OF LAGRANGE MULTIPLIERS ................... C DO 340 I=I1,NACT K=IACT(I) 340 PAROLD(K)=(1-THETA)*PAROLD(K)+THETA*PAR(K) C C INSERT KNOT IPAR+1 INTO THE SPLINE AND SOLVE FOR SX(.). C I1NEW=I1 350 INKNOT=IPAR+1 PAR(IPAR)=0. CALL ADDKNT(INKNOT,E,B,D,X,F,AKN,IAKN,IACT,NK,NACT,I1,N) ITER(5)=ITER(5)+1 C C TEST THE FEASIBILITY OF PAROLD(.). ALL PAROLD(.) MUST BE C NON-NEGATIVE BECAUSE OF THE WAY THETA WAS DETERMINED. OTHERWISE, C THIS IS DUE TO ROUND-OFF ERROR. HENCE, ANY NEGATIVITY C IS TREATED AS BEING ZERO. SEE LAWSON & HANSON (SOLVING C LEAST SQUARES PROBLEMS, PRENTICE-HALL, 1974, p.307). C IF (NACT .EQ. I0) GO TO 370 IF (I1NEW .GT. NACT) GO TO 370 DO 360 I=I1NEW,NACT IPAR=IACT(I) IF (PAROLD(IPAR) .LT. 0.0) THEN IF (IPRINT.NE.0) CALL MESSGE(PAROLD(IPAR),IPAR,0,ITER,350) C C MSG: ITERATION IN THE DUAL SPACE DUE TO ROUND OFF. C PRINT ACTIVE CONSTRAINT AND LAGRANGE MULTIPLIER. C I1NEW=I GO TO 350 END IF 360 CONTINUE C 370 CONTINUE C CALL CFLGRF(SX,PAR,COEF,IACT,E,B,D,X,AKN,IAKN,F,DC,EC,U, 1 RES,NK,NACT,I1,N,ITREF,ITER(3)) ITER(3)=ITER(3)+1 C C.... ITERATE IN THE DUAL SPACE ........................................ C GO TO 300 1000 CONTINUE C CALL MESSGE(ZERO,NACT-I0,MODE,ITER,1000) C C MSG: PRINT MODE AND C INITIAL ACTIVE SET C STARTING ACTIVE SET C FINAL ACTIVE SET C ADDITIONS OF CONSTRAINTS C DELETIONS OF CONSTRAINTS C C.... END OF SUBROUTINE L2CXFT ......................................... C RETURN END C...................................................................... C GIVEN N NOISY FUNCTION MEASUREMENTS F(I): I=1,2,...N C AT THE ABSCISSAE X(1) THE INNER PRODUCT OF TWO VECTORS AND, C THE COEFFICIENTS OF SX(.) ARE DETERMINED BY SOLVING THE C NORMAL EQUATIONS C D(I)*COEF(I-1)+E(I)*COEF(I)+D(I+1)*COEF(I+1)=B(I) C FOR I=I1-1,I1,...,J C WHERE C D(I)=, I=I1-1,I1,...,J C E(I)=, I=I1-1,I1,...,J C B(I)=, I=I1-1,I1,...,J. C C THEN PROCEED AS IN REFERENCE QUOTED. C...................................................................... C NO TEST ON THE CONDITIONS N