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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".
(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library – Reference Manual: QAWO adaptive integration for oscillatory functions</title>
<meta name="description" content="GNU Scientific Library – Reference Manual: QAWO adaptive integration for oscillatory functions">
<meta name="keywords" content="GNU Scientific Library – Reference Manual: QAWO adaptive integration for oscillatory functions">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Numerical-Integration.html#Numerical-Integration" rel="up" title="Numerical Integration">
<link href="QAWF-adaptive-integration-for-Fourier-integrals.html#QAWF-adaptive-integration-for-Fourier-integrals" rel="next" title="QAWF adaptive integration for Fourier integrals">
<link href="QAWS-adaptive-integration-for-singular-functions.html#QAWS-adaptive-integration-for-singular-functions" rel="previous" title="QAWS adaptive integration for singular functions">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="QAWO-adaptive-integration-for-oscillatory-functions"></a>
<div class="header">
<p>
Next: <a href="QAWF-adaptive-integration-for-Fourier-integrals.html#QAWF-adaptive-integration-for-Fourier-integrals" accesskey="n" rel="next">QAWF adaptive integration for Fourier integrals</a>, Previous: <a href="QAWS-adaptive-integration-for-singular-functions.html#QAWS-adaptive-integration-for-singular-functions" accesskey="p" rel="previous">QAWS adaptive integration for singular functions</a>, Up: <a href="Numerical-Integration.html#Numerical-Integration" accesskey="u" rel="up">Numerical Integration</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="QAWO-adaptive-integration-for-oscillatory-functions-1"></a>
<h3 class="section">17.9 QAWO adaptive integration for oscillatory functions</h3>
<a name="index-QAWO-quadrature-algorithm"></a>
<a name="index-oscillatory-functions_002c-numerical-integration-of"></a>
<p>The QAWO algorithm is designed for integrands with an oscillatory
factor, <em>\sin(\omega x)</em> or <em>\cos(\omega x)</em>. In order to
work efficiently the algorithm requires a table of Chebyshev moments
which must be pre-computed with calls to the functions below.
</p>
<dl>
<dt><a name="index-gsl_005fintegration_005fqawo_005ftable_005falloc"></a>Function: <em>gsl_integration_qawo_table *</em> <strong>gsl_integration_qawo_table_alloc</strong> <em>(double <var>omega</var>, double <var>L</var>, enum gsl_integration_qawo_enum <var>sine</var>, size_t <var>n</var>)</em></dt>
<dd><a name="index-gsl_005fintegration_005fqawo_005ftable"></a>
<p>This function allocates space for a <code>gsl_integration_qawo_table</code>
struct and its associated workspace describing a sine or cosine weight
function <em>W(x)</em> with the parameters <em>(\omega, L)</em>,
</p>
<div class="example">
<pre class="example">W(x) = sin(omega x)
W(x) = cos(omega x)
</pre></div>
<p>The parameter <var>L</var> must be the length of the interval over which the
function will be integrated <em>L = b - a</em>. The choice of sine or
cosine is made with the parameter <var>sine</var> which should be chosen from
one of the two following symbolic values:
</p>
<div class="example">
<pre class="example">GSL_INTEG_COSINE
GSL_INTEG_SINE
</pre></div>
<p>The <code>gsl_integration_qawo_table</code> is a table of the trigonometric
coefficients required in the integration process. The parameter <var>n</var>
determines the number of levels of coefficients that are computed. Each
level corresponds to one bisection of the interval <em>L</em>, so that
<var>n</var> levels are sufficient for subintervals down to the length
<em>L/2^n</em>. The integration routine <code>gsl_integration_qawo</code>
returns the error <code>GSL_ETABLE</code> if the number of levels is
insufficient for the requested accuracy.
</p>
</dd></dl>
<dl>
<dt><a name="index-gsl_005fintegration_005fqawo_005ftable_005fset"></a>Function: <em>int</em> <strong>gsl_integration_qawo_table_set</strong> <em>(gsl_integration_qawo_table * <var>t</var>, double <var>omega</var>, double <var>L</var>, enum gsl_integration_qawo_enum <var>sine</var>)</em></dt>
<dd><p>This function changes the parameters <var>omega</var>, <var>L</var> and <var>sine</var>
of the existing workspace <var>t</var>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005fintegration_005fqawo_005ftable_005fset_005flength"></a>Function: <em>int</em> <strong>gsl_integration_qawo_table_set_length</strong> <em>(gsl_integration_qawo_table * <var>t</var>, double <var>L</var>)</em></dt>
<dd><p>This function allows the length parameter <var>L</var> of the workspace
<var>t</var> to be changed.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005fintegration_005fqawo_005ftable_005ffree"></a>Function: <em>void</em> <strong>gsl_integration_qawo_table_free</strong> <em>(gsl_integration_qawo_table * <var>t</var>)</em></dt>
<dd><p>This function frees all the memory associated with the workspace <var>t</var>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005fintegration_005fqawo"></a>Function: <em>int</em> <strong>gsl_integration_qawo</strong> <em>(gsl_function * <var>f</var>, const double <var>a</var>, const double <var>epsabs</var>, const double <var>epsrel</var>, const size_t <var>limit</var>, gsl_integration_workspace * <var>workspace</var>, gsl_integration_qawo_table * <var>wf</var>, double * <var>result</var>, double * <var>abserr</var>)</em></dt>
<dd>
<p>This function uses an adaptive algorithm to compute the integral of
<em>f</em> over <em>(a,b)</em> with the weight function
<em>\sin(\omega x)</em> or <em>\cos(\omega x)</em> defined
by the table <var>wf</var>,
</p>
<div class="example">
<pre class="example">I = \int_a^b dx f(x) sin(omega x)
I = \int_a^b dx f(x) cos(omega x)
</pre></div>
<p>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</var>, and an estimate of
the absolute error, <var>abserr</var>. The subintervals and their results are
stored in the memory provided by <var>workspace</var>. The maximum number of
subintervals is given by <var>limit</var>, which may not exceed the allocated
size of the workspace.
</p>
<p>Those subintervals with “large” widths <em>d</em> where <em>d\omega > 4</em> are
computed using a 25-point Clenshaw-Curtis integration rule, which handles the
oscillatory behavior. Subintervals with a “small” widths where
<em>d\omega < 4</em> are computed using a 15-point Gauss-Kronrod integration.
</p>
</dd></dl>
<hr>
<div class="header">
<p>
Next: <a href="QAWF-adaptive-integration-for-Fourier-integrals.html#QAWF-adaptive-integration-for-Fourier-integrals" accesskey="n" rel="next">QAWF adaptive integration for Fourier integrals</a>, Previous: <a href="QAWS-adaptive-integration-for-singular-functions.html#QAWS-adaptive-integration-for-singular-functions" accesskey="p" rel="previous">QAWS adaptive integration for singular functions</a>, Up: <a href="Numerical-Integration.html#Numerical-Integration" accesskey="u" rel="up">Numerical Integration</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|