SUBROUTINE ZMRQS1(X,Y,SIG,NDATA,XA,A,MA,LISTA,MFIT,ALPHA,BETA, * NALP,CHISQ,STATUS) * * Module number: FOS/HRS UTILITY * * Module name: ZMRQS1 * * Keyphrase: * ---------- * non-linear least squares fit. * Description: * ------------ * Numercial Recipe routine modified for spline fit. * This routine is called by routine ZMRQSP to evaluate the * linearized fitting matrix ALPHA and vector BETA. * * FORTRAN name: ZMRQS1 * * Keywords of accessed files and tables: * -------------------------------------- * none * * Subroutines Called: * ------------------- * SDAS: * UMSPUT * CDBS: * ZSPLDR * History: * -------- * Version Date Author Description * 1 Aug 87 D. Lindler Conversion of Numerical Recipe Routine *------------------------------------------------------------------------------- C C INPUT PARAMETERS C C X,Y,SIG - VECTORS OF X,Y AND SIGMAS (REAL*8) C NDATA - LENGTH OF X,Y,SIG (INTEGER) C XA - VECTOR OF NODE POSITIONS (REAL*8) C A - VECTOR OF COEFFICIENTS C MA - DIMENSION OF A C LISTA - LIST OF COEF. NUMBERS TO FIT (INTEGER) C MFIT - NUMBER OF COEF. TO FIT C NALP - DIMENSIONS OF OUTPUT MATRIX ALPHA (INTEGER) C C OUTPUT PARAMETERS C C ALPHA - OUTPUT CURVATURE MATRIX (REAL*8) C BETA - BETA VECTOR OF LENGTH MA (REAL*8) C CHISQ - CHI SQUARED (REAL*8) C STATUS - ERROR STATUS C--------------------------------------------------------------------- IMPLICIT NONE DOUBLE PRECISION X,Y,SIG,ALPHA,BETA,DYDA,A,SIG2I,CHISQ,WT INTEGER LISTA,NDATA,MA,MFIT,NALP,J,K,I,STATUS DIMENSION X(NDATA),Y(NDATA),SIG(NDATA),ALPHA(NALP,NALP), * BETA(MA),DYDA(30,2200),LISTA(MFIT),A(MA) DOUBLE PRECISION DY,XA(*),YFIT(2200) DO 12 J=1,MFIT DO 11 K=1,J ALPHA(J,K)=0. 11 CONTINUE BETA(J)=0. 12 CONTINUE CHISQ=0. CALL ZSPLDR(X,NDATA,XA,A,MA,YFIT,DYDA,STATUS) IF(STATUS.NE.0)GO TO 1000 DO 15 I=1,NDATA SIG2I=1./(SIG(I)*SIG(I)) DY=Y(I)-YFIT(I) DO 14 J=1,MFIT WT=DYDA(LISTA(J),I)*SIG2I DO 13 K=1,J ALPHA(J,K)=ALPHA(J,K)+WT*DYDA(LISTA(K),I) 13 CONTINUE BETA(J)=BETA(J)+DY*WT 14 CONTINUE CHISQ=CHISQ+DY*DY*SIG2I 15 CONTINUE DO 17 J=2,MFIT DO 16 K=1,J-1 ALPHA(K,J)=ALPHA(J,K) 16 CONTINUE 17 CONTINUE STATUS=0 1000 RETURN END