1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Quintic Hermite interpolation</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.12.0"> 8<link rel="up" href="../interpolation.html" title="Chapter 12. Interpolation"> 9<link rel="prev" href="pchip.html" title="PCHIP interpolation"> 10<link rel="next" href="../quadrature.html" title="Chapter 13. Quadrature and Differentiation"> 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="pchip.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interpolation.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="../quadrature.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 27<a name="math_toolkit.quintic_hermite"></a><a class="link" href="quintic_hermite.html" title="Quintic Hermite interpolation">Quintic Hermite interpolation</a> 28</h2></div></div></div> 29<h4> 30<a name="math_toolkit.quintic_hermite.h0"></a> 31 <span class="phrase"><a name="math_toolkit.quintic_hermite.synopsis"></a></span><a class="link" href="quintic_hermite.html#math_toolkit.quintic_hermite.synopsis">Synopsis</a> 32 </h4> 33<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">interpolators</span><span class="special">/</span><span class="identifier">quintic_hermite</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 34 35<span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">interpolators</span> <span class="special">{</span> 36 37<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">RandomAccessContainer</span><span class="special">></span> 38<span class="keyword">class</span> <span class="identifier">quintic_hermite</span> <span class="special">{</span> 39<span class="keyword">public</span><span class="special">:</span> 40 <span class="keyword">using</span> <span class="identifier">Real</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">RandomAccessContainer</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">;</span> 41 <span class="identifier">quintic_hermite</span><span class="special">(</span><span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">dydx</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">d2ydx2</span><span class="special">)</span> 42 43 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 44 45 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="identifier">prime</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 46 47 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="identifier">double_prime</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 48 49 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">Real</span><span class="special">,</span> <span class="identifier">Real</span><span class="special">></span> <span class="identifier">domain</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 50 51 <span class="keyword">friend</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span> <span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">quintic_hermite</span> <span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> 52 53 <span class="keyword">void</span> <span class="identifier">push_back</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">dydx</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">d2ydx2</span><span class="special">);</span> 54<span class="special">};</span> 55 56<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">RandomAccessContainer</span><span class="special">></span> 57<span class="keyword">class</span> <span class="identifier">cardinal_quintic_hermite</span> <span class="special">{</span> 58<span class="keyword">public</span><span class="special">:</span> 59 <span class="keyword">using</span> <span class="identifier">Real</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">RandomAccessContainer</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">;</span> 60 <span class="identifier">cardinal_quintic_hermite</span><span class="special">(</span><span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">dydx</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">d2ydx2</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">x0</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">dx</span><span class="special">);</span> 61 62 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 63 64 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="identifier">prime</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 65 66 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="identifier">double_prime</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 67 68 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">Real</span><span class="special">,</span> <span class="identifier">Real</span><span class="special">></span> <span class="identifier">domain</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 69<span class="special">};</span> 70 71<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">RandomAccessContainer</span><span class="special">></span> 72<span class="keyword">class</span> <span class="identifier">cardinal_quintic_hermite_aos</span> <span class="special">{</span> 73<span class="keyword">public</span><span class="special">:</span> 74 <span class="keyword">using</span> <span class="identifier">Point</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">RandomAccessContainer</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">;</span> 75 <span class="keyword">using</span> <span class="identifier">Real</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">;</span> 76 <span class="identifier">cardinal_quintic_hermite_aos</span><span class="special">(</span><span class="identifier">RandomAccessContainer</span> <span class="special">&&</span> <span class="identifier">data</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">x0</span><span class="special">,</span> <span class="identifier">Real</span> <span class="identifier">dx</span><span class="special">)</span> 77 78 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 79 80 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="identifier">prime</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 81 82 <span class="keyword">inline</span> <span class="identifier">Real</span> <span class="identifier">double_prime</span><span class="special">(</span><span class="identifier">Real</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 83 84 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="identifier">Real</span><span class="special">,</span> <span class="identifier">Real</span><span class="special">></span> <span class="identifier">domain</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 85 86<span class="special">}</span> 87</pre> 88<h4> 89<a name="math_toolkit.quintic_hermite.h1"></a> 90 <span class="phrase"><a name="math_toolkit.quintic_hermite.quintic_hermite_interpolation"></a></span><a class="link" href="quintic_hermite.html#math_toolkit.quintic_hermite.quintic_hermite_interpolation">Quintic 91 Hermite Interpolation</a> 92 </h4> 93<p> 94 The quintic Hermite interpolator takes a list of possibly non-uniformly spaced 95 abscissas, ordinates, and their velocities and accelerations which are used 96 to construct a quintic interpolating polynomial between segments. This is useful 97 for taking solution skeletons from ODE steppers and turning them into a continuous 98 function, provided that the right-hand side <span class="emphasis"><em>f</em></span>(<span class="emphasis"><em>x</em></span>, 99 <span class="emphasis"><em>y</em></span>) is differentiable along the solution path. The interpolant 100 is <span class="emphasis"><em>C</em></span><sup>2</sup> and its evaluation has (log(<span class="emphasis"><em>N</em></span>)) 101 complexity. An example usage is as follows: 102 </p> 103<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">x</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">};</span> 104<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">y</span><span class="special">{</span><span class="number">7</span><span class="special">,</span><span class="number">8</span><span class="special">,</span><span class="number">9</span><span class="special">,</span><span class="number">10</span><span class="special">,</span><span class="number">11</span><span class="special">,</span><span class="number">12</span><span class="special">};</span> 105<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">dydx</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">};</span> 106<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">d2ydx2</span><span class="special">{</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">};</span> 107 108<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">interpolators</span><span class="special">::</span><span class="identifier">quintic_hermite</span><span class="special">;</span> 109<span class="keyword">auto</span> <span class="identifier">spline</span> <span class="special">=</span> <span class="identifier">quintic_hermite</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">y</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">dydx</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">d2ydx2</span><span class="special">));</span> 110<span class="comment">// evaluate at a point:</span> 111<span class="keyword">double</span> <span class="identifier">z</span> <span class="special">=</span> <span class="identifier">spline</span><span class="special">(</span><span class="number">3.4</span><span class="special">);</span> 112<span class="comment">// evaluate derivative at a point:</span> 113<span class="keyword">double</span> <span class="identifier">zprime</span> <span class="special">=</span> <span class="identifier">spline</span><span class="special">.</span><span class="identifier">prime</span><span class="special">(</span><span class="number">3.4</span><span class="special">);</span> 114</pre> 115<p> 116 Periodically, it is helpful to see what data the interpolator has. This can 117 be achieved via 118 </p> 119<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">spline</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> 120</pre> 121<p> 122 Note that the interpolator is pimpl'd, so that copying the class is cheap, 123 and hence it can be shared between threads. (The call operator and <code class="computeroutput"><span class="special">.</span><span class="identifier">prime</span><span class="special">()</span></code> 124 are threadsafe.) 125 </p> 126<p> 127 The interpolator can be updated in constant time. Hence we can use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">circular_buffer</span></code> 128 to do real-time interpolation. 129 </p> 130<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">circular_buffer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 131<span class="special">...</span> 132<span class="identifier">boost</span><span class="special">::</span><span class="identifier">circular_buffer</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">initial_x</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">};</span> 133<span class="identifier">boost</span><span class="special">::</span><span class="identifier">circular_buffer</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">initial_y</span><span class="special">{</span><span class="number">4</span><span class="special">,</span><span class="number">5</span><span class="special">,</span><span class="number">6</span><span class="special">,</span><span class="number">7</span><span class="special">};</span> 134<span class="identifier">boost</span><span class="special">::</span><span class="identifier">circular_buffer</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">initial_dydx</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">};</span> 135<span class="identifier">boost</span><span class="special">::</span><span class="identifier">circular_buffer</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">initial_d2ydx2</span><span class="special">{</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">};</span> 136<span class="keyword">auto</span> <span class="identifier">circular_akima</span> <span class="special">=</span> <span class="identifier">quintic_hermite</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">initial_x</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">initial_y</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">initial_dydx</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">initial_d2ydx2</span><span class="special">));</span> 137<span class="comment">// interpolate via call operation:</span> 138<span class="keyword">double</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">circular_akima</span><span class="special">(</span><span class="number">3.5</span><span class="special">);</span> 139<span class="comment">// add new data:</span> 140<span class="identifier">circular_akima</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> 141<span class="comment">// interpolate at 4.5:</span> 142<span class="identifier">y</span> <span class="special">=</span> <span class="identifier">circular_akima</span><span class="special">(</span><span class="number">4.5</span><span class="special">);</span> 143</pre> 144<p> 145 <span class="inlinemediaobject"><object type="image/svg+xml" data="../../graphs/quintic_sine_approximation.svg"></object></span> 146 </p> 147<p> 148 For equispaced data, we can use <code class="computeroutput"><span class="identifier">cardinal_quintic_hermite</span></code> 149 or <code class="computeroutput"><span class="identifier">cardinal_quintic_hermite_aos</span></code> 150 to get constant-time evaluation. This is useful in memory-constrained or performance 151 critical applications where data is equispaced. 152 </p> 153<h4> 154<a name="math_toolkit.quintic_hermite.h2"></a> 155 <span class="phrase"><a name="math_toolkit.quintic_hermite.complexity_and_performance"></a></span><a class="link" href="quintic_hermite.html#math_toolkit.quintic_hermite.complexity_and_performance">Complexity 156 and Performance</a> 157 </h4> 158<p> 159 The following google benchmark demonstrates the cost of the call operator for 160 this interpolator: 161 </p> 162<pre class="programlisting"><span class="identifier">Run</span> <span class="identifier">on</span> <span class="special">(</span><span class="number">16</span> <span class="identifier">X</span> <span class="number">4300</span> <span class="identifier">MHz</span> <span class="identifier">CPU</span> <span class="identifier">s</span><span class="special">)</span> 163<span class="identifier">CPU</span> <span class="identifier">Caches</span><span class="special">:</span> 164 <span class="identifier">L1</span> <span class="identifier">Data</span> <span class="number">32</span><span class="identifier">K</span> <span class="special">(</span><span class="identifier">x8</span><span class="special">)</span> 165 <span class="identifier">L1</span> <span class="identifier">Instruction</span> <span class="number">32</span><span class="identifier">K</span> <span class="special">(</span><span class="identifier">x8</span><span class="special">)</span> 166 <span class="identifier">L2</span> <span class="identifier">Unified</span> <span class="number">1024</span><span class="identifier">K</span> <span class="special">(</span><span class="identifier">x8</span><span class="special">)</span> 167 <span class="identifier">L3</span> <span class="identifier">Unified</span> <span class="number">11264</span><span class="identifier">K</span> <span class="special">(</span><span class="identifier">x1</span><span class="special">)</span> 168<span class="identifier">Load</span> <span class="identifier">Average</span><span class="special">:</span> <span class="number">0.92</span><span class="special">,</span> <span class="number">0.64</span><span class="special">,</span> <span class="number">0.35</span> 169<span class="special">--------------------------------------------------</span> 170<span class="identifier">Benchmark</span> <span class="identifier">Time</span> 171<span class="special">--------------------------------------------------</span> 172<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">8</span> <span class="number">8.14</span> <span class="identifier">ns</span> 173<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">16</span> <span class="number">8.69</span> <span class="identifier">ns</span> 174<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">32</span> <span class="number">9.42</span> <span class="identifier">ns</span> 175<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">64</span> <span class="number">9.90</span> <span class="identifier">ns</span> 176<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">128</span> <span class="number">10.4</span> <span class="identifier">ns</span> 177<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">256</span> <span class="number">10.9</span> <span class="identifier">ns</span> 178<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">512</span> <span class="number">11.6</span> <span class="identifier">ns</span> 179<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">1024</span> <span class="number">12.3</span> <span class="identifier">ns</span> 180<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">2048</span> <span class="number">12.8</span> <span class="identifier">ns</span> 181<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">4096</span> <span class="number">13.6</span> <span class="identifier">ns</span> 182<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">8192</span> <span class="number">14.6</span> <span class="identifier">ns</span> 183<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">16384</span> <span class="number">15.5</span> <span class="identifier">ns</span> 184<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">32768</span> <span class="number">17.4</span> <span class="identifier">ns</span> 185<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">65536</span> <span class="number">18.5</span> <span class="identifier">ns</span> 186<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">131072</span> <span class="number">18.8</span> <span class="identifier">ns</span> 187<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">262144</span> <span class="number">19.8</span> <span class="identifier">ns</span> 188<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">524288</span> <span class="number">20.5</span> <span class="identifier">ns</span> 189<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">1048576</span> <span class="number">21.6</span> <span class="identifier">ns</span> 190<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">2097152</span> <span class="number">22.5</span> <span class="identifier">ns</span> 191<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">4194304</span> <span class="number">24.2</span> <span class="identifier">ns</span> 192<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">8388608</span> <span class="number">26.6</span> <span class="identifier">ns</span> 193<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">16777216</span> <span class="number">26.7</span> <span class="identifier">ns</span> 194<span class="identifier">QuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span><span class="identifier">_BigO</span> <span class="number">1.14</span> <span class="identifier">lgN</span> 195<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">256</span> <span class="number">5.22</span> <span class="identifier">ns</span> 196<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">512</span> <span class="number">5.21</span> <span class="identifier">ns</span> 197<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">1024</span> <span class="number">5.21</span> <span class="identifier">ns</span> 198<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">2048</span> <span class="number">5.32</span> <span class="identifier">ns</span> 199<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">4096</span> <span class="number">5.33</span> <span class="identifier">ns</span> 200<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">8192</span> <span class="number">5.50</span> <span class="identifier">ns</span> 201<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">16384</span> <span class="number">5.74</span> <span class="identifier">ns</span> 202<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">32768</span> <span class="number">7.74</span> <span class="identifier">ns</span> 203<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">65536</span> <span class="number">10.6</span> <span class="identifier">ns</span> 204<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">131072</span> <span class="number">10.7</span> <span class="identifier">ns</span> 205<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">262144</span> <span class="number">10.6</span> <span class="identifier">ns</span> 206<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">524288</span> <span class="number">10.5</span> <span class="identifier">ns</span> 207<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">1048576</span> <span class="number">10.6</span> <span class="identifier">ns</span> 208<span class="identifier">CardinalQuinticHermite</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span><span class="identifier">_BigO</span> <span class="number">7.57</span> <span class="special">(</span><span class="number">1</span><span class="special">)</span> 209<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">256</span> <span class="number">5.27</span> <span class="identifier">ns</span> 210<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">512</span> <span class="number">5.26</span> <span class="identifier">ns</span> 211<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">1024</span> <span class="number">5.26</span> <span class="identifier">ns</span> 212<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">2048</span> <span class="number">5.28</span> <span class="identifier">ns</span> 213<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">4096</span> <span class="number">5.30</span> <span class="identifier">ns</span> 214<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">8192</span> <span class="number">5.41</span> <span class="identifier">ns</span> 215<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">16384</span> <span class="number">5.89</span> <span class="identifier">ns</span> 216<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">32768</span> <span class="number">5.97</span> <span class="identifier">ns</span> 217<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">65536</span> <span class="number">5.96</span> <span class="identifier">ns</span> 218<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">131072</span> <span class="number">5.92</span> <span class="identifier">ns</span> 219<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">262144</span> <span class="number">5.94</span> <span class="identifier">ns</span> 220<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">524288</span> <span class="number">5.96</span> <span class="identifier">ns</span> 221<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">>/</span><span class="number">1048576</span> <span class="number">5.93</span> <span class="identifier">ns</span> 222<span class="identifier">CardinalQuinticHermiteAOS</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span><span class="identifier">_BigO</span> <span class="number">5.64</span> <span class="special">(</span><span class="number">1</span><span class="special">)</span> 223</pre> 224</div> 225<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 226<td align="left"></td> 227<td align="right"><div class="copyright-footer">Copyright © 2006-2019 Nikhar 228 Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, 229 Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan 230 Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, 231 Daryle Walker and Xiaogang Zhang<p> 232 Distributed under the Boost Software License, Version 1.0. (See accompanying 233 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>) 234 </p> 235</div></td> 236</tr></table> 237<hr> 238<div class="spirit-nav"> 239<a accesskey="p" href="pchip.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interpolation.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="../quadrature.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 240</div> 241</body> 242</html> 243