1 |
{ RCSid $Id$ } |
2 |
{ |
3 |
Gaussian Integration |
4 |
|
5 |
10/20/87 |
6 |
|
7 |
order - order of integral (# of sample points) |
8 |
xmin - interval begin |
9 |
xmax - interval end |
10 |
f(x) - integrand |
11 |
integ - integral value |
12 |
} |
13 |
{ Defaults } |
14 |
order = 24 ; |
15 |
xmin = -1 ; |
16 |
xmax = 1 ; |
17 |
|
18 |
integ = q1(ceil(order/2-.25)) * (xmax-xmin)/2 ; |
19 |
|
20 |
q1(i) = if( i-1.5, wght(i)*(f1(absc(i))+f1(-absc(i))) + q1(i-1), |
21 |
wght(1)*(f1(absc(1))+if(even,f1(-absc(1)),0)) ) ; |
22 |
|
23 |
even = floor(order/2+.25) - order/2 + .25 ; |
24 |
|
25 |
f1(u) = f((xmax*(1+u)+xmin*(1-u))/2) ; |
26 |
|
27 |
{ Abscissas } |
28 |
absc(i) = select( order, |
29 |
0, |
30 |
.577350269189626, { n = 2 } |
31 |
select( i, { n = 3 } |
32 |
0, |
33 |
.774596669241483 |
34 |
), |
35 |
0, 0, |
36 |
select( i, { n = 6 } |
37 |
.238619186083197, |
38 |
.661209386466265, |
39 |
.932469514203152 |
40 |
), |
41 |
0, 0, 0, 0, 0, |
42 |
select( i, { n = 12 } |
43 |
.125233408511469, |
44 |
.367831498998180, |
45 |
.587317954286617, |
46 |
.769902674194305, |
47 |
.904117256370475, |
48 |
.981560634246719 |
49 |
), |
50 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
51 |
select( i, { n = 24 } |
52 |
.064056892862606, |
53 |
.191118867473616, |
54 |
.315042679696163, |
55 |
.433793507626045, |
56 |
.545421471388840, |
57 |
.648093651936976, |
58 |
.740124191578554, |
59 |
.820001985973903, |
60 |
.886415527004401, |
61 |
.938274552002733, |
62 |
.974728555971309, |
63 |
.995187219997021 |
64 |
) |
65 |
) ; |
66 |
|
67 |
{ Weights } |
68 |
wght(i) = select( order, |
69 |
0, |
70 |
1, { n = 2 } |
71 |
select( i, { n = 3 } |
72 |
.888888888888888, |
73 |
.555555555555555 |
74 |
), |
75 |
0, 0, |
76 |
select( i, { n = 6 } |
77 |
.467913934572691, |
78 |
.360761573048139, |
79 |
.171324492379170 |
80 |
), |
81 |
0, 0, 0, 0, 0, |
82 |
select( i, { n = 12 } |
83 |
.249147045813403, |
84 |
.233492536538355, |
85 |
.203167426723066, |
86 |
.160078328543346, |
87 |
.106939325995318, |
88 |
.047175336386512 |
89 |
), |
90 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
91 |
select( i, { n = 24 } |
92 |
.127938195346752, |
93 |
.125837456346828, |
94 |
.121670472927803, |
95 |
.115505668053726, |
96 |
.107444270115966, |
97 |
.097618652104114, |
98 |
.086190161531953, |
99 |
.073346481411080, |
100 |
.059298584915437, |
101 |
.044277438817420, |
102 |
.028531388628934, |
103 |
.012341229799987 |
104 |
) |
105 |
) ; |