SUBROUTINE ZFSINC(X,F,SIG,N,NITER,A,FIT,ISTAT) * * Module number: 13.12.1 * * Module name: zfsinc * * Keyphrase: * ---------- * HRS echelle ripple * Description: * ------------ * This routine does a non-linear least squares fit to compute * the echelle ripple coefficients for the HRS. The coefficients * A(i) are fit in the following equation: * * ratio = A(3) * (sinc(a(1)*x+a(2))**2 * The numerical routine mrqmin is used to perform the fit. * * FORTRAN name: zfsinc.for * * Keywords of accessed files and tables: * -------------------------------------- * none * * Subroutines Called: * ------------------- * CDBS: * * SDAS: * * Others: * MRQMIN, ZSINC * * History: * -------- * Version Date Author Description * 1 Sept 87 D. Lindler Designed and coded C C INPUT PARAMETERS C C X - VECTOR OF X POSITIONS (REAL*8) C F - RIPPLE PROFILE (REAL*8) C SIG - STAND. DEV. OF F (REAL*8) C N - NUMBER OF POINTS (INTEGER) C A - 3 ELEMENT ARRAY OF COEFFICIENTS (REAL*8) C C OUTPUT PARAMETERS C C A - UPDATED COEFFICIENTS C FIT - FITTED VALUES FOR F (REAL*8) C ISTAT - ERROR STATUS (INTEGER) C *------------------------------------------------------------------------------- C C------------------------------------------------------------------------ DOUBLE PRECISION X(*),F(*),A(*),FIT(*),SIG(*) INTEGER N,NITER,ISTAT C C FUNCTION FOR COMPUTING SINC**2 FOR NUMERICAL RECIPE ROUTINE MRQMIN C C C LOCAL VARIABLES C DOUBLE PRECISION ALPHA(3,3),ALAMDA,COVAR(3,3),CHISQ,CMAX, * FMAX,CVAL,DFDA(3) INTEGER I,LISTA(3) C C DATA DECLARATIONS C EXTERNAL ZSINC DATA LISTA/1,2,3/ C------------------------------------------------------------------------- C C COMPUTE STARTING GUESS FOR A(3) C A(3)=1.0 C C COMPUTE MAX OF SINC SQUARED FUNCTION FOR INPUT X AND ACTUAL MAX C OF F. C FMAX=0.0 CMAX=0.0 DO 10 I=1,N CALL ZSINC(X(I),A,CVAL,DFDA,3) IF(CMAX.LT.CVAL) CMAX=CVAL IF(FMAX.LT.F(I)) FMAX=F(I) 10 CONTINUE A(3)=FMAX/CMAX C C INITIALIZE LEAST SQUARES ROUTINE C ALAMDA=-1.0 CALL MRQMIN(X,F,SIG,N,A,3,LISTA,3,COVAR,ALPHA,3,CHISQ,ZSINC, * ALAMDA,ISTAT) IF(ISTAT.NE.0) GO TO 999 C C ITERATE NITER TIMES C DO 20 I=1,NITER CALL MRQMIN(X,F,SIG,N,A,3,LISTA,3,COVAR,ALPHA,3,CHISQ, * ZSINC,ALAMDA,ISTAT) IF(ISTAT.NE.0) GO TO 999 20 CONTINUE C C CLEAN UP C ALAMDA=0.0 CALL MRQMIN(X,F,SIG,N,A,3,LISTA,3,COVAR,ALPHA,3,CHISQ,ZSINC, * ALAMDA,ISTAT) IF(ISTAT.NE.0) GO TO 999 C C COMPUTE FITTED VALUES C DO 30 I=1,N CALL ZSINC(X(I),A,FIT(I),DFDA,3) 30 CONTINUE ISTAT=0 999 RETURN END