aboutsummaryrefslogtreecommitdiff
path: root/math/bevington/integ.f
blob: 153bafe1a90a27c6454879c923dd59475ef786f5 (plain) (blame)
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
c subroutine integ.f
c
c source
c   Bevington, page 274.
c
c purpose
c   integrate the area beneath two data points
c
c usage
c   call integ (x, y, nterms, i1, x1, x2, sum)
c
c description of parameters
c   x	   - array of data points for independent variable
c   y	   - array of data points for dependent variable
c   nterms - number of terms in fitting polymonial
c   i1	   - first data point for fitting polynomial
c   x1	   - first value of x for integration
c   x2	   - final value of x for integration
c
c subroutines and function subprograms required
c   none
c
c comments
c   dimension statement valid for nterms up to 10
c
	subroutine integ (x,y,nterms,i1,x1,x2,sum)
	double precision xjk,array,a,denom,deltax,sum
	dimension x(1),y(1)
	dimension array(10,10)
c
c construct square matrix and invert
c
11	do 17 j=1,nterms
	i=j+i1-1
	deltax=x(i)-x(i1)
	xjk=1.
	do 17 k=1,nterms
	array(j,k)=xjk
17	xjk=xjk*deltax
21	call matinv (array,nterms,det)
	if (det) 31,23,31
23	imid=i1+nterms/2
	sum=sum+y(imid)*(x2-x1)
	goto 40
c
c evaluate coefficients and integrate
c
31	dx1=x1-x(i1)
	dx2=x2-x(i1)
33	do 39 j=1,nterms
	i=j+i1-1
	a=0.
	do 37 k=1,nterms
37	a=a+y(i)*array(j,k)
	denom=j
39	sum=sum+(a/denom)*(dx2**j-dx1**j)
40	return
	end