File: Root-Finding-Algorithms-using-Derivatives.html

package info (click to toggle)
gsl-ref-html 1.10-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 4,496 kB
  • ctags: 2,955
  • sloc: makefile: 33
file content (153 lines) | stat: -rw-r--r-- 7,650 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
<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:&nbsp;<a rel="next" accesskey="n" href="Root-Finding-Examples.html">Root Finding Examples</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Root-Bracketing-Algorithms.html">Root Bracketing Algorithms</a>,
Up:&nbsp;<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&mdash;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">
&mdash; 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">
&mdash; 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">
&mdash; 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
&ldquo;delta-squared&rdquo; 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>