1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
C SUBROUTINE GRADLS.F
C
C SOURCE
C BEVINGTON, PAGES 220-222.
C
C PURPOSE
C MAKE A GRADIENT-SEARCH LEAST-SQUARES FIT TO DATA WITH A
C SPECIFIED FUNCTION WHICH IS NOT LINEAR IN COEFFICIENTS
C
C USAGE
C CALL GRADLS (X, Y, SIGMAY, NPTS, NTERMS, MODE, A, DELTAA,
C YFIT, CHISQR)
C
C DESCRIPTION OF PARAMETERS
C X - ARRAY OF DATA POINTS FOR INDEPENDENT VARIABLE
C Y - ARRAY OF DATA POINTS FOR DEPENDENT VARIABLE
C SIGMAY - ARRAY OF STANDARD DEVIATIONS FOR Y DATA POINTS
C NPTS - NUMBER OF PAIRS OF DATA POINTS
C NTERMS - NUMBER OF PARAMETERS
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 A - ARRAY OF PARAMETERS
C DELTAA - ARRAY OF INCREMENTS FOR PARAMETERS A
C YFIT - ARRAY OF CALCULATED VALUES OF Y
C CHISQR - REDUCED CHI SQUARE FOR FIT
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C FUNCTN (X, I, A)
C EVALUATES THE FITTING FUNCTION FOR THE ITH TERM
C FCHISQ (Y, SIGMAY, NPTS, NFREE, MODE, YFIT)
C EVALUATES REDUCED CHI SQUARED FOR FIT TO DATA
C
C COMMENTS
C DIMENSION STATEMENT VALID FOR NTERMS UP TO 10
C
SUBROUTINE GRADLS (X,Y,SIGMAY,NPTS,NTERMS,MODE,A,DELTAA,
*YFIT,CHISQR)
DIMENSION X(1),Y(1),SIGMAY(1),A(1),DELTAA(1),YFIT(1)
DIMENSION GRAD(10)
REAL FUNCTN
EXTERNAL FUNCTN
C
C EVALUATE CHI SQUARE AT BEGINNING
C
11 NFREE=NPTS-NTERMS
IF (NFREE) 13,13,21
13 CHISQR=0.
GOTO 110
21 DO 22 I=1,NPTS
22 YFIT(I)=FUNCTN (X,I,A)
CHISQ1=FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT)
C
C EVALUATE GRADIENT OF CHI SQUARE
C
31 SUM=0.
32 DO 39 J=1,NTERMS
DELTA=0.1*DELTAA(J)
A(J)=A(J)+DELTA
DO 36 I=1,NPTS
36 YFIT(I)=FUNCTN (X,I,A)
A(J)=A(J)-DELTA
GRAD(J)=CHISQ1-FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT)
39 SUM=SUM+GRAD(J)**2
41 DO 42 J=1,NTERMS
42 GRAD(J)=DELTAA(J)*GRAD(J)/SQRT(SUM)
C
C EVALUATE CHI SQUARE AT NEW POINT
C
51 DO 52 J=1,NTERMS
52 A(J)=A(J)+GRAD(J)
53 DO 54 I=1,NPTS
54 YFIT(I)=FUNCTN (X,I,A)
CHISQ2=FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT)
C
C MAKE SURE CHI SQUARE DECREASES
C
61 IF (CHISQ1-CHISQ2) 62,62,71
62 DO 64 J=1,NTERMS
A(J)=A(J)-GRAD(J)
64 GRAD(J)=GRAD(J)/2.
GOTO 51
C
C INCREMENT PARAMETERS UNTIL CHI SQUARE STARTS TO INCREASE
C
71 DO 72 J=1,NTERMS
72 A(J)=A(J)+GRAD(J)
DO 74 I=1,NPTS
74 YFIT(I)=FUNCTN (X,I,A)
75 CHISQ3=FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT)
76 IF (CHISQ3-CHISQ2) 81,91,91
81 CHISQ1=CHISQ2
82 CHISQ2=CHISQ3
GOTO 71
C
C FIND MINIMUM OF PARABOLA DEFINED BY LAST THREE POINTS
C
91 DELTA=1./(1.+(CHISQ1-CHISQ2)/(CHISQ3-CHISQ2))+0.5
DO 93 J=1,NTERMS
93 A(J)=A(J)-DELTA*GRAD(J)
DO 95 I=1,NPTS
95 YFIT(I)=FUNCTN (X,I,A)
CHISQR=FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT)
101 IF (CHISQ2-CHISQR) 102,110,110
102 DO 103 J=1,NTERMS
103 A(J)=A(J)+(DELTA-1.)*GRAD(J)
104 DO 105 I=1,NPTS
105 YFIT(I)=FUNCTN (X,I,A)
106 CHISQR=CHISQ2
110 RETURN
END
|