31 {
32
33
34
35 int i1;
36 double estimate = 0., y1, integral_, coarse;
39
40 *integral = 0.;
41 *evaluations = 0;
43
46
47 for( i1 = 0; i1 < numberOfInitialPoints; i1++ ) {
48 if( ( status = integrandFunction( x1 + ( x2 - x1 ) * initialPoints[i1], &y1, argList ) ) !=
nfu_Okay )
return( status );
49 estimate += y1;
50 }
51 if( ( status = quadratureFunction( integrandFunction, argList, x1, x2, &integral_ ) ) !=
nfu_Okay )
return( status );
52 estimate = 0.5 * ( estimate * ( x2 - x1 ) / numberOfInitialPoints + integral_ );
53 if( estimate == 0. ) estimate = x2 - x1;
55
56 if( ( status = quadratureFunction( integrandFunction, argList, x1, x2, &coarse ) ) !=
nfu_Okay )
return( status );
57 integral_ = nf_GnG_adaptiveQuadrature2( &adaptiveQuadrature_info, coarse, x1, x2, 0 );
58
59 for( i1 = 0; i1 < 2; i1++ ) {
60 if( integral_ == 0. ) break;
61 y1 = integral_ / estimate;
62 if( ( y1 > 0.1 ) && ( y1 < 10. ) ) break;
63
64 estimate = integral_;
66 *evaluations += adaptiveQuadrature_info.
evaluations;
68 integral_ = nf_GnG_adaptiveQuadrature2( &adaptiveQuadrature_info, integral_, x1, x2, 0 );
69 }
70
71 *evaluations += adaptiveQuadrature_info.
evaluations;
72 if( adaptiveQuadrature_info.
status ==
nfu_Okay ) *integral = integral_;
73 return( adaptiveQuadrature_info.
status );
74}
struct nf_GnG_adaptiveQuadrature_info_s nf_GnG_adaptiveQuadrature_info
#define nf_GnG_adaptiveQuadrature_MaxMaxDepth
enum nfu_status_e nfu_status