• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="identifier">RandomAccessContainer</span><span class="special">&gt;</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">&amp;&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&amp;&amp;</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&amp;&amp;</span> <span class="identifier">dydx</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&amp;&amp;</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">&lt;</span><span class="identifier">Real</span><span class="special">,</span> <span class="identifier">Real</span><span class="special">&gt;</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">&amp;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span> <span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">quintic_hermite</span> <span class="special">&amp;</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">&lt;</span><span class="keyword">class</span> <span class="identifier">RandomAccessContainer</span><span class="special">&gt;</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">&amp;&amp;</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&amp;&amp;</span> <span class="identifier">dydx</span><span class="special">,</span> <span class="identifier">RandomAccessContainer</span> <span class="special">&amp;&amp;</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">&lt;</span><span class="identifier">Real</span><span class="special">,</span> <span class="identifier">Real</span><span class="special">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="identifier">RandomAccessContainer</span><span class="special">&gt;</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">&amp;&amp;</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">&lt;</span><span class="identifier">Real</span><span class="special">,</span> <span class="identifier">Real</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="identifier">spline</span> <span class="special">&lt;&lt;</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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;/</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">&lt;</span><span class="keyword">double</span><span class="special">&gt;</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