File: QAWO-adaptive-integration-for-oscillatory-functions.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (166 lines) | stat: -rw-r--r-- 9,564 bytes parent folder | download
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 &ndash; Reference Manual: QAWO adaptive integration for oscillatory functions</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: QAWO adaptive integration for oscillatory functions">
<meta name="keywords" content="GNU Scientific Library &ndash; 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> &nbsp; [<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 &ldquo;large&rdquo; widths <em>d</em> where <em>d\omega &gt; 4</em> are
computed using a 25-point Clenshaw-Curtis integration rule, which handles the
oscillatory behavior.  Subintervals with a &ldquo;small&rdquo; widths where
<em>d\omega &lt; 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> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>