C C .................................................................. C C SUBROUTINE DAPCH C C PURPOSE C SET UP NORMAL EQUATIONS OF LEAST SQUARES FIT IN TERMS OF C CHEBYSHEV POLYNOMIALS FOR A GIVEN DISCRETE FUNCTION C C USAGE C CALL DAPCH(DATI,N,IP,XD,X0,WORK,IER) C C DESCRIPTION OF PARAMETERS C DATI - VECTOR OF DIMENSION 3*N (OR DIMENSION 2*N+1) C CONTAINING THE GIVEN ARGUMENTS, FOLLOWED BY THE C FUNCTION VALUES AND N (RESPECTIVELY 1) WEIGHT C VALUES. THE CONTENT OF VECTOR DATI REMAINS C UNCHANGED. C DATI MUST BE OF DOUBLE PRECISION C N - NUMBER OF GIVEN POINTS C IP - DIMENSION OF LEAST SQUARES FIT, I.E. NUMBER OF C CHEBYSHEV POLYNOMIALS USED AS FUNDAMENTAL FUNCTIONS C IP SHOULD NOT EXCEED N C XD - RESULTANT MULTIPLICATIVE CONSTANT FOR LINEAR C TRANSFORMATION OF ARGUMENT RANGE C XD MUST BE DOUBLE PRECISION C X0 - RESULTANT ADDITIVE CONSTANT FOR LINEAR C TRANSFORMATION OF ARGUMENT RANGE C X0 MUST BE DOUBLE PRECISION C WORK - WORKING STORAGE OF DIMENSION (IP+1)*(IP+2)/2 C ON RETURN WORK CONTAINS THE SYMMETRIC COEFFICIENT C MATRIX OF THE NORMAL EQUATIONS IN COMPRESSED FORM C FOLLOWED IMMEDIATELY BY RIGHT HAND SIDE C AND SQUARE SUM OF FUNCTION VALUES C WORK MUST BE OF DOUBLE PRECISION C IER - RESULTING ERROR PARAMETER C IER =-1 MEANS FORMAL ERRORS IN DIMENSION C IER = 0 MEANS NO ERRORS C IER = 1 MEANS COINCIDING ARGUMENTS C C REMARKS C NO WEIGHTS ARE USED IF THE VALUE OF DATI(2*N+1) IS C NOT POSITIVE. C EXECUTION OF SUBROUTINE DAPCH IS A PREPARATORY STEP FOR C CALCULATION OF LEAST SQUARES FITS IN CHEBYSHEV POLYNOMIALS C IT SHOULD BE FOLLOWED BY EXECUTION OF SUBROUTINE DAPFS C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C NONE C C METHOD C THE LEAST SQUARE FIT IS DETERMINED USING CHEBYSHEV C POLYNOMIALS AS FUNDAMENTAL FUNCTION SYSTEM. C THE METHOD IS DISCUSSED IN THE ARTICLE C A.T.BERZTISS, LEAST SQUARES FITTING TO IRREGULARLY SPACED C DATA, SIAM REVIEW, VOL.6, ISS.3, 1964, PP. 203-227. C C .................................................................. C SUBROUTINE DAPCH(DATI,N,IP,XD,X0,WORK,IER) C C C DIMENSIONED DUMMY VARIABLES DIMENSION DATI(1),WORK(1) DOUBLE PRECISION DATI,WORK,XD,X0,XA,XE,XM,DF,T,SUM C C CHECK FOR FORMAL ERRORS IN SPECIFIED DIMENSIONS IF(N-1)19,20,1 1 IF(IP)19,19,2 C C SEARCH SMALLEST AND LARGEST ARGUMENT 2 IF(IP-N)3,3,19 3 XA=DATI(1) X0=XA XE=0.D0 DO 7 I=1,N XM=DATI(I) IF(XA-XM)5,5,4 4 XA=XM 5 IF(X0-XM)6,7,7 6 X0=XM 7 CONTINUE C C INITIALIZE CALCULATION OF NORMAL EQUATIONS XD=X0-XA M=(IP*(IP+1))/2 IEND=M+IP+1 MT2=IP+IP MT2M=MT2-1 C C SET WORKING STORAGE AND RIGHT HAND SIDE TO ZERO DO 8 I=1,IP J=MT2-I WORK(J)=0.D0 WORK(I)=0.D0 K=M+I 8 WORK(K)=0.D0 C C CHECK FOR DEGENERATE ARGUMENT RANGE IF(XD)20,20,9 C C CALCULATE CONSTANTS FOR REDUCTION OF ARGUMENTS 9 X0=-(X0+XA)/XD XD=2.D0/XD SUM=0.D0 C C START GREAT LOOP OVER ALL GIVEN POINTS DO 15 I=1,N T=DATI(I)*XD+X0 J=I+N DF=DATI(J) C C CALCULATE AND STORE VALUES OF CHEBYSHEV POLYNOMIALS C FOR ARGUMENT T XA=1.D0 XM=T IF(DATI(2*N+1))11,11,10 10 J=J+N XA=DATI(J) XM=T*XA 11 T=T+T SUM=SUM+DF*DF*XA DF=DF+DF J=1 12 K=M+J WORK(K)=WORK(K)+DF*XA 13 WORK(J)=WORK(J)+XA IF(J-MT2M)14,15,15 14 J=J+1 XE=T*XM-XA XA=XM XM=XE IF(J-IP)12,12,13 15 CONTINUE WORK(IEND)=SUM+SUM C C CALCULATE MATRIX OF NORMAL EQUATIONS LL=M KK=MT2M JJ=1 K=KK DO 18 J=1,M WORK(LL)=WORK(K)+WORK(JJ) LL=LL-1 IF(K-JJ)16,16,17 16 KK=KK-2 K=KK JJ=1 GOTO 18 17 JJ=JJ+1 K=K-1 18 CONTINUE IER=0 RETURN C C ERROR RETURN IN CASE OF FORMAL ERRORS 19 IER=-1 RETURN C C ERROR RETURN IN CASE OF COINCIDING ARGUMENTS 20 IER=1 RETURN END