C PROGRAM NONPAR C FITS X,Y DATA USING NON-PARAMETRIC TECHNIQUES C STRAIGHT LINE IS OF TYPE Y = A + B.X C ENTER DATA USING SEPARATE FILE C DATA FILE MUST BE CALLED xy.dat C DATA FILE ENTRIES ARE X AND Y VALUES SEPARATED BY SPACE C ONE SET OF X,Y VALUES PER LINE REAL A,B,AA,BB,CC,TEMP,SLOPE,ZERO,SD,ERRORS,ERRORZ INTEGER I,J,K,M,N,NUP,NLO LOGICAL SORTED DIMENSION EBV(500),VMV(500),R(125000),DMO(125000) DATA I,K / 0,0 / OPEN (UNIT=7, FILE='xy.dat', STATUS='OLD') 10 READ (7,*,END=12) A, B I = I + 1 EBV(I) = A VMV(I) = B GOTO 10 12 DO 14 J=1,I-1 DO 13 N=J+1,I IF (EBV(J).EQ.EBV(N)) GOTO 13 K = K + 1 R(K) = (VMV(J) - VMV(N))/(EBV(J) - EBV(N)) DMO(K) = VMV(J) - (R(K)*EBV(J)) 13 CONTINUE 14 CONTINUE SORTED = .FALSE. 15 IF (.NOT.SORTED) THEN SORTED = .TRUE. DO 16 J=1,K-1 IF (R(J).GT.R(J+1)) THEN TEMP = R(J) R(J) = R(J+1) R(J+1) = TEMP SORTED = .FALSE. ENDIF 16 CONTINUE GOTO 15 ENDIF SORTED = .FALSE. 17 IF (.NOT.SORTED) THEN SORTED = .TRUE. DO 18 J=1,K-1 IF (DMO(J).GT.DMO(J+1)) THEN TEMP = DMO(J) DMO(J) = DMO(J+1) DMO(J+1) = TEMP SORTED = .FALSE. ENDIF 18 CONTINUE GOTO 17 ENDIF AA = REAL(K) BB = AA/2.0 CC = REAL(I) M = K/2 IF (BB.EQ.M) GOTO 19 SLOPE = R(M+1) ZERO = DMO(M+1) GOTO 20 19 SLOPE = (R(M) + R(M+1))/2.0 ZERO = (DMO(M) + DMO(M+1))/2.0 20 SD = SQRT((CC*(CC - 1.0)*((2.0*CC) + 5.0))/18.0) IF (BB.EQ.M) GOTO 21 NUP = M + 1 + NINT(SD) NLO = M + 1 - NINT(SD) GOTO 22 21 NUP = M + NINT(SD + 0.5) NLO = M - NINT(SD - 0.5) 22 ERRORS = (R(NUP) - R(NLO))/3.62286 ERRORZ = (DMO(NUP) - DMO(NLO))/3.62286 WRITE (6, 24) ZERO, ERRORZ 24 FORMAT (1X,'A = ',F15.5,' +- ',F13.5,' s.d.') WRITE (6, 23) SLOPE, ERRORS 23 FORMAT (1X,'B = ',F15.5,' +- ',F13.5,' s.d.') STOP END