Implementing VirtualIntegratorOneDim Interface
Return Integral of function between a and b.
Based on original CERNLIB routine DGAUSS by Sigfried Kolbig
converted to C++ by Rene Brun
This function computes, to an attempted specified accuracy, the value
of the integral.
Usage:
In any arithmetic expression, this function has the approximate value
of the integral I.
- A, B: End-points of integration interval. Note that B may be less
than A.
- params: Array of function parameters. If 0, use current parameters.
- epsilon: Accuracy parameter (see Accuracy).
Method:
For any interval [a,b] we define g8(a,b) and g16(a,b) to be the 8-point
and 16-point Gaussian quadrature approximations to
and define
Then,
where, starting with x0 = A and finishing with xk = B,
the subdivision points xi(i=1,2,...) are given by
is equal to the first member of the
sequence 1,1/2,1/4,... for which r(xi-1, xi) < EPS.
If, at any stage in the process of subdivision, the ratio
is so small that 1+0.005q is indistinguishable from 1 to
machine accuracy, an error exit occurs with the function value
set equal to zero.
Accuracy:
Unless there is severe cancellation of positive and negative values of
f(x) over the interval [A,B], the relative error may be considered as
specifying a bound on the <I>relative</I> error of I in the case
|I|>1, and a bound on the absolute error in the case |I|<1. More
precisely, if k is the number of sub-intervals contributing to the
approximation (see Method), and if
then the relation
will nearly always be true, provided the routine terminates without
printing an error message. For functions f having no singularities in
the closed interval [A,B] the accuracy will usually be much higher than
this.
Error handling:
The requested accuracy cannot be obtained (see Method).
The function value is set equal to zero.
Note 1:
Values of the function f(x) at the interval end-points A and B are not
required. The subprogram may therefore be used when these values are
undefined.