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
|
<html lang="en">
<head>
<title>Root Finding Algorithms using Derivatives - GNU Scientific Library -- Reference Manual</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="GNU Scientific Library -- Reference Manual">
<meta name="generator" content="makeinfo 4.8">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="One-dimensional-Root_002dFinding.html" title="One dimensional Root-Finding">
<link rel="prev" href="Root-Bracketing-Algorithms.html" title="Root Bracketing Algorithms">
<link rel="next" href="Root-Finding-Examples.html" title="Root Finding Examples">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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.2 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 freedom to copy and modify this
GNU Manual, like GNU software.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<p>
<a name="Root-Finding-Algorithms-using-Derivatives"></a>
Next: <a rel="next" accesskey="n" href="Root-Finding-Examples.html">Root Finding Examples</a>,
Previous: <a rel="previous" accesskey="p" href="Root-Bracketing-Algorithms.html">Root Bracketing Algorithms</a>,
Up: <a rel="up" accesskey="u" href="One-dimensional-Root_002dFinding.html">One dimensional Root-Finding</a>
<hr>
</div>
<h3 class="section">32.9 Root Finding Algorithms using Derivatives</h3>
<p>The root polishing algorithms described in this section require an
initial guess for the location of the root. There is no absolute
guarantee of convergence—the function must be suitable for this
technique and the initial guess must be sufficiently close to the root
for it to work. When these conditions are satisfied then convergence is
quadratic.
<p>These algorithms make use of both the function and its derivative.
<div class="defun">
— Derivative Solver: <b>gsl_root_fdfsolver_newton</b><var><a name="index-gsl_005froot_005ffdfsolver_005fnewton-2240"></a></var><br>
<blockquote><p><a name="index-Newton_0027s-method-for-finding-roots-2241"></a><a name="index-root-finding_002c-Newton_0027s-method-2242"></a>
Newton's Method is the standard root-polishing algorithm. The algorithm
begins with an initial guess for the location of the root. On each
iteration, a line tangent to the function f is drawn at that
position. The point where this line crosses the x-axis becomes
the new guess. The iteration is defined by the following sequence,
<pre class="example"> x_{i+1} = x_i - f(x_i)/f'(x_i)
</pre>
<p class="noindent">Newton's method converges quadratically for single roots, and linearly
for multiple roots.
<!-- eps file "roots-newtons-method.eps" -->
<!-- @iftex -->
<!-- @sp 1 -->
<!-- @center @image{roots-newtons-method,3.4in} -->
<!-- @quotation -->
<!-- Several iterations of Newton's Method, where @math{g_n} is the -->
<!-- @math{n}th guess. -->
<!-- @end quotation -->
<!-- @end iftex -->
</blockquote></div>
<!-- ============================================================ -->
<div class="defun">
— Derivative Solver: <b>gsl_root_fdfsolver_secant</b><var><a name="index-gsl_005froot_005ffdfsolver_005fsecant-2243"></a></var><br>
<blockquote><p><a name="index-secant-method-for-finding-roots-2244"></a><a name="index-root-finding_002c-secant-method-2245"></a>
The <dfn>secant method</dfn> is a simplified version of Newton's method which does
not require the computation of the derivative on every step.
<p>On its first iteration the algorithm begins with Newton's method, using
the derivative to compute a first step,
<pre class="example"> x_1 = x_0 - f(x_0)/f'(x_0)
</pre>
<p class="noindent">Subsequent iterations avoid the evaluation of the derivative by
replacing it with a numerical estimate, the slope of the line through
the previous two points,
<pre class="example"> x_{i+1} = x_i f(x_i) / f'_{est} where
f'_{est} = (f(x_i) - f(x_{i-1})/(x_i - x_{i-1})
</pre>
<p class="noindent">When the derivative does not change significantly in the vicinity of the
root the secant method gives a useful saving. Asymptotically the secant
method is faster than Newton's method whenever the cost of evaluating
the derivative is more than 0.44 times the cost of evaluating the
function itself. As with all methods of computing a numerical
derivative the estimate can suffer from cancellation errors if the
separation of the points becomes too small.
<p>On single roots, the method has a convergence of order (1 + \sqrt
5)/2 (approximately 1.62). It converges linearly for multiple
roots.
<!-- eps file "roots-secant-method.eps" -->
<!-- @iftex -->
<!-- @tex -->
<!-- \input epsf -->
<!-- \medskip -->
<!-- \centerline{\epsfxsize=5in\epsfbox{roots-secant-method.eps}} -->
<!-- @end tex -->
<!-- @quotation -->
<!-- Several iterations of Secant Method, where @math{g_n} is the @math{n}th -->
<!-- guess. -->
<!-- @end quotation -->
<!-- @end iftex -->
</blockquote></div>
<!-- ============================================================ -->
<div class="defun">
— Derivative Solver: <b>gsl_root_fdfsolver_steffenson</b><var><a name="index-gsl_005froot_005ffdfsolver_005fsteffenson-2246"></a></var><br>
<blockquote><p><a name="index-Steffenson_0027s-method-for-finding-roots-2247"></a><a name="index-root-finding_002c-Steffenson_0027s-method-2248"></a>
The <dfn>Steffenson Method</dfn> provides the fastest convergence of all the
routines. It combines the basic Newton algorithm with an Aitken
“delta-squared” acceleration. If the Newton iterates are x_i
then the acceleration procedure generates a new sequence R_i,
<pre class="example"> R_i = x_i - (x_{i+1} - x_i)^2 / (x_{i+2} - 2 x_{i+1} + x_{i})
</pre>
<p class="noindent">which converges faster than the original sequence under reasonable
conditions. The new sequence requires three terms before it can produce
its first value so the method returns accelerated values on the second
and subsequent iterations. On the first iteration it returns the
ordinary Newton estimate. The Newton iterate is also returned if the
denominator of the acceleration term ever becomes zero.
<p>As with all acceleration procedures this method can become unstable if
the function is not well-behaved.
</p></blockquote></div>
<hr>The GNU Scientific Library - a free numerical library licensed under the GNU GPL<br>Back to the <a href="/software/gsl/">GNU Scientific Library Homepage</a></body></html>
|