File: Root-Bracketing-Algorithms.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 (164 lines) | stat: -rw-r--r-- 8,232 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
<!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: Root Bracketing Algorithms</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Root Bracketing Algorithms">
<meta name="keywords" content="GNU Scientific Library &ndash; Reference Manual: Root Bracketing Algorithms">
<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="One-dimensional-Root_002dFinding.html#One-dimensional-Root_002dFinding" rel="up" title="One dimensional Root-Finding">
<link href="Root-Finding-Algorithms-using-Derivatives.html#Root-Finding-Algorithms-using-Derivatives" rel="next" title="Root Finding Algorithms using Derivatives">
<link href="Search-Stopping-Parameters.html#Search-Stopping-Parameters" rel="previous" title="Search Stopping Parameters">
<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="Root-Bracketing-Algorithms"></a>
<div class="header">
<p>
Next: <a href="Root-Finding-Algorithms-using-Derivatives.html#Root-Finding-Algorithms-using-Derivatives" accesskey="n" rel="next">Root Finding Algorithms using Derivatives</a>, Previous: <a href="Search-Stopping-Parameters.html#Search-Stopping-Parameters" accesskey="p" rel="previous">Search Stopping Parameters</a>, Up: <a href="One-dimensional-Root_002dFinding.html#One-dimensional-Root_002dFinding" accesskey="u" rel="up">One dimensional Root-Finding</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Root-Bracketing-Algorithms-1"></a>
<h3 class="section">34.8 Root Bracketing Algorithms</h3>

<p>The root bracketing algorithms described in this section require an
initial interval which is guaranteed to contain a root&mdash;if <em>a</em>
and <em>b</em> are the endpoints of the interval then <em>f(a)</em> must
differ in sign from <em>f(b)</em>.  This ensures that the function crosses
zero at least once in the interval.  If a valid initial interval is used
then these algorithm cannot fail, provided the function is well-behaved.
</p>
<p>Note that a bracketing algorithm cannot find roots of even degree, since
these do not cross the <em>x</em>-axis.
</p>
<dl>
<dt><a name="index-gsl_005froot_005ffsolver_005fbisection"></a>Solver: <strong>gsl_root_fsolver_bisection</strong></dt>
<dd>
<a name="index-bisection-algorithm-for-finding-roots"></a>
<a name="index-root-finding_002c-bisection-algorithm"></a>

<p>The <em>bisection algorithm</em> is the simplest method of bracketing the
roots of a function.   It is the slowest algorithm provided by
the library, with linear convergence.
</p>
<p>On each iteration, the interval is bisected and the value of the
function at the midpoint is calculated.  The sign of this value is used
to determine which half of the interval does not contain a root.  That
half is discarded to give a new, smaller interval containing the
root.  This procedure can be continued indefinitely until the interval is
sufficiently small.
</p>
<p>At any time the current estimate of the root is taken as the midpoint of
the interval.
</p>

</dd></dl>


<dl>
<dt><a name="index-gsl_005froot_005ffsolver_005ffalsepos"></a>Solver: <strong>gsl_root_fsolver_falsepos</strong></dt>
<dd><a name="index-false-position-algorithm-for-finding-roots"></a>
<a name="index-root-finding_002c-false-position-algorithm"></a>

<p>The <em>false position algorithm</em> is a method of finding roots based on
linear interpolation.  Its convergence is linear, but it is usually
faster than bisection.
</p>
<p>On each iteration a line is drawn between the endpoints <em>(a,f(a))</em>
and <em>(b,f(b))</em> and the point where this line crosses the
<em>x</em>-axis taken as a &ldquo;midpoint&rdquo;.  The value of the function at
this point is calculated and its sign is used to determine which side of
the interval does not contain a root.  That side is discarded to give a
new, smaller interval containing the root.  This procedure can be
continued indefinitely until the interval is sufficiently small.
</p>
<p>The best estimate of the root is taken from the linear interpolation of
the interval on the current iteration.
</p>
</dd></dl>


<dl>
<dt><a name="index-gsl_005froot_005ffsolver_005fbrent"></a>Solver: <strong>gsl_root_fsolver_brent</strong></dt>
<dd><a name="index-Brent_0027s-method-for-finding-roots"></a>
<a name="index-root-finding_002c-Brent_0027s-method"></a>

<p>The <em>Brent-Dekker method</em> (referred to here as <em>Brent&rsquo;s method</em>)
combines an interpolation strategy with the bisection algorithm.  This
produces a fast algorithm which is still robust.
</p>
<p>On each iteration Brent&rsquo;s method approximates the function using an
interpolating curve.  On the first iteration this is a linear
interpolation of the two endpoints.  For subsequent iterations the
algorithm uses an inverse quadratic fit to the last three points, for
higher accuracy.  The intercept of the interpolating curve with the
<em>x</em>-axis is taken as a guess for the root.  If it lies within the
bounds of the current interval then the interpolating point is accepted,
and used to generate a smaller interval.  If the interpolating point is
not accepted then the algorithm falls back to an ordinary bisection
step.
</p>
<p>The best estimate of the root is taken from the most recent
interpolation or bisection.
</p></dd></dl>


<hr>
<div class="header">
<p>
Next: <a href="Root-Finding-Algorithms-using-Derivatives.html#Root-Finding-Algorithms-using-Derivatives" accesskey="n" rel="next">Root Finding Algorithms using Derivatives</a>, Previous: <a href="Search-Stopping-Parameters.html#Search-Stopping-Parameters" accesskey="p" rel="previous">Search Stopping Parameters</a>, Up: <a href="One-dimensional-Root_002dFinding.html#One-dimensional-Root_002dFinding" accesskey="u" rel="up">One dimensional Root-Finding</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>