de_levels.html 7.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Setting the Maximum Interval Halvings and Memory Requirements</title>
  5. <link rel="stylesheet" href="../../math.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../../index.html" title="Math Toolkit 2.11.0">
  8. <link rel="up" href="../double_exponential.html" title="Double-exponential quadrature">
  9. <link rel="prev" href="de_tol.html" title="Setting the Termination Condition for Integration">
  10. <link rel="next" href="de_thread.html" title="Thread Safety">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="de_tol.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../double_exponential.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="de_thread.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h3 class="title">
  27. <a name="math_toolkit.double_exponential.de_levels"></a><a class="link" href="de_levels.html" title="Setting the Maximum Interval Halvings and Memory Requirements">Setting the
  28. Maximum Interval Halvings and Memory Requirements</a>
  29. </h3></div></div></div>
  30. <p>
  31. The max interval halvings is the maximum number of times the interval can
  32. be cut in half before giving up. If the accuracy is not met at that time,
  33. the routine returns its best estimate, along with the <code class="computeroutput"><span class="identifier">error</span></code>
  34. and <code class="computeroutput"><span class="identifier">L1</span></code>, which allows the
  35. user to decide if another quadrature routine should be employed.
  36. </p>
  37. <p>
  38. An example of this is
  39. </p>
  40. <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">tol</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">epsilon</span><span class="special">());</span>
  41. <span class="identifier">size_t</span> <span class="identifier">max_halvings</span> <span class="special">=</span> <span class="number">12</span><span class="special">;</span>
  42. <span class="identifier">tanh_sinh</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">integrator</span><span class="special">(</span><span class="identifier">max_halvings</span><span class="special">);</span>
  43. <span class="keyword">auto</span> <span class="identifier">f</span> <span class="special">=</span> <span class="special">[](</span><span class="keyword">double</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="number">5</span><span class="special">*</span><span class="identifier">x</span> <span class="special">+</span> <span class="number">7</span><span class="special">;</span> <span class="special">};</span>
  44. <span class="keyword">double</span> <span class="identifier">error</span><span class="special">,</span> <span class="identifier">L1</span><span class="special">;</span>
  45. <span class="keyword">double</span> <span class="identifier">Q</span> <span class="special">=</span> <span class="identifier">integrator</span><span class="special">.</span><span class="identifier">integrate</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> <span class="special">(</span><span class="keyword">double</span><span class="special">)</span> <span class="number">0</span><span class="special">,</span> <span class="special">(</span><span class="keyword">double</span><span class="special">)</span> <span class="number">1</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">error</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">L1</span><span class="special">);</span>
  46. <span class="keyword">if</span> <span class="special">(</span><span class="identifier">error</span><span class="special">*</span><span class="identifier">L1</span> <span class="special">&gt;</span> <span class="number">0.01</span><span class="special">)</span>
  47. <span class="special">{</span>
  48. <span class="identifier">Q</span> <span class="special">=</span> <span class="identifier">some_other_quadrature_method</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> <span class="special">(</span><span class="keyword">double</span><span class="special">)</span> <span class="number">0</span><span class="special">,</span> <span class="special">(</span><span class="keyword">double</span><span class="special">)</span> <span class="number">1</span><span class="special">);</span>
  49. <span class="special">}</span>
  50. </pre>
  51. <p>
  52. It's important to remember that the number of sample points doubles with
  53. each new level, as does the memory footprint of the integrator object. Further,
  54. if the integral is smooth, then the precision will be doubling with each
  55. new level, so that for example, many integrals can achieve 100 decimal digit
  56. precision after just 7 levels. That said, abscissa-weight pairs for new levels
  57. are computed only when a new level is actually required (see thread safety),
  58. none the less, you should avoid setting the maximum arbitrarily high "just
  59. in case" as the time and space requirements for a large number of levels
  60. can quickly grow out of control.
  61. </p>
  62. </div>
  63. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  64. <td align="left"></td>
  65. <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2019 Nikhar
  66. Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos,
  67. Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan
  68. R&#229;de, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg,
  69. Daryle Walker and Xiaogang Zhang<p>
  70. Distributed under the Boost Software License, Version 1.0. (See accompanying
  71. file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
  72. </p>
  73. </div></td>
  74. </tr></table>
  75. <hr>
  76. <div class="spirit-nav">
  77. <a accesskey="p" href="de_tol.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../double_exponential.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="de_thread.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  78. </div>
  79. </body>
  80. </html>