C PROGRAM LSTSQR C FITS STRAIGHT LINE OF TYPE Y = A + B.X TO (X,Y) DATA PAIRS C ASSUMING THAT X-VALUES ARE ERROR-FREE C DATA MUST BE ENTERED VIA A FILE CALLED xy.dat C WHERE THE FILE LISTS THE X AND Y DATA AS NUMBERS C SEPARATED BY SPACES< ONE SET OF DATA PER LINE C CORRELATION COEFFICIENT IS TABULATED AS WELL AS C STANDARD DEVIATION OF Y DATA AND BEST C VALUES FOR A AND B REAL A,B,SUMX,SUMY,SUMXY,SUMXX,SUMYY,DELTA REAL TOP,BOT,R,SUM,SIG,SIGA,SIGB INTEGER I,J DIMENSION X(500),Y(500) DATA I,SUMX,SUMY,SUMXY / 0,0.0,0.0,0.0 / DATA SUMXX,SUMYY,SUM / 0.0,0.0,0.0 / OPEN (UNIT=7, FILE='xy.dat', STATUS='OLD') 10 READ (7,*,END=12) A, B I = I + 1 X(I) = A Y(I) = B GOTO 10 12 DO 13 J=1,I SUMX = SUMX + X(J) SUMY = SUMY + Y(J) SUMXY = SUMXY + (X(J)*Y(J)) SUMXX = SUMXX + (X(J)*X(J)) SUMYY = SUMYY + (Y(J)*Y(J)) 13 CONTINUE DELTA = (REAL(I)*SUMXX) - (SUMX*SUMX) A = ((SUMXX*SUMY) - (SUMX*SUMXY))/DELTA B = ((REAL(I)*SUMXY) - (SUMX*SUMY))/DELTA TOP = (REAL(I)*SUMXY) - (SUMX*SUMY) BOT = ((REAL(I)*SUMYY) - (SUMY*SUMY))*DELTA R = TOP/SQRT(BOT) DO 14, J=1,I SUM = SUM + ((Y(J) - A - (B*X(J)))**2) 14 CONTINUE SIG = SQRT(SUM/REAL(I - 2)) SIGA = SIG*SQRT(SUMXX/DELTA) SIGB = SIG*SQRT(REAL(I)/DELTA) WRITE (6,15) R 15 FORMAT (1X,'CORRELATION COEFFICIENT = ',F8.5) WRITE (6,16) SIG 16 FORMAT (1X,'STANDARD DEVIATION OF Y-DATA = +-',F13.5) WRITE (6,17) A, SIGA 17 FORMAT (1X,'A = ',F15.5,' +- ',F13.5,' s.d.') WRITE (6,18) B, SIGB 18 FORMAT (1X,'B = ',F15.5,' +- ',F13.5,' s.d.') STOP END