summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc/integration.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc/integration.texi')
-rw-r--r--gsl-1.9/doc/integration.texi854
1 files changed, 854 insertions, 0 deletions
diff --git a/gsl-1.9/doc/integration.texi b/gsl-1.9/doc/integration.texi
new file mode 100644
index 0000000..62afb3e
--- /dev/null
+++ b/gsl-1.9/doc/integration.texi
@@ -0,0 +1,854 @@
+@cindex quadrature
+@cindex numerical integration (quadrature)
+@cindex integration, numerical (quadrature)
+@cindex QUADPACK
+
+This chapter describes routines for performing numerical integration
+(quadrature) of a function in one dimension. There are routines for
+adaptive and non-adaptive integration of general functions, with
+specialised routines for specific cases. These include integration over
+infinite and semi-infinite ranges, singular integrals, including
+logarithmic singularities, computation of Cauchy principal values and
+oscillatory integrals. The library reimplements the algorithms used in
+@sc{quadpack}, a numerical integration package written by Piessens,
+Doncker-Kapenga, Uberhuber and Kahaner. Fortran code for @sc{quadpack} is
+available on Netlib.
+
+The functions described in this chapter are declared in the header file
+@file{gsl_integration.h}.
+
+@menu
+* Numerical Integration Introduction::
+* QNG non-adaptive Gauss-Kronrod integration::
+* QAG adaptive integration::
+* QAGS adaptive integration with singularities::
+* QAGP adaptive integration with known singular points::
+* QAGI adaptive integration on infinite intervals::
+* QAWC adaptive integration for Cauchy principal values::
+* QAWS adaptive integration for singular functions::
+* QAWO adaptive integration for oscillatory functions::
+* QAWF adaptive integration for Fourier integrals::
+* Numerical integration error codes::
+* Numerical integration examples::
+* Numerical integration References and Further Reading::
+@end menu
+
+@node Numerical Integration Introduction
+@section Introduction
+
+Each algorithm computes an approximation to a definite integral of the
+form,
+@tex
+\beforedisplay
+$$
+I = \int_a^b f(x) w(x) \,dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b f(x) w(x) dx
+@end example
+
+@end ifinfo
+@noindent
+where @math{w(x)} is a weight function (for general integrands @math{w(x)=1}).
+The user provides absolute and relative error bounds
+@c{$(\hbox{\it epsabs}, \hbox{\it epsrel}\,)$}
+@math{(epsabs, epsrel)} which specify the following accuracy requirement,
+@tex
+\beforedisplay
+$$
+|\hbox{\it RESULT} - I| \leq \max(\hbox{\it epsabs}, \hbox{\it epsrel}\, |I|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|RESULT - I| <= max(epsabs, epsrel |I|)
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$\hbox{\it RESULT}$}
+@math{RESULT} is the numerical approximation obtained by the
+algorithm. The algorithms attempt to estimate the absolute error
+@c{$\hbox{\it ABSERR} = |\hbox{\it RESULT} - I|$}
+@math{ABSERR = |RESULT - I|} in such a way that the following inequality
+holds,
+@tex
+\beforedisplay
+$$
+|\hbox{\it RESULT} - I| \leq \hbox{\it ABSERR} \leq \max(\hbox{\it epsabs}, \hbox{\it epsrel}\,|I|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|RESULT - I| <= ABSERR <= max(epsabs, epsrel |I|)
+@end example
+
+@end ifinfo
+@noindent
+The routines will fail to converge if the error bounds are too
+stringent, but always return the best approximation obtained up to that
+stage.
+
+The algorithms in @sc{quadpack} use a naming convention based on the
+following letters,
+
+@display
+@code{Q} - quadrature routine
+
+@code{N} - non-adaptive integrator
+@code{A} - adaptive integrator
+
+@code{G} - general integrand (user-defined)
+@code{W} - weight function with integrand
+
+@code{S} - singularities can be more readily integrated
+@code{P} - points of special difficulty can be supplied
+@code{I} - infinite range of integration
+@code{O} - oscillatory weight function, cos or sin
+@code{F} - Fourier integral
+@code{C} - Cauchy principal value
+@end display
+
+@noindent
+The algorithms are built on pairs of quadrature rules, a higher order
+rule and a lower order rule. The higher order rule is used to compute
+the best approximation to an integral over a small range. The
+difference between the results of the higher order rule and the lower
+order rule gives an estimate of the error in the approximation.
+
+@menu
+* Integrands without weight functions::
+* Integrands with weight functions::
+* Integrands with singular weight functions::
+@end menu
+
+@node Integrands without weight functions
+@subsection Integrands without weight functions
+@cindex Gauss-Kronrod quadrature
+The algorithms for general functions (without a weight function) are
+based on Gauss-Kronrod rules.
+
+A Gauss-Kronrod rule begins with a classical Gaussian quadrature rule of
+order @math{m}. This is extended with additional points between each of
+the abscissae to give a higher order Kronrod rule of order @math{2m+1}.
+The Kronrod rule is efficient because it reuses existing function
+evaluations from the Gaussian rule.
+
+The higher order Kronrod rule is used as the best approximation to the
+integral, and the difference between the two rules is used as an
+estimate of the error in the approximation.
+
+@node Integrands with weight functions
+@subsection Integrands with weight functions
+@cindex Clenshaw-Curtis quadrature
+@cindex Modified Clenshaw-Curtis quadrature
+For integrands with weight functions the algorithms use Clenshaw-Curtis
+quadrature rules.
+
+A Clenshaw-Curtis rule begins with an @math{n}-th order Chebyshev
+polynomial approximation to the integrand. This polynomial can be
+integrated exactly to give an approximation to the integral of the
+original function. The Chebyshev expansion can be extended to higher
+orders to improve the approximation and provide an estimate of the
+error.
+
+@node Integrands with singular weight functions
+@subsection Integrands with singular weight functions
+
+The presence of singularities (or other behavior) in the integrand can
+cause slow convergence in the Chebyshev approximation. The modified
+Clenshaw-Curtis rules used in @sc{quadpack} separate out several common
+weight functions which cause slow convergence.
+
+These weight functions are integrated analytically against the Chebyshev
+polynomials to precompute @dfn{modified Chebyshev moments}. Combining
+the moments with the Chebyshev approximation to the function gives the
+desired integral. The use of analytic integration for the singular part
+of the function allows exact cancellations and substantially improves
+the overall convergence behavior of the integration.
+
+
+@node QNG non-adaptive Gauss-Kronrod integration
+@section QNG non-adaptive Gauss-Kronrod integration
+@cindex QNG quadrature algorithm
+
+The QNG algorithm is a non-adaptive procedure which uses fixed
+Gauss-Kronrod abscissae to sample the integrand at a maximum of 87
+points. It is provided for fast integration of smooth functions.
+
+@deftypefun int gsl_integration_qng (const gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{epsabs}, double @var{epsrel}, double * @var{result}, double * @var{abserr}, size_t * @var{neval})
+
+This function applies the Gauss-Kronrod 10-point, 21-point, 43-point and
+87-point integration rules in succession until an estimate of the
+integral of @math{f} over @math{(a,b)} is achieved within the desired
+absolute and relative error limits, @var{epsabs} and @var{epsrel}. The
+function returns the final approximation, @var{result}, an estimate of
+the absolute error, @var{abserr} and the number of function evaluations
+used, @var{neval}. The Gauss-Kronrod rules are designed in such a way
+that each rule uses all the results of its predecessors, in order to
+minimize the total number of function evaluations.
+@end deftypefun
+
+
+@node QAG adaptive integration
+@section QAG adaptive integration
+@cindex QAG quadrature algorithm
+
+The QAG algorithm is a simple adaptive integration procedure. The
+integration region is divided into subintervals, and on each iteration
+the subinterval with the largest estimated error is bisected. This
+reduces the overall error rapidly, as the subintervals become
+concentrated around local difficulties in the integrand. These
+subintervals are managed by a @code{gsl_integration_workspace} struct,
+which handles the memory for the subinterval ranges, results and error
+estimates.
+
+@deftypefun {gsl_integration_workspace *} gsl_integration_workspace_alloc (size_t @var{n})
+This function allocates a workspace sufficient to hold @var{n} double
+precision intervals, their integration results and error estimates.
+@end deftypefun
+
+@deftypefun void gsl_integration_workspace_free (gsl_integration_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qag (const gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, int @var{key}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function applies an integration rule adaptively until an estimate
+of the integral of @math{f} over @math{(a,b)} is achieved within the
+desired absolute and relative error limits, @var{epsabs} and
+@var{epsrel}. The function returns the final approximation,
+@var{result}, and an estimate of the absolute error, @var{abserr}. The
+integration rule is determined by the value of @var{key}, which should
+be chosen from the following symbolic names,
+
+@example
+GSL_INTEG_GAUSS15 (key = 1)
+GSL_INTEG_GAUSS21 (key = 2)
+GSL_INTEG_GAUSS31 (key = 3)
+GSL_INTEG_GAUSS41 (key = 4)
+GSL_INTEG_GAUSS51 (key = 5)
+GSL_INTEG_GAUSS61 (key = 6)
+@end example
+
+@noindent
+corresponding to the 15, 21, 31, 41, 51 and 61 point Gauss-Kronrod
+rules. The higher-order rules give better accuracy for smooth functions,
+while lower-order rules save time when the function contains local
+difficulties, such as discontinuities.
+
+On each iteration the adaptive integration strategy bisects the interval
+with the largest error estimate. The subintervals and their results are
+stored in the memory provided by @var{workspace}. The maximum number of
+subintervals is given by @var{limit}, which may not exceed the allocated
+size of the workspace.
+@end deftypefun
+
+
+@node QAGS adaptive integration with singularities
+@section QAGS adaptive integration with singularities
+@cindex QAGS quadrature algorithm
+
+The presence of an integrable singularity in the integration region
+causes an adaptive routine to concentrate new subintervals around the
+singularity. As the subintervals decrease in size the successive
+approximations to the integral converge in a limiting fashion. This
+approach to the limit can be accelerated using an extrapolation
+procedure. The QAGS algorithm combines adaptive bisection with the Wynn
+epsilon-algorithm to speed up the integration of many types of
+integrable singularities.
+
+@deftypefun int gsl_integration_qags (const gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function applies the Gauss-Kronrod 21-point integration rule
+adaptively until an estimate of the integral of @math{f} over
+@math{(a,b)} is achieved within the desired absolute and relative error
+limits, @var{epsabs} and @var{epsrel}. The results are extrapolated
+using the epsilon-algorithm, which accelerates the convergence of the
+integral in the presence of discontinuities and integrable
+singularities. The function returns the final approximation from the
+extrapolation, @var{result}, and an estimate of the absolute error,
+@var{abserr}. The subintervals and their results are stored in the
+memory provided by @var{workspace}. The maximum number of subintervals
+is given by @var{limit}, which may not exceed the allocated size of the
+workspace.
+
+@end deftypefun
+
+@node QAGP adaptive integration with known singular points
+@section QAGP adaptive integration with known singular points
+@cindex QAGP quadrature algorithm
+@cindex singular points, specifying positions in quadrature
+@deftypefun int gsl_integration_qagp (const gsl_function * @var{f}, double * @var{pts}, size_t @var{npts}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function applies the adaptive integration algorithm QAGS taking
+account of the user-supplied locations of singular points. The array
+@var{pts} of length @var{npts} should contain the endpoints of the
+integration ranges defined by the integration region and locations of
+the singularities. For example, to integrate over the region
+@math{(a,b)} with break-points at @math{x_1, x_2, x_3} (where
+@math{a < x_1 < x_2 < x_3 < b}) the following @var{pts} array should be used
+
+@example
+pts[0] = a
+pts[1] = x_1
+pts[2] = x_2
+pts[3] = x_3
+pts[4] = b
+@end example
+
+@noindent
+with @var{npts} = 5.
+
+@noindent
+If you know the locations of the singular points in the integration
+region then this routine will be faster than @code{QAGS}.
+
+@end deftypefun
+
+@node QAGI adaptive integration on infinite intervals
+@section QAGI adaptive integration on infinite intervals
+@cindex QAGI quadrature algorithm
+
+@deftypefun int gsl_integration_qagi (gsl_function * @var{f}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the integral of the function @var{f} over the
+infinite interval @math{(-\infty,+\infty)}. The integral is mapped onto the
+semi-open interval @math{(0,1]} using the transformation @math{x = (1-t)/t},
+@tex
+\beforedisplay
+$$
+\int_{-\infty}^{+\infty} dx \, f(x)
+ = \int_0^1 dt \, (f((1-t)/t) + f(-(1-t)/t))/t^2.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_@{-\infty@}^@{+\infty@} dx f(x) =
+ \int_0^1 dt (f((1-t)/t) + f((-1+t)/t))/t^2.
+@end example
+
+@end ifinfo
+@noindent
+It is then integrated using the QAGS algorithm. The normal 21-point
+Gauss-Kronrod rule of QAGS is replaced by a 15-point rule, because the
+transformation can generate an integrable singularity at the origin. In
+this case a lower-order rule is more efficient.
+@end deftypefun
+
+@deftypefun int gsl_integration_qagiu (gsl_function * @var{f}, double @var{a}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the integral of the function @var{f} over the
+semi-infinite interval @math{(a,+\infty)}. The integral is mapped onto the
+semi-open interval @math{(0,1]} using the transformation @math{x = a + (1-t)/t},
+@tex
+\beforedisplay
+$$
+\int_{a}^{+\infty} dx \, f(x)
+ = \int_0^1 dt \, f(a + (1-t)/t)/t^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_@{a@}^@{+\infty@} dx f(x) =
+ \int_0^1 dt f(a + (1-t)/t)/t^2
+@end example
+
+@end ifinfo
+@noindent
+and then integrated using the QAGS algorithm.
+@end deftypefun
+
+@deftypefun int gsl_integration_qagil (gsl_function * @var{f}, double @var{b}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+This function computes the integral of the function @var{f} over the
+semi-infinite interval @math{(-\infty,b)}. The integral is mapped onto the
+semi-open interval @math{(0,1]} using the transformation @math{x = b - (1-t)/t},
+@tex
+\beforedisplay
+$$
+\int_{-\infty}^{b} dx \, f(x)
+ = \int_0^1 dt \, f(b - (1-t)/t)/t^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_@{+\infty@}^@{b@} dx f(x) =
+ \int_0^1 dt f(b - (1-t)/t)/t^2
+@end example
+
+@end ifinfo
+@noindent
+and then integrated using the QAGS algorithm.
+@end deftypefun
+
+@node QAWC adaptive integration for Cauchy principal values
+@section QAWC adaptive integration for Cauchy principal values
+@cindex QAWC quadrature algorithm
+@cindex Cauchy principal value, by numerical quadrature
+@deftypefun int gsl_integration_qawc (gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{c}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the Cauchy principal value of the integral of
+@math{f} over @math{(a,b)}, with a singularity at @var{c},
+@tex
+\beforedisplay
+$$
+I = \int_a^b dx\, {f(x) \over x - c}
+ = \lim_{\epsilon \to 0}
+\left\{
+\int_a^{c-\epsilon} dx\, {f(x) \over x - c}
++
+\int_{c+\epsilon}^b dx\, {f(x) \over x - c}
+\right\}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b dx f(x) / (x - c)
+@end example
+
+@end ifinfo
+@noindent
+The adaptive bisection algorithm of QAG is used, with modifications to
+ensure that subdivisions do not occur at the singular point @math{x = c}.
+When a subinterval contains the point @math{x = c} or is close to
+it then a special 25-point modified Clenshaw-Curtis rule is used to control
+the singularity. Further away from the
+singularity the algorithm uses an ordinary 15-point Gauss-Kronrod
+integration rule.
+
+@end deftypefun
+
+@node QAWS adaptive integration for singular functions
+@section QAWS adaptive integration for singular functions
+@cindex QAWS quadrature algorithm
+@cindex singular functions, numerical integration of
+The QAWS algorithm is designed for integrands with algebraic-logarithmic
+singularities at the end-points of an integration region. In order to
+work efficiently the algorithm requires a precomputed table of
+Chebyshev moments.
+
+@deftypefun {gsl_integration_qaws_table *} gsl_integration_qaws_table_alloc (double @var{alpha}, double @var{beta}, int @var{mu}, int @var{nu})
+
+This function allocates space for a @code{gsl_integration_qaws_table}
+struct describing a singular weight function
+@math{W(x)} with the parameters @math{(\alpha, \beta, \mu, \nu)},
+@tex
+\beforedisplay
+$$
+W(x) = (x - a)^\alpha (b - x)^\beta \log^\mu (x - a) \log^\nu (b - x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+W(x) = (x-a)^alpha (b-x)^beta log^mu (x-a) log^nu (b-x)
+@end example
+
+@end ifinfo
+@noindent
+where @math{\alpha > -1}, @math{\beta > -1}, and @math{\mu = 0, 1},
+@math{\nu = 0, 1}. The weight function can take four different forms
+depending on the values of @math{\mu} and @math{\nu},
+@tex
+\beforedisplay
+$$
+\matrix{
+W(x) = (x - a)^\alpha (b - x)^\beta
+ \hfill~ (\mu = 0, \nu = 0) \cr
+W(x) = (x - a)^\alpha (b - x)^\beta \log(x - a)
+ \hfill~ (\mu = 1, \nu = 0) \cr
+W(x) = (x - a)^\alpha (b - x)^\beta \log(b - x)
+ \hfill~ (\mu = 0, \nu = 1) \cr
+W(x) = (x - a)^\alpha (b - x)^\beta \log(x - a) \log(b - x)
+ \hfill~ (\mu = 1, \nu = 1)
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+W(x) = (x-a)^alpha (b-x)^beta (mu = 0, nu = 0)
+W(x) = (x-a)^alpha (b-x)^beta log(x-a) (mu = 1, nu = 0)
+W(x) = (x-a)^alpha (b-x)^beta log(b-x) (mu = 0, nu = 1)
+W(x) = (x-a)^alpha (b-x)^beta log(x-a) log(b-x) (mu = 1, nu = 1)
+@end example
+
+@end ifinfo
+@noindent
+The singular points @math{(a,b)} do not have to be specified until the
+integral is computed, where they are the endpoints of the integration
+range.
+
+The function returns a pointer to the newly allocated table
+@code{gsl_integration_qaws_table} if no errors were detected, and 0 in
+the case of error.
+@end deftypefun
+
+@deftypefun int gsl_integration_qaws_table_set (gsl_integration_qaws_table * @var{t}, double @var{alpha}, double @var{beta}, int @var{mu}, int @var{nu})
+This function modifies the parameters @math{(\alpha, \beta, \mu, \nu)} of
+an existing @code{gsl_integration_qaws_table} struct @var{t}.
+@end deftypefun
+
+@deftypefun void gsl_integration_qaws_table_free (gsl_integration_qaws_table * @var{t})
+This function frees all the memory associated with the
+@code{gsl_integration_qaws_table} struct @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qaws (gsl_function * @var{f}, const double @var{a}, const double @var{b}, gsl_integration_qaws_table * @var{t}, const double @var{epsabs}, const double @var{epsrel}, const size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the integral of the function @math{f(x)} over the
+interval @math{(a,b)} with the singular weight function
+@math{(x-a)^\alpha (b-x)^\beta \log^\mu (x-a) \log^\nu (b-x)}. The parameters
+of the weight function @math{(\alpha, \beta, \mu, \nu)} are taken from the
+table @var{t}. The integral is,
+@tex
+\beforedisplay
+$$
+I = \int_a^b dx\, f(x) (x - a)^\alpha (b - x)^\beta
+ \log^\mu (x - a) \log^\nu (b - x).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b dx f(x) (x-a)^alpha (b-x)^beta log^mu (x-a) log^nu (b-x).
+@end example
+
+@end ifinfo
+@noindent
+The adaptive bisection algorithm of QAG is used. When a subinterval
+contains one of the endpoints then a special 25-point modified
+Clenshaw-Curtis rule is used to control the singularities. For
+subintervals which do not include the endpoints an ordinary 15-point
+Gauss-Kronrod integration rule is used.
+
+@end deftypefun
+
+@node QAWO adaptive integration for oscillatory functions
+@section QAWO adaptive integration for oscillatory functions
+@cindex QAWO quadrature algorithm
+@cindex oscillatory functions, numerical integration of
+The QAWO algorithm is designed for integrands with an oscillatory
+factor, @math{\sin(\omega x)} or @math{\cos(\omega x)}. In order to
+work efficiently the algorithm requires a table of Chebyshev moments
+which must be pre-computed with calls to the functions below.
+
+@deftypefun {gsl_integration_qawo_table *} gsl_integration_qawo_table_alloc (double @var{omega}, double @var{L}, enum gsl_integration_qawo_enum @var{sine}, size_t @var{n})
+
+This function allocates space for a @code{gsl_integration_qawo_table}
+struct and its associated workspace describing a sine or cosine weight
+function @math{W(x)} with the parameters @math{(\omega, L)},
+@tex
+\beforedisplay
+$$
+\eqalign{
+W(x) & = \left\{\matrix{\sin(\omega x) \cr \cos(\omega x)} \right\}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+W(x) = sin(omega x)
+W(x) = cos(omega x)
+@end example
+
+@end ifinfo
+@noindent
+The parameter @var{L} must be the length of the interval over which the
+function will be integrated @math{L = b - a}. The choice of sine or
+cosine is made with the parameter @var{sine} which should be chosen from
+one of the two following symbolic values:
+
+@example
+GSL_INTEG_COSINE
+GSL_INTEG_SINE
+@end example
+
+@noindent
+The @code{gsl_integration_qawo_table} is a table of the trigonometric
+coefficients required in the integration process. The parameter @var{n}
+determines the number of levels of coefficients that are computed. Each
+level corresponds to one bisection of the interval @math{L}, so that
+@var{n} levels are sufficient for subintervals down to the length
+@math{L/2^n}. The integration routine @code{gsl_integration_qawo}
+returns the error @code{GSL_ETABLE} if the number of levels is
+insufficient for the requested accuracy.
+
+@end deftypefun
+
+@deftypefun int gsl_integration_qawo_table_set (gsl_integration_qawo_table * @var{t}, double @var{omega}, double @var{L}, enum gsl_integration_qawo_enum @var{sine})
+This function changes the parameters @var{omega}, @var{L} and @var{sine}
+of the existing workspace @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qawo_table_set_length (gsl_integration_qawo_table * @var{t}, double @var{L})
+This function allows the length parameter @var{L} of the workspace
+@var{t} to be changed.
+@end deftypefun
+
+@deftypefun void gsl_integration_qawo_table_free (gsl_integration_qawo_table * @var{t})
+This function frees all the memory associated with the workspace @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qawo (gsl_function * @var{f}, const double @var{a}, const double @var{epsabs}, const double @var{epsrel}, const size_t @var{limit}, gsl_integration_workspace * @var{workspace}, gsl_integration_qawo_table * @var{wf}, double * @var{result}, double * @var{abserr})
+
+This function uses an adaptive algorithm to compute the integral of
+@math{f} over @math{(a,b)} with the weight function
+@math{\sin(\omega x)} or @math{\cos(\omega x)} defined
+by the table @var{wf},
+@tex
+\beforedisplay
+$$
+\eqalign{
+I & = \int_a^b dx\, f(x) \left\{ \matrix{\sin(\omega x) \cr \cos(\omega x)}\right\}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b dx f(x) sin(omega x)
+I = \int_a^b dx f(x) cos(omega x)
+@end example
+
+@end ifinfo
+@noindent
+The results are extrapolated using the epsilon-algorithm to accelerate
+the convergence of the integral. The function returns the final
+approximation from the extrapolation, @var{result}, and an estimate of
+the absolute error, @var{abserr}. The subintervals and their results are
+stored in the memory provided by @var{workspace}. The maximum number of
+subintervals is given by @var{limit}, which may not exceed the allocated
+size of the workspace.
+
+Those subintervals with ``large'' widths @math{d} where @math{d\omega > 4} are
+computed using a 25-point Clenshaw-Curtis integration rule, which handles the
+oscillatory behavior. Subintervals with a ``small'' widths where
+@math{d\omega < 4} are computed using a 15-point Gauss-Kronrod integration.
+
+@end deftypefun
+
+@node QAWF adaptive integration for Fourier integrals
+@section QAWF adaptive integration for Fourier integrals
+@cindex QAWF quadrature algorithm
+@cindex Fourier integrals, numerical
+
+@deftypefun int gsl_integration_qawf (gsl_function * @var{f}, const double @var{a}, const double @var{epsabs}, const size_t @var{limit}, gsl_integration_workspace * @var{workspace}, gsl_integration_workspace * @var{cycle_workspace}, gsl_integration_qawo_table * @var{wf}, double * @var{result}, double * @var{abserr})
+
+This function attempts to compute a Fourier integral of the function
+@var{f} over the semi-infinite interval @math{[a,+\infty)}.
+@tex
+\beforedisplay
+$$
+\eqalign{
+I & = \int_a^{+\infty} dx\, f(x) \left\{ \matrix{ \sin(\omega x) \cr
+ \cos(\omega x) } \right\}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^@{+\infty@} dx f(x) sin(omega x)
+I = \int_a^@{+\infty@} dx f(x) cos(omega x)
+@end example
+@end ifinfo
+
+The parameter @math{\omega} and choice of @math{\sin} or @math{\cos} is
+taken from the table @var{wf} (the length @var{L} can take any value,
+since it is overridden by this function to a value appropriate for the
+fourier integration). The integral is computed using the QAWO algorithm
+over each of the subintervals,
+@tex
+\beforedisplay
+$$
+\eqalign{
+C_1 & = [a, a + c] \cr
+C_2 & = [a + c, a + 2c] \cr
+\dots & = \dots \cr
+C_k & = [a + (k-1) c, a + k c]
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+C_1 = [a, a + c]
+C_2 = [a + c, a + 2 c]
+... = ...
+C_k = [a + (k-1) c, a + k c]
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$c = (2 \,\hbox{floor}(|\omega|) + 1) \pi/|\omega|$}
+@math{c = (2 floor(|\omega|) + 1) \pi/|\omega|}. The width @math{c} is
+chosen to cover an odd number of periods so that the contributions from
+the intervals alternate in sign and are monotonically decreasing when
+@var{f} is positive and monotonically decreasing. The sum of this
+sequence of contributions is accelerated using the epsilon-algorithm.
+
+This function works to an overall absolute tolerance of
+@var{abserr}. The following strategy is used: on each interval
+@math{C_k} the algorithm tries to achieve the tolerance
+@tex
+\beforedisplay
+$$
+TOL_k = u_k \hbox{\it abserr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+TOL_k = u_k abserr
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$u_k = (1 - p)p^{k-1}$}
+@math{u_k = (1 - p)p^@{k-1@}} and @math{p = 9/10}.
+The sum of the geometric series of contributions from each interval
+gives an overall tolerance of @var{abserr}.
+
+If the integration of a subinterval leads to difficulties then the
+accuracy requirement for subsequent intervals is relaxed,
+@tex
+\beforedisplay
+$$
+TOL_k = u_k \max(\hbox{\it abserr}, \max_{i<k}\{E_i\})
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+TOL_k = u_k max(abserr, max_@{i<k@}@{E_i@})
+@end example
+
+@end ifinfo
+@noindent
+where @math{E_k} is the estimated error on the interval @math{C_k}.
+
+The subintervals and their results are stored in the memory provided by
+@var{workspace}. The maximum number of subintervals is given by
+@var{limit}, which may not exceed the allocated size of the workspace.
+The integration over each subinterval uses the memory provided by
+@var{cycle_workspace} as workspace for the QAWO algorithm.
+
+@end deftypefun
+
+@node Numerical integration error codes
+@section Error codes
+
+In addition to the standard error codes for invalid arguments the
+functions can return the following values,
+
+@table @code
+@item GSL_EMAXITER
+the maximum number of subdivisions was exceeded.
+@item GSL_EROUND
+cannot reach tolerance because of roundoff error,
+or roundoff error was detected in the extrapolation table.
+@item GSL_ESING
+a non-integrable singularity or other bad integrand behavior was found
+in the integration interval.
+@item GSL_EDIVERGE
+the integral is divergent, or too slowly convergent to be integrated
+numerically.
+@end table
+
+@node Numerical integration examples
+@section Examples
+
+The integrator @code{QAGS} will handle a large class of definite
+integrals. For example, consider the following integral, which has a
+algebraic-logarithmic singularity at the origin,
+@tex
+\beforedisplay
+$$
+\int_0^1 x^{-1/2} \log(x) \,dx = -4
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_0^1 x^@{-1/2@} log(x) dx = -4
+@end example
+
+@end ifinfo
+@noindent
+The program below computes this integral to a relative accuracy bound of
+@code{1e-7}.
+
+@example
+@verbatiminclude examples/integration.c
+@end example
+
+@noindent
+The results below show that the desired accuracy is achieved after 8
+subdivisions.
+
+@example
+$ ./a.out
+@verbatiminclude examples/integration.out
+@end example
+
+@noindent
+In fact, the extrapolation procedure used by @code{QAGS} produces an
+accuracy of almost twice as many digits. The error estimate returned by
+the extrapolation procedure is larger than the actual error, giving a
+margin of safety of one order of magnitude.
+
+
+@node Numerical integration References and Further Reading
+@section References and Further Reading
+
+The following book is the definitive reference for @sc{quadpack}, and was
+written by the original authors. It provides descriptions of the
+algorithms, program listings, test programs and examples. It also
+includes useful advice on numerical integration and many references to
+the numerical integration literature used in developing @sc{quadpack}.
+
+@itemize @asis
+@item
+R. Piessens, E. de Doncker-Kapenga, C.W. Uberhuber, D.K. Kahaner.
+@cite{@sc{quadpack} A subroutine package for automatic integration}
+Springer Verlag, 1983.
+@end itemize
+
+@noindent
+
+
+
+
+
+