1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Solar system</title> 5<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../index.html" title="Chapter 1. Boost.Numeric.Odeint"> 8<link rel="up" href="../tutorial.html" title="Tutorial"> 9<link rel="prev" href="harmonic_oscillator.html" title="Harmonic oscillator"> 10<link rel="next" href="chaotic_systems_and_lyapunov_exponents.html" title="Chaotic systems and Lyapunov exponents"> 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="../../logo.jpg"></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="harmonic_oscillator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tutorial.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="chaotic_systems_and_lyapunov_exponents.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="boost_numeric_odeint.tutorial.solar_system"></a><a class="link" href="solar_system.html" title="Solar system">Solar system</a> 28</h3></div></div></div> 29<div class="toc"><dl class="toc"> 30<dt><span class="section"><a href="solar_system.html#boost_numeric_odeint.tutorial.solar_system.gravitation_and_energy_conservation">Gravitation 31 and energy conservation</a></span></dt> 32<dt><span class="section"><a href="solar_system.html#boost_numeric_odeint.tutorial.solar_system.define_the_system_function">Define 33 the system function</a></span></dt> 34</dl></div> 35<div class="section"> 36<div class="titlepage"><div><div><h4 class="title"> 37<a name="boost_numeric_odeint.tutorial.solar_system.gravitation_and_energy_conservation"></a><a class="link" href="solar_system.html#boost_numeric_odeint.tutorial.solar_system.gravitation_and_energy_conservation" title="Gravitation and energy conservation">Gravitation 38 and energy conservation</a> 39</h4></div></div></div> 40<p> 41 The next example in this tutorial is a simulation of the outer solar system, 42 consisting of the sun, Jupiter, Saturn, Uranus, Neptune and Pluto. 43 </p> 44<p> 45 <span class="inlinemediaobject"><img src="../../solar_system.jpg" alt="solar_system"></span> 46 </p> 47<p> 48 Each planet and of course the sun will be represented by mass points. The 49 interaction force between each object is the gravitational force which 50 can be written as 51 </p> 52<p> 53 <span class="emphasis"><em>F<sub>ij</sub> = -γ m<sub>i</sub> m<sub>j</sub> ( q<sub>i</sub> - q<sub>j</sub> ) / | q<sub>i</sub> - q<sub>j</sub> | <sup>3</sup></em></span> 54 </p> 55<p> 56 where <span class="emphasis"><em>γ</em></span> is the gravitational constant, <span class="emphasis"><em>m<sub>i</sub></em></span> 57 and <span class="emphasis"><em>m<sub>j</sub></em></span> are the masses and <span class="emphasis"><em>q<sub>i</sub></em></span> 58 and <span class="emphasis"><em>q<sub>j</sub></em></span> are the locations of the two objects. The equations 59 of motion are then 60 </p> 61<p> 62 <span class="emphasis"><em>dq<sub>i</sub> / dt = p<sub>i</sub></em></span> 63 </p> 64<p> 65 <span class="emphasis"><em>dp<sub>i</sub> / dt = 1 / m<sub>i</sub> Σ<sub>ji</sub> F<sub>ij</sub></em></span> 66 </p> 67<p> 68 where <span class="emphasis"><em>p<sub>i</sub></em></span> is the momenta of object <span class="emphasis"><em>i</em></span>. 69 The equations of motion can also be derived from the Hamiltonian 70 </p> 71<p> 72 <span class="emphasis"><em>H = Σ<sub>i</sub> p<sub>i</sub><sup>2</sup> / ( 2 m<sub>i</sub> ) + Σ<sub>j</sub> V( q<sub>i</sub> , q<sub>j</sub> )</em></span> 73 </p> 74<p> 75 with the interaction potential <span class="emphasis"><em>V(q<sub>i</sub>,q<sub>j</sub>)</em></span>. The Hamiltonian 76 equations give the equations of motion 77 </p> 78<p> 79 <span class="emphasis"><em>dq<sub>i</sub> / dt = dH / dp<sub>i</sub></em></span> 80 </p> 81<p> 82 <span class="emphasis"><em>dp<sub>i</sub> / dt = -dH / dq<sub>i</sub></em></span> 83 </p> 84<p> 85 In time independent Hamiltonian system the energy and the phase space volume 86 are conserved and special integration methods have to be applied in order 87 to ensure these conservation laws. The odeint library provides classes 88 for separable Hamiltonian systems, which can be written in the form <span class="emphasis"><em>H 89 = Σ 90p<sub>i</sub><sup>2</sup> / (2m<sub>i</sub>) + H<sub>q</sub>(q)</em></span>, where <span class="emphasis"><em>H<sub>q</sub>(q)</em></span> only 91 depends on the coordinates. Although this functional form might look a 92 bit arbitrary, it covers nearly all classical mechanical systems with inertia 93 and without dissipation, or where the equations of motion can be written 94 in the form <span class="emphasis"><em>dq<sub>i</sub> / dt = p<sub>i</sub></em></span> / m<sub>i</sub> , <span class="emphasis"><em>dp<sub>i</sub> / dt = 95 f( q<sub>i</sub> )</em></span>. 96 </p> 97<div class="note"><table border="0" summary="Note"> 98<tr> 99<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> 100<th align="left">Note</th> 101</tr> 102<tr><td align="left" valign="top"><p> 103 A short physical note: While the two-body-problem is known to be integrable, 104 that means it can be solved with purely analytic techniques, already 105 the three-body-problem is not solvable. This was found in the end of 106 the 19th century by H. Poincare which led to the whole new subject of 107 <a href="http://en.wikipedia.org/wiki/Chaos_theory" target="_top">Chaos Theory</a>. 108 </p></td></tr> 109</table></div> 110</div> 111<div class="section"> 112<div class="titlepage"><div><div><h4 class="title"> 113<a name="boost_numeric_odeint.tutorial.solar_system.define_the_system_function"></a><a class="link" href="solar_system.html#boost_numeric_odeint.tutorial.solar_system.define_the_system_function" title="Define the system function">Define 114 the system function</a> 115</h4></div></div></div> 116<p> 117 To implement this system we define a 3D point type which will represent 118 the space as well as the velocity. Therefore, we use the operators from 119 <a href="http://www.boost.org/doc/libs/release/libs/utility/operators.htm" target="_top">Boost.Operators</a>: 120 </p> 121<p> 122</p> 123<pre class="programlisting"><span class="comment">/*the point type */</span> 124<span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">T</span> <span class="special">,</span> <span class="identifier">size_t</span> <span class="identifier">Dim</span> <span class="special">></span> 125<span class="keyword">class</span> <span class="identifier">point</span> <span class="special">:</span> 126 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">additive1</span><span class="special"><</span> <span class="identifier">point</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">,</span> <span class="identifier">Dim</span> <span class="special">></span> <span class="special">,</span> 127 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">additive2</span><span class="special"><</span> <span class="identifier">point</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">,</span> <span class="identifier">Dim</span> <span class="special">></span> <span class="special">,</span> <span class="identifier">T</span> <span class="special">,</span> 128 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiplicative2</span><span class="special"><</span> <span class="identifier">point</span><span class="special"><</span> <span class="identifier">T</span> <span class="special">,</span> <span class="identifier">Dim</span> <span class="special">></span> <span class="special">,</span> <span class="identifier">T</span> 129 <span class="special">></span> <span class="special">></span> <span class="special">></span> 130 <span class="special">{</span> 131 <span class="keyword">public</span><span class="special">:</span> 132 133 <span class="keyword">const</span> <span class="keyword">static</span> <span class="identifier">size_t</span> <span class="identifier">dim</span> <span class="special">=</span> <span class="identifier">Dim</span><span class="special">;</span> 134 <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span> 135 <span class="keyword">typedef</span> <span class="identifier">point</span><span class="special"><</span> <span class="identifier">value_type</span> <span class="special">,</span> <span class="identifier">dim</span> <span class="special">></span> <span class="identifier">point_type</span><span class="special">;</span> 136 137 <span class="comment">// ...</span> 138 <span class="comment">// constructors</span> 139 140 <span class="comment">// ...</span> 141 <span class="comment">// operators</span> 142 143 <span class="keyword">private</span><span class="special">:</span> 144 145 <span class="identifier">T</span> <span class="identifier">m_val</span><span class="special">[</span><span class="identifier">dim</span><span class="special">];</span> 146 <span class="special">};</span> 147 148 <span class="comment">//...</span> 149 <span class="comment">// more operators</span> 150</pre> 151<p> 152 </p> 153<p> 154 The next step is to define a container type storing the values of <span class="emphasis"><em>q</em></span> 155 and <span class="emphasis"><em>p</em></span> and to define system functions. As container 156 type we use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span></code> 157 </p> 158<p> 159</p> 160<pre class="programlisting"><span class="comment">// we simulate 5 planets and the sun</span> 161<span class="keyword">const</span> <span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">6</span><span class="special">;</span> 162 163<span class="keyword">typedef</span> <span class="identifier">point</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">,</span> <span class="number">3</span> <span class="special">></span> <span class="identifier">point_type</span><span class="special">;</span> 164<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span> <span class="identifier">point_type</span> <span class="special">,</span> <span class="identifier">n</span> <span class="special">></span> <span class="identifier">container_type</span><span class="special">;</span> 165<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">,</span> <span class="identifier">n</span> <span class="special">></span> <span class="identifier">mass_type</span><span class="special">;</span> 166</pre> 167<p> 168 </p> 169<p> 170 The <code class="computeroutput"><span class="identifier">container_type</span></code> is different 171 from the state type of the ODE. The state type of the ode is simply a 172 <code class="computeroutput"><span class="identifier">pair</span><span class="special"><</span> 173 <span class="identifier">container_type</span> <span class="special">,</span> 174 <span class="identifier">container_type</span> <span class="special">></span></code> 175 since it needs the information about the coordinates and the momenta. 176 </p> 177<p> 178 Next we define the system's equations. As we will use a stepper that accounts 179 for the Hamiltonian (energy-preserving) character of the system, we have 180 to define the rhs different from the usual case where it is just a single 181 function. The stepper will make use of the separable character, which means 182 the system will be defined by two objects representing <span class="emphasis"><em>f(p) = 183 -dH/dq</em></span> and <span class="emphasis"><em>g(q) = dH/dp</em></span>: 184 </p> 185<p> 186</p> 187<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">gravitational_constant</span> <span class="special">=</span> <span class="number">2.95912208286e-4</span><span class="special">;</span> 188 189<span class="keyword">struct</span> <span class="identifier">solar_system_coor</span> 190<span class="special">{</span> 191 <span class="keyword">const</span> <span class="identifier">mass_type</span> <span class="special">&</span><span class="identifier">m_masses</span><span class="special">;</span> 192 193 <span class="identifier">solar_system_coor</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">mass_type</span> <span class="special">&</span><span class="identifier">masses</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">m_masses</span><span class="special">(</span> <span class="identifier">masses</span> <span class="special">)</span> <span class="special">{</span> <span class="special">}</span> 194 195 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">p</span> <span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">dqdt</span> <span class="special">)</span> <span class="keyword">const</span> 196 <span class="special">{</span> 197 <span class="keyword">for</span><span class="special">(</span> <span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span> <span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="identifier">n</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span> 198 <span class="identifier">dqdt</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">=</span> <span class="identifier">p</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">/</span> <span class="identifier">m_masses</span><span class="special">[</span><span class="identifier">i</span><span class="special">];</span> 199 <span class="special">}</span> 200<span class="special">};</span> 201</pre> 202<p> 203 </p> 204<p> 205</p> 206<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">solar_system_momentum</span> 207<span class="special">{</span> 208 <span class="keyword">const</span> <span class="identifier">mass_type</span> <span class="special">&</span><span class="identifier">m_masses</span><span class="special">;</span> 209 210 <span class="identifier">solar_system_momentum</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">mass_type</span> <span class="special">&</span><span class="identifier">masses</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">m_masses</span><span class="special">(</span> <span class="identifier">masses</span> <span class="special">)</span> <span class="special">{</span> <span class="special">}</span> 211 212 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">q</span> <span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">dpdt</span> <span class="special">)</span> <span class="keyword">const</span> 213 <span class="special">{</span> 214 <span class="keyword">const</span> <span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="identifier">q</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> 215 <span class="keyword">for</span><span class="special">(</span> <span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span> <span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="identifier">n</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span> 216 <span class="special">{</span> 217 <span class="identifier">dpdt</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span> 218 <span class="keyword">for</span><span class="special">(</span> <span class="identifier">size_t</span> <span class="identifier">j</span><span class="special">=</span><span class="number">0</span> <span class="special">;</span> <span class="identifier">j</span><span class="special"><</span><span class="identifier">i</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">j</span> <span class="special">)</span> 219 <span class="special">{</span> 220 <span class="identifier">point_type</span> <span class="identifier">diff</span> <span class="special">=</span> <span class="identifier">q</span><span class="special">[</span><span class="identifier">j</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">q</span><span class="special">[</span><span class="identifier">i</span><span class="special">];</span> 221 <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">abs</span><span class="special">(</span> <span class="identifier">diff</span> <span class="special">);</span> 222 <span class="identifier">diff</span> <span class="special">*=</span> <span class="special">(</span> <span class="identifier">gravitational_constant</span> <span class="special">*</span> <span class="identifier">m_masses</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">*</span> <span class="identifier">m_masses</span><span class="special">[</span><span class="identifier">j</span><span class="special">]</span> <span class="special">/</span> <span class="identifier">d</span> <span class="special">/</span> <span class="identifier">d</span> <span class="special">/</span> <span class="identifier">d</span> <span class="special">);</span> 223 <span class="identifier">dpdt</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">+=</span> <span class="identifier">diff</span><span class="special">;</span> 224 <span class="identifier">dpdt</span><span class="special">[</span><span class="identifier">j</span><span class="special">]</span> <span class="special">-=</span> <span class="identifier">diff</span><span class="special">;</span> 225 226 <span class="special">}</span> 227 <span class="special">}</span> 228 <span class="special">}</span> 229<span class="special">};</span> 230</pre> 231<p> 232 </p> 233<p> 234 In general a three body-system is chaotic, hence we can not expect that 235 arbitrary initial conditions of the system will lead to a solution comparable 236 with the solar system dynamics. That is we have to define proper initial 237 conditions, which are taken from the book of Hairer, Wannier, Lubich <a class="link" href="../literature.html#hairer_geometrical_numeric_integration">[4] </a>. 238 </p> 239<p> 240 As mentioned above, we need to use some special integrators in order to 241 conserve phase space volume. There is a well known family of such integrators, 242 the so-called Runge-Kutta-Nystroem solvers, which we apply here in terms 243 of a <code class="computeroutput"><span class="identifier">symplectic_rkn_sb3a_mclachlan</span></code> 244 stepper: 245 </p> 246<p> 247</p> 248<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">symplectic_rkn_sb3a_mclachlan</span><span class="special"><</span> <span class="identifier">container_type</span> <span class="special">></span> <span class="identifier">stepper_type</span><span class="special">;</span> 249<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">dt</span> <span class="special">=</span> <span class="number">100.0</span><span class="special">;</span> 250 251<span class="identifier">integrate_const</span><span class="special">(</span> 252 <span class="identifier">stepper_type</span><span class="special">()</span> <span class="special">,</span> 253 <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">solar_system_coor</span><span class="special">(</span> <span class="identifier">masses</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">solar_system_momentum</span><span class="special">(</span> <span class="identifier">masses</span> <span class="special">)</span> <span class="special">)</span> <span class="special">,</span> 254 <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span> <span class="identifier">q</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span> <span class="identifier">p</span> <span class="special">)</span> <span class="special">)</span> <span class="special">,</span> 255 <span class="number">0.0</span> <span class="special">,</span> <span class="number">200000.0</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">,</span> <span class="identifier">streaming_observer</span><span class="special">(</span> <span class="identifier">cout</span> <span class="special">)</span> <span class="special">);</span> 256</pre> 257<p> 258 </p> 259<p> 260 These integration routine was used to produce the above sketch of the solar 261 system. Note, that there are two particularities in this example. First, 262 the state of the symplectic stepper is not <code class="computeroutput"><span class="identifier">container_type</span></code> 263 but a pair of <code class="computeroutput"><span class="identifier">container_type</span></code>. 264 Hence, we must pass such a pair to the integrate function. Since, we want 265 to pass them as references we can simply pack them into <a href="http://www.boost.org/doc/libs/release/libs/bind/ref.html" target="_top">Boost.Ref</a>. 266 The second point is the observer, which is called with a state type, hence 267 a pair of <code class="computeroutput"><span class="identifier">container_type</span></code>. 268 The reference wrapper is also passed, but this is not a problem at all: 269 </p> 270<p> 271</p> 272<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">streaming_observer</span> 273<span class="special">{</span> 274 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">m_out</span><span class="special">;</span> 275 276 <span class="identifier">streaming_observer</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">out</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">m_out</span><span class="special">(</span> <span class="identifier">out</span> <span class="special">)</span> <span class="special">{</span> <span class="special">}</span> 277 278 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">State</span> <span class="special">></span> 279 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">State</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span> <span class="keyword">const</span> 280 <span class="special">{</span> 281 <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">q</span> <span class="special">=</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">first</span><span class="special">;</span> 282 <span class="identifier">m_out</span> <span class="special"><<</span> <span class="identifier">t</span><span class="special">;</span> 283 <span class="keyword">for</span><span class="special">(</span> <span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span> <span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="identifier">q</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span> <span class="identifier">m_out</span> <span class="special"><<</span> <span class="string">"\t"</span> <span class="special"><<</span> <span class="identifier">q</span><span class="special">[</span><span class="identifier">i</span><span class="special">];</span> 284 <span class="identifier">m_out</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> 285 <span class="special">}</span> 286<span class="special">};</span> 287</pre> 288<p> 289 </p> 290<div class="tip"><table border="0" summary="Tip"> 291<tr> 292<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../doc/src/images/tip.png"></td> 293<th align="left">Tip</th> 294</tr> 295<tr><td align="left" valign="top"><p> 296 You can use C++11 lambda to create the observers 297 </p></td></tr> 298</table></div> 299<p> 300 The full example can be found here: <a href="https://github.com/headmyshoulder/odeint-v2/blob/master/examples/solar_system.cpp" target="_top">solar_system.cpp</a> 301 </p> 302</div> 303</div> 304<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 305<td align="left"></td> 306<td align="right"><div class="copyright-footer">Copyright © 2009-2015 Karsten Ahnert and Mario Mulansky<p> 307 Distributed under the Boost Software License, Version 1.0. (See accompanying 308 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>) 309 </p> 310</div></td> 311</tr></table> 312<hr> 313<div class="spirit-nav"> 314<a accesskey="p" href="harmonic_oscillator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tutorial.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="chaotic_systems_and_lyapunov_exponents.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 315</div> 316</body> 317</html> 318