Bulirsch–Stoer algorithm
In numerical analysis, the Bulirsch–Stoer algorithm is a method for the numerical solution of ordinary differential equations which combines three powerful ideas: Richardson extrapolation, the use of rational function extrapolation in Richardson-type applications, and the modified midpoint method,[1] to obtain numerical solutions to ordinary differential equations (ODEs) with high accuracy and comparatively little computational effort. It is named after Roland Bulirsch and Josef Stoer. It is sometimes called the Gragg–Bulirsch–Stoer (GBS) algorithm because of the importance of a result about the error function of the modified midpoint method, due to William B. Gragg.
Underlying ideas
[edit]The idea of Richardson extrapolation is to consider a numerical calculation whose accuracy depends on the used stepsize h as an (unknown) analytic function of the stepsize h, performing the numerical calculation with various values of h, fitting a (chosen) analytic function to the resulting points, and then evaluating the fitting function for h = 0, thus trying to approximate the result of the calculation with infinitely fine steps.
Bulirsch and Stoer recognized that using rational functions as fitting functions for Richardson extrapolation in numerical integration is superior to using polynomial functions because rational functions are able to approximate functions with poles rather well (compared to polynomial functions), given that there are enough higher-power terms in the denominator to account for nearby poles. While a polynomial interpolation or extrapolation only yields good results if the nearest pole is rather far outside a circle around the known data points in the complex plane, rational function interpolation or extrapolation can have remarkable accuracy even in the presence of nearby poles.
The modified midpoint method by itself is a second-order method, and therefore generally inferior to fourth-order methods like the fourth-order Runge–Kutta method. However, it has the advantage of requiring only one derivative evaluation per substep (asymptotically for a large number of substeps), and, in addition, as discovered by Gragg, the error of a modified midpoint step of size H, consisting of n substeps of size h = H/n each, and expressed as a power series in h, contains only even powers of h. This makes the modified midpoint method extremely useful to the Bulirsch–Stoer method as the accuracy increases two orders at a time when the results of separate attempts to cross the interval H with increasing numbers of substeps are combined.
Hairer, Nørsett & Wanner (1993, p. 228), in their discussion of the method, say that rational extrapolation in this case is nearly never an improvement over polynomial interpolation (Deuflhard 1983). Furthermore, the modified midpoint method is a modification of the regular midpoint method to make it more stable, but because of the extrapolation this does not really matter (Shampine & Baca 1983).
References
[edit]- Deuflhard, Peter (1983), "Order and stepsize control in extrapolation methods", Numerische Mathematik, 41 (3): 399–422, doi:10.1007/BF01418332, ISSN 0029-599X, S2CID 121911947.
- Hairer, Ernst; Nørsett, Syvert Paul; Wanner, Gerhard (1993), Solving ordinary differential equations I: Nonstiff problems, Berlin, New York: Springer-Verlag, ISBN 978-3-540-56670-0.
- Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). "Section 17.3. Richardson Extrapolation and the Bulirsch-Stoer Method". Numerical Recipes: The Art of Scientific Computing (3rd ed.). New York: Cambridge University Press. ISBN 978-0-521-88068-8. Archived from the original on 2011-08-11. Retrieved 2011-08-17.
- Shampine, Lawrence F.; Baca, Lorraine S. (1983), "Smoothing the extrapolated midpoint rule", Numerische Mathematik, 41 (2): 165–175, doi:10.1007/BF01390211, ISSN 0029-599X, S2CID 121097742.
External links
[edit]- ODEX.F, implementation of the Bulirsch–Stoer algorithm by Ernst Hairer and Gerhard Wanner (for other routines and license conditions, see their Fortran and Matlab Codes page).
- BOOST library, implementation in C++.
- Apache Commons Math, implementation in Java.