diff options
Diffstat (limited to 'math/bevington/fchisq.f')
-rw-r--r-- | math/bevington/fchisq.f | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/math/bevington/fchisq.f b/math/bevington/fchisq.f new file mode 100644 index 00000000..1f9a8dc2 --- /dev/null +++ b/math/bevington/fchisq.f @@ -0,0 +1,54 @@ +C FUNCTION FCHISQ.F +C +C SOURCE +C BEVINGTON, PAGE 194. +C +C PURPOSE +C EVALUATE REDUCED CHI SQUARE FOR FIT OF DATA +C FCHISQ = SUM ((Y-YFIT)**2 / SIGMA**2) / NFREE +C +C USAGE +C RESULT = FCHISQ (Y, SIGMAY, NPTS, NFREE, MODE, YFIT) +C +C DESCRIPTION OF PARAMETERS +C Y - ARRAY OF DATA POINTS +C SIGMAY - ARRAY OF STANDARD DEVIATIONS FOR DATA POINTS +C NPTS - NUMBER OF DATA POINTS +C NFREE - NUMBER OF DEGREES OF FREEDOM +C MODE - DETERMINES METHOD OF WEIGHTING LEAST-SQUARES FIT +C +1 (INSTRUMENTAL) WEIGHT(I) = 1./SIGMAY(I)**2 +C 0 (NO WEIGHTING) WEIGHT(I) = 1. +C -1 (STATISTICAL) WEIGHT(I) = 1./Y(I) +C YFIT - ARRAY OF CALCULATED VALUES OF Y +C +C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED +C NONE +C + FUNCTION FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT) + DOUBLE PRECISION CHISQ,WEIGHT + DIMENSION Y(1),SIGMAY(1),YFIT(1) +11 CHISQ=0. +12 IF (NFREE) 13,13,20 +13 FCHISQ=0. + GOTO 40 +C +C ACCUMULATE CHI SQUARE +C +20 DO 30 I=1,NPTS +21 IF (MODE) 22,27,29 +22 IF (Y(I)) 25,27,23 +23 WEIGHT=1./Y(I) + GOTO 30 +25 WEIGHT=1./(-Y(I)) + GOTO 30 +27 WEIGHT=1. + GOTO 30 +29 WEIGHT=1./SIGMAY(I)**2 +30 CHISQ=CHISQ+WEIGHT*(Y(I)-YFIT(I))**2 +C +C DIVIDE BY NUMBER OF DEGREES OF FREEDOM +C +31 FREE=NFREE +32 FCHISQ=CHISQ/FREE +40 RETURN + END |