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