mirror of
https://github.com/boostorg/odeint.git
synced 2025-05-09 23:24:01 +00:00
documentation: writing own steppers
This commit is contained in:
parent
0cc06c4219
commit
6b622cd2e1
@ -25,9 +25,9 @@
|
||||
to be used within <a class="link" href="../odeint_in_detail/integrate_functions.html" title="Integrate functions">integrate
|
||||
functions</a>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.description"></a></span><a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.description-heading"></a>
|
||||
<a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
A controlled stepper following this Controlled Stepper concept provides the
|
||||
@ -36,9 +36,9 @@
|
||||
with a given step-size <span class="emphasis"><em>dt</em></span>. Depending on an error estimate
|
||||
of the solution the step might be rejected and a smaller step-size is suggested.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation"></a></span><a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation-heading"></a>
|
||||
<a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -77,9 +77,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions"></a></span><a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions-heading"></a>
|
||||
<a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
@ -178,9 +178,9 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.h3"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.models"></a></span><a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.models">Models</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.models"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper.models-heading"></a>
|
||||
<a class="link" href="controlled_stepper.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper.models">Models</a>
|
||||
</h5>
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
|
||||
<li class="listitem">
|
||||
|
@ -25,9 +25,9 @@
|
||||
to be used within <a class="link" href="../odeint_in_detail/integrate_functions.html" title="Integrate functions">integrate
|
||||
functions</a>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.description"></a></span><a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.description-heading"></a>
|
||||
<a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
A dense ouput stepper following this Dense Output Stepper concept provides
|
||||
@ -37,9 +37,9 @@
|
||||
to calculate the state <span class="emphasis"><em>x(t')</em></span> at any point <span class="emphasis"><em>t
|
||||
<= t' <= t+dt</em></span>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types"></a></span><a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types">Associated
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types-heading"></a>
|
||||
<a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.associated_types">Associated
|
||||
types</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
@ -55,9 +55,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.notation"></a></span><a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.notation-heading"></a>
|
||||
<a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -92,9 +92,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.h3"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.valid_expressions"></a></span><a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.valid_expressions-heading"></a>
|
||||
<a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
@ -284,9 +284,9 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.h4"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models"></a></span><a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models">Models</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models-heading"></a>
|
||||
<a class="link" href="dense_output_stepper.html#boost_sandbox_numeric_odeint.concepts.dense_output_stepper.models">Models</a>
|
||||
</h5>
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
|
||||
<li class="listitem">
|
||||
|
@ -24,9 +24,9 @@
|
||||
This concepts specifies the interface an error stepper has to fulfill to
|
||||
be used within a ControlledErrorStepper.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.error_stepper.description"></a></span><a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.description-heading"></a>
|
||||
<a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
An error stepper following this Error Stepper concept is capable of doing
|
||||
@ -40,9 +40,9 @@
|
||||
Symplectic System</a> or <a class="link" href="implicit_system.html" title="Implicit System">Implicit
|
||||
System</a>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.error_stepper.notation"></a></span><a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.notation-heading"></a>
|
||||
<a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -90,9 +90,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.error_stepper.valid_expressions"></a></span><a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.valid_expressions-heading"></a>
|
||||
<a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
@ -187,9 +187,9 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.h3"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.error_stepper.models"></a></span><a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.models">Models</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.models"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper.models-heading"></a>
|
||||
<a class="link" href="error_stepper.html#boost_sandbox_numeric_odeint.concepts.error_stepper.models">Models</a>
|
||||
</h5>
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
|
||||
<li class="listitem">
|
||||
|
@ -20,9 +20,9 @@
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system"></a><a class="link" href="implicit_system.html" title="Implicit System">Implicit
|
||||
System</a>
|
||||
</h3></div></div></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.implicit_system.description"></a></span><a class="link" href="implicit_system.html#boost_sandbox_numeric_odeint.concepts.implicit_system.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.description-heading"></a>
|
||||
<a class="link" href="implicit_system.html#boost_sandbox_numeric_odeint.concepts.implicit_system.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
This concept describes how to define a ODE that can be solved by an implicit
|
||||
@ -33,9 +33,9 @@
|
||||
therefore, the <span class="emphasis"><em>state_type</em></span> implicit routines is <span class="emphasis"><em>ublas::vector</em></span>
|
||||
and the matrix is defined as <span class="emphasis"><em>ublas::matrix</em></span>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.implicit_system.notation"></a></span><a class="link" href="implicit_system.html#boost_sandbox_numeric_odeint.concepts.implicit_system.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.notation-heading"></a>
|
||||
<a class="link" href="implicit_system.html#boost_sandbox_numeric_odeint.concepts.implicit_system.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -70,9 +70,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.implicit_system.valid_expressions"></a></span><a class="link" href="implicit_system.html#boost_sandbox_numeric_odeint.concepts.implicit_system.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.implicit_system.valid_expressions-heading"></a>
|
||||
<a class="link" href="implicit_system.html#boost_sandbox_numeric_odeint.concepts.implicit_system.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -19,9 +19,9 @@
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer"></a><a class="link" href="observer.html" title="Observer">Observer</a>
|
||||
</h3></div></div></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.observer.description"></a></span><a class="link" href="observer.html#boost_sandbox_numeric_odeint.concepts.observer.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.description-heading"></a>
|
||||
<a class="link" href="observer.html#boost_sandbox_numeric_odeint.concepts.observer.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
The Observer concept is used in <code class="computeroutput"><span class="identifier">integrate</span></code>
|
||||
@ -32,9 +32,9 @@
|
||||
or at user defined time points depending on which <code class="computeroutput"><span class="identifier">integrate</span></code>
|
||||
function is used.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.observer.notation"></a></span><a class="link" href="observer.html#boost_sandbox_numeric_odeint.concepts.observer.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.notation-heading"></a>
|
||||
<a class="link" href="observer.html#boost_sandbox_numeric_odeint.concepts.observer.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -65,9 +65,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.observer.valid_expressions"></a></span><a class="link" href="observer.html#boost_sandbox_numeric_odeint.concepts.observer.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.observer.valid_expressions-heading"></a>
|
||||
<a class="link" href="observer.html#boost_sandbox_numeric_odeint.concepts.observer.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -20,9 +20,9 @@
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system"></a><a class="link" href="simple_symplectic_system.html" title="Simple Symplectic System">Simple
|
||||
Symplectic System</a>
|
||||
</h3></div></div></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.description"></a></span><a class="link" href="simple_symplectic_system.html#boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.description-heading"></a>
|
||||
<a class="link" href="simple_symplectic_system.html#boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
In most Hamiltonian systems the kinetic term is a quadratic term in the momentum
|
||||
@ -44,9 +44,9 @@
|
||||
equation for <span class="emphasis"><em>p'</em></span> has to be provided to the symplectic
|
||||
stepper. We call this concept <span class="emphasis"><em>Simple_Symplectic_System</em></span>
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.notation"></a></span><a class="link" href="simple_symplectic_system.html#boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.notation-heading"></a>
|
||||
<a class="link" href="simple_symplectic_system.html#boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -77,9 +77,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.valid_expressions"></a></span><a class="link" href="simple_symplectic_system.html#boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.valid_expressions-heading"></a>
|
||||
<a class="link" href="simple_symplectic_system.html#boost_sandbox_numeric_odeint.concepts.simple_symplectic_system.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -40,9 +40,9 @@
|
||||
and no algebra/operations are used.
|
||||
</p></td></tr>
|
||||
</table></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.description"></a></span><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.description-heading"></a>
|
||||
<a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
The <code class="computeroutput"><span class="identifier">State</span></code>, <code class="computeroutput"><span class="identifier">Algebra</span></code> and <code class="computeroutput"><span class="identifier">Operations</span></code>
|
||||
@ -82,9 +82,9 @@
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations"></a><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations" title="Operations">Operations</a>
|
||||
</h4></div></div></div>
|
||||
<h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.notation"></a></span><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.notation"></a><h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.notation-heading"></a>
|
||||
<a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.notation">Notation</a>
|
||||
</h6>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -142,9 +142,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.valid_expressions"></a></span><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.valid_expressions"></a><h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.valid_expressions-heading"></a>
|
||||
<a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.operations.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h6>
|
||||
<div class="informaltable"><table class="table">
|
||||
@ -414,9 +414,9 @@
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra"></a><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra" title="Algebra">Algebra</a>
|
||||
</h4></div></div></div>
|
||||
<h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.notation"></a></span><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.notation"></a><h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.notation-heading"></a>
|
||||
<a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.notation">Notation</a>
|
||||
</h6>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -452,9 +452,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.valid_expressions"></a></span><a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.valid_expressions"></a><h6>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.valid_expressions-heading"></a>
|
||||
<a class="link" href="state_algebra_operations.html#boost_sandbox_numeric_odeint.concepts.state_algebra_operations.algebra.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h6>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -20,9 +20,9 @@
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper"></a><a class="link" href="state_wrapper.html" title="State Wrapper">State
|
||||
Wrapper</a>
|
||||
</h3></div></div></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.description"></a></span><a class="link" href="state_wrapper.html#boost_sandbox_numeric_odeint.concepts.state_wrapper.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.description-heading"></a>
|
||||
<a class="link" href="state_wrapper.html#boost_sandbox_numeric_odeint.concepts.state_wrapper.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
The <code class="computeroutput"><span class="identifier">State</span> <span class="identifier">Wrapper</span></code>
|
||||
@ -30,9 +30,9 @@
|
||||
intermediate results within the stepper's <code class="computeroutput"><span class="identifier">do_step</span></code>
|
||||
methods.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.notation"></a></span><a class="link" href="state_wrapper.html#boost_sandbox_numeric_odeint.concepts.state_wrapper.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.notation-heading"></a>
|
||||
<a class="link" href="state_wrapper.html#boost_sandbox_numeric_odeint.concepts.state_wrapper.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -56,9 +56,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.valid_expressions"></a></span><a class="link" href="state_wrapper.html#boost_sandbox_numeric_odeint.concepts.state_wrapper.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.state_wrapper.valid_expressions-heading"></a>
|
||||
<a class="link" href="state_wrapper.html#boost_sandbox_numeric_odeint.concepts.state_wrapper.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -24,9 +24,9 @@
|
||||
be used within the <a class="link" href="../odeint_in_detail/integrate_functions.html" title="Integrate functions">integrate
|
||||
functions</a>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.stepper.description"></a></span><a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.description-heading"></a>
|
||||
<a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
The basic stepper concept. A basic stepper following this Stepper concept
|
||||
@ -40,9 +40,9 @@
|
||||
Symplectic System</a> or <a class="link" href="implicit_system.html" title="Implicit System">Implicit
|
||||
System</a>. Note that all error steppers are also basic steppers.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.stepper.refinement_of"></a></span><a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.refinement_of">Refinement
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.refinement_of"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.refinement_of-heading"></a>
|
||||
<a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.refinement_of">Refinement
|
||||
of</a>
|
||||
</h5>
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
|
||||
@ -53,9 +53,9 @@
|
||||
CopyConstructable
|
||||
</li>
|
||||
</ul></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.stepper.notation"></a></span><a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.notation-heading"></a>
|
||||
<a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -95,9 +95,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.h3"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.stepper.valid_expressions"></a></span><a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.valid_expressions-heading"></a>
|
||||
<a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.valid_expressions">Valid
|
||||
Expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
@ -187,9 +187,9 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.h4"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.stepper.models"></a></span><a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.models">Models</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.models"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.stepper.models-heading"></a>
|
||||
<a class="link" href="stepper.html#boost_sandbox_numeric_odeint.concepts.stepper.models">Models</a>
|
||||
</h5>
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
|
||||
<li class="listitem">
|
||||
|
@ -20,9 +20,9 @@
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system"></a><a class="link" href="symplectic_system.html" title="Symplectic System">Symplectic
|
||||
System</a>
|
||||
</h3></div></div></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.description"></a></span><a class="link" href="symplectic_system.html#boost_sandbox_numeric_odeint.concepts.symplectic_system.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.description-heading"></a>
|
||||
<a class="link" href="symplectic_system.html#boost_sandbox_numeric_odeint.concepts.symplectic_system.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
This concept describes how to define a symplectic system written with generalized
|
||||
@ -58,9 +58,9 @@
|
||||
std::pair of functions or a functors. Symplectic systems are used in symplectic
|
||||
steppers like <code class="computeroutput"><span class="identifier">symplectic_rkn_sb3a_mclachlan</span></code>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.notation"></a></span><a class="link" href="symplectic_system.html#boost_sandbox_numeric_odeint.concepts.symplectic_system.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.notation-heading"></a>
|
||||
<a class="link" href="symplectic_system.html#boost_sandbox_numeric_odeint.concepts.symplectic_system.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -107,9 +107,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.valid_expressions"></a></span><a class="link" href="symplectic_system.html#boost_sandbox_numeric_odeint.concepts.symplectic_system.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.symplectic_system.valid_expressions-heading"></a>
|
||||
<a class="link" href="symplectic_system.html#boost_sandbox_numeric_odeint.concepts.symplectic_system.valid_expressions">Valid
|
||||
expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -19,9 +19,9 @@
|
||||
<div class="titlepage"><div><div><h3 class="title">
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system"></a><a class="link" href="system.html" title="System">System</a>
|
||||
</h3></div></div></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.system.description"></a></span><a class="link" href="system.html#boost_sandbox_numeric_odeint.concepts.system.description">Description</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.description"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.description-heading"></a>
|
||||
<a class="link" href="system.html#boost_sandbox_numeric_odeint.concepts.system.description">Description</a>
|
||||
</h5>
|
||||
<p>
|
||||
The System concept models the algorithmic implementation of the rhs. of the
|
||||
@ -34,9 +34,9 @@
|
||||
System</a> and <a class="link" href="implicit_system.html" title="Implicit System">Implicit
|
||||
System</a>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.system.notation"></a></span><a class="link" href="system.html#boost_sandbox_numeric_odeint.concepts.system.notation">Notation</a>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.notation"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.notation-heading"></a>
|
||||
<a class="link" href="system.html#boost_sandbox_numeric_odeint.concepts.system.notation">Notation</a>
|
||||
</h5>
|
||||
<div class="variablelist">
|
||||
<p class="title"><b></b></p>
|
||||
@ -75,9 +75,9 @@
|
||||
</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.concepts.system.valid_expressions"></a></span><a class="link" href="system.html#boost_sandbox_numeric_odeint.concepts.system.valid_expressions">Valid
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.valid_expressions"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.concepts.system.valid_expressions-heading"></a>
|
||||
<a class="link" href="system.html#boost_sandbox_numeric_odeint.concepts.system.valid_expressions">Valid
|
||||
expressions</a>
|
||||
</h5>
|
||||
<div class="informaltable"><table class="table">
|
||||
|
@ -30,6 +30,7 @@
|
||||
= (p,-q+γ p)</em></span>:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">/* The type of container used to hold the state vector */</span>
|
||||
<span class="keyword">typedef</span> <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">state_type</span><span class="special">;</span>
|
||||
@ -37,7 +38,7 @@
|
||||
<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">gam</span> <span class="special">=</span> <span class="number">0.15</span><span class="special">;</span>
|
||||
|
||||
<span class="comment">/* The rhs of x' = f(x) */</span>
|
||||
<span class="keyword">void</span> <span class="identifier">harmonic_oscillator</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span>
|
||||
<span class="keyword">void</span> <span class="identifier">harmonic_oscillator</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dxdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</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="identifier">dxdt</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">gam</span><span class="special">*</span><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">];</span>
|
||||
@ -59,6 +60,7 @@
|
||||
start:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">state_type</span> <span class="identifier">x</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
|
||||
<span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> <span class="comment">// start at x=1.0, p=0.0</span>
|
||||
@ -73,6 +75,7 @@
|
||||
stepper (5th order) and uses adaptive stepsize.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">size_t</span> <span class="identifier">steps</span> <span class="special">=</span> <span class="identifier">integrate</span><span class="special">(</span> <span class="identifier">harmonic_oscillator</span> <span class="special">,</span>
|
||||
<span class="identifier">x</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="number">10.0</span> <span class="special">,</span> <span class="number">0.1</span> <span class="special">);</span>
|
||||
@ -93,6 +96,7 @@
|
||||
rhs must then be implemented as a functor having defined the ()-operator:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">/* The rhs of x' = f(x) defined as a class */</span>
|
||||
<span class="keyword">class</span> <span class="identifier">harm_osc</span> <span class="special">{</span>
|
||||
@ -102,7 +106,7 @@
|
||||
<span class="keyword">public</span><span class="special">:</span>
|
||||
<span class="identifier">harm_osc</span><span class="special">(</span> <span class="keyword">double</span> <span class="identifier">gam</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">m_gam</span><span class="special">(</span><span class="identifier">gam</span><span class="special">)</span> <span class="special">{</span> <span class="special">}</span>
|
||||
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dxdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</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="identifier">dxdt</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">m_gam</span><span class="special">*</span><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">];</span>
|
||||
@ -115,6 +119,7 @@
|
||||
which can be used via
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">harm_osc</span> <span class="identifier">ho</span><span class="special">(</span><span class="number">0.15</span><span class="special">);</span>
|
||||
<span class="identifier">steps</span> <span class="special">=</span> <span class="identifier">integrate</span><span class="special">(</span> <span class="identifier">ho</span> <span class="special">,</span>
|
||||
@ -129,6 +134,7 @@
|
||||
to provide a reasonable observer. An example is
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">push_back_state_and_time</span>
|
||||
<span class="special">{</span>
|
||||
@ -152,6 +158,7 @@
|
||||
pass this container to the integration function:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">state_type</span><span class="special">></span> <span class="identifier">x_vec</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">times</span><span class="special">;</span>
|
||||
|
@ -25,12 +25,13 @@
|
||||
library. It can be include by
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">numeric</span><span class="special">/</span><span class="identifier">odeint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
||||
</pre>
|
||||
<p>
|
||||
which includes all headers in the library. All functions and classes from
|
||||
odeint live in the namespace
|
||||
odeint live in the namespace
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">odeint</span><span class="special">;</span>
|
||||
</pre>
|
||||
|
@ -35,9 +35,9 @@
|
||||
Output Stepper</a>. Depending on the abilities of the stepper, the integrate
|
||||
functions make use of step-size control or dense output.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.h0"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.equidistant_observer_calls"></a></span><a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.equidistant_observer_calls">Equidistant
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.equidistant_observer_calls"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.equidistant_observer_calls-heading"></a>
|
||||
<a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.equidistant_observer_calls">Equidistant
|
||||
observer calls</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -109,9 +109,9 @@
|
||||
dt</em></span>.
|
||||
</li>
|
||||
</ul></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.h1"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_each_step"></a></span><a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_each_step">Observer
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_each_step"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_each_step-heading"></a>
|
||||
<a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_each_step">Observer
|
||||
calls at each step</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -179,9 +179,9 @@
|
||||
Stepper</a> above. No dense output is used.
|
||||
</li>
|
||||
</ul></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.h2"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_given_time_points"></a></span><a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_given_time_points">Observer
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_given_time_points"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_given_time_points-heading"></a>
|
||||
<a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.observer_calls_at_given_time_points">Observer
|
||||
calls at given time points</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -254,9 +254,9 @@
|
||||
<span class="emphasis"><em>x(t)</em></span> at the time points from the sequence.
|
||||
</li>
|
||||
</ul></div>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.h3"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.integrate_a_given_number_of_steps"></a></span><a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.integrate_a_given_number_of_steps">Integrate
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.integrate_a_given_number_of_steps"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.integrate_a_given_number_of_steps-heading"></a>
|
||||
<a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.integrate_a_given_number_of_steps">Integrate
|
||||
a given number of steps</a>
|
||||
</h5>
|
||||
<p>
|
||||
@ -311,9 +311,9 @@
|
||||
This function returns the end time <code class="computeroutput"><span class="identifier">t0</span>
|
||||
<span class="special">+</span> <span class="identifier">n</span><span class="special">*</span><span class="identifier">dt</span></code>.
|
||||
</p>
|
||||
<h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.h4"></a>
|
||||
<span><a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.convenience_integrate_function"></a></span><a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.convenience_integrate_function">Convenience
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.convenience_integrate_function"></a><h5>
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.convenience_integrate_function-heading"></a>
|
||||
<a class="link" href="integrate_functions.html#boost_sandbox_numeric_odeint.odeint_in_detail.integrate_functions.convenience_integrate_function">Convenience
|
||||
integrate function</a>
|
||||
</h5>
|
||||
<p>
|
||||
|
@ -399,6 +399,7 @@
|
||||
as resizeable as it is a dynamically sized array:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">my_vector</span> <span class="special">:</span> <span class="keyword">public</span> <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="special">{</span>
|
||||
@ -533,6 +534,7 @@
|
||||
specializations:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
|
||||
@ -545,7 +547,7 @@
|
||||
<span class="keyword">const</span> <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">;</span>
|
||||
<span class="special">};</span>
|
||||
|
||||
<span class="keyword">template</span><span class="special"><</span> <span class="special">></span>
|
||||
<span class="keyword">template</span><span class="special"><</span> <span class="special">></span>
|
||||
<span class="keyword">struct</span> <span class="identifier">same_size_impl</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">></span>
|
||||
<span class="special">{</span> <span class="comment">// define how to check size</span>
|
||||
<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">same_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">v1</span> <span class="special">,</span>
|
||||
@ -565,7 +567,7 @@
|
||||
<span class="special">}</span>
|
||||
<span class="special">};</span>
|
||||
|
||||
<span class="special">}</span> <span class="special">}</span> <span class="special">}</span>
|
||||
<span class="special">}</span> <span class="special">}</span> <span class="special">}</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -625,6 +627,7 @@
|
||||
instances of state types:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">template</span><span class="special"><></span>
|
||||
<span class="keyword">struct</span> <span class="identifier">state_wrapper</span><span class="special"><</span> <span class="identifier">gsl_vector</span><span class="special">*</span> <span class="special">></span>
|
||||
@ -661,7 +664,7 @@
|
||||
This <code class="computeroutput"><span class="identifier">state_wrapper</span></code>
|
||||
specialization tells odeint how gsl_vectors are created, copied and
|
||||
destroyed. Next we need resizing, this is required because gsl_vectors
|
||||
are dynamically sized objects:
|
||||
are dynamically sized objects:
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">template</span><span class="special"><></span>
|
||||
<span class="keyword">struct</span> <span class="identifier">is_resizeable</span><span class="special"><</span> <span class="identifier">gsl_vector</span><span class="special">*</span> <span class="special">></span>
|
||||
@ -696,12 +699,13 @@
|
||||
support iterators, so we first implement a gsl iterator:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">/*
|
||||
* defines an iterator for gsl_vector
|
||||
*/</span>
|
||||
<span class="keyword">class</span> <span class="identifier">gsl_vector_iterator</span>
|
||||
<span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special"><</span> <span class="identifier">gsl_vector_iterator</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">,</span>
|
||||
<span class="keyword">class</span> <span class="identifier">gsl_vector_iterator</span>
|
||||
<span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special"><</span> <span class="identifier">gsl_vector_iterator</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">,</span>
|
||||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">random_access_traversal_tag</span> <span class="special">></span>
|
||||
<span class="special">{</span>
|
||||
<span class="keyword">public</span> <span class="special">:</span>
|
||||
@ -730,7 +734,7 @@
|
||||
A similar class exists for the <code class="computeroutput"><span class="keyword">const</span></code>
|
||||
version of the iterator. Then we have a function returning the end
|
||||
iterator (similarily for <code class="computeroutput"><span class="keyword">const</span></code>
|
||||
again):
|
||||
again):
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">gsl_vector_iterator</span> <span class="identifier">end_iterator</span><span class="special">(</span> <span class="identifier">gsl_vector</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
@ -743,7 +747,7 @@
|
||||
</p>
|
||||
<p>
|
||||
Finally, the bindings for <a href="http://www.boost.org/doc/libs/release/libs/range/index.html" target="_top">Boost.Range</a>
|
||||
are added:
|
||||
are added:
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// template<></span>
|
||||
<span class="keyword">inline</span> <span class="identifier">gsl_vector_iterator</span> <span class="identifier">range_begin</span><span class="special">(</span> <span class="identifier">gsl_vector</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">)</span>
|
||||
@ -1057,6 +1061,7 @@
|
||||
function so all that has to be done in this case is to declare resizability:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</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">state_type</span><span class="special">;</span>
|
||||
|
||||
@ -1080,6 +1085,7 @@
|
||||
code shows the corresponding definitions:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
|
||||
<span class="special">{</span>
|
||||
@ -1112,8 +1118,9 @@
|
||||
type looks as follows:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">point3D</span> <span class="special">:</span>
|
||||
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">point3D</span> <span class="special">:</span>
|
||||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">additive1</span><span class="special"><</span> <span class="identifier">point3D</span> <span class="special">,</span>
|
||||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">additive2</span><span class="special"><</span> <span class="identifier">point3D</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">,</span>
|
||||
<span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiplicative2</span><span class="special"><</span> <span class="identifier">point3D</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">></span> <span class="special">></span> <span class="special">></span>
|
||||
@ -1125,7 +1132,7 @@
|
||||
<span class="identifier">point3D</span><span class="special">()</span>
|
||||
<span class="special">:</span> <span class="identifier">x</span><span class="special">(</span> <span class="number">0.0</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">y</span><span class="special">(</span> <span class="number">0.0</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">z</span><span class="special">(</span> <span class="number">0.0</span> <span class="special">)</span>
|
||||
<span class="special">{</span> <span class="special">}</span>
|
||||
|
||||
|
||||
<span class="identifier">point3D</span><span class="special">(</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">val</span> <span class="special">)</span>
|
||||
<span class="special">:</span> <span class="identifier">x</span><span class="special">(</span> <span class="identifier">val</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">y</span><span class="special">(</span> <span class="identifier">val</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">z</span><span class="special">(</span> <span class="identifier">val</span> <span class="special">)</span>
|
||||
<span class="special">{</span> <span class="special">}</span>
|
||||
@ -1166,6 +1173,7 @@
|
||||
type:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// only required for steppers with error control</span>
|
||||
<span class="identifier">point3D</span> <span class="keyword">operator</span><span class="special">/(</span> <span class="keyword">const</span> <span class="identifier">point3D</span> <span class="special">&</span><span class="identifier">p1</span> <span class="special">,</span> <span class="keyword">const</span> <span class="identifier">point3D</span> <span class="special">&</span><span class="identifier">p2</span> <span class="special">)</span>
|
||||
@ -1185,6 +1193,7 @@
|
||||
implementing a reduction over the state type:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">numeric</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">odeint</span> <span class="special">{</span>
|
||||
<span class="comment">// specialization of vector_space_reduce, only required for steppers with error control</span>
|
||||
@ -1200,7 +1209,7 @@
|
||||
<span class="keyword">return</span> <span class="identifier">init</span><span class="special">;</span>
|
||||
<span class="special">}</span>
|
||||
<span class="special">};</span>
|
||||
<span class="special">}</span> <span class="special">}</span> <span class="special">}</span>
|
||||
<span class="special">}</span> <span class="special">}</span> <span class="special">}</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -1212,6 +1221,7 @@
|
||||
easily perform the integration on a lorenz system by using the <code class="computeroutput"><span class="identifier">vector_space_algebra</span></code> again:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">sigma</span> <span class="special">=</span> <span class="number">10.0</span><span class="special">;</span>
|
||||
<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">R</span> <span class="special">=</span> <span class="number">28.0</span><span class="special">;</span>
|
||||
@ -1232,9 +1242,9 @@
|
||||
<span class="identifier">point3D</span> <span class="identifier">x</span><span class="special">(</span> <span class="number">10.0</span> <span class="special">,</span> <span class="number">5.0</span> <span class="special">,</span> <span class="number">5.0</span> <span class="special">);</span>
|
||||
<span class="comment">//typedef runge_kutta4< point3D , double , point3D , </span>
|
||||
<span class="comment">// double , vector_space_algebra > stepper;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">point3D</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">,</span> <span class="identifier">point3D</span> <span class="special">,</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">point3D</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">,</span> <span class="identifier">point3D</span> <span class="special">,</span>
|
||||
<span class="keyword">double</span> <span class="special">,</span> <span class="identifier">vector_space_algebra</span> <span class="special">></span> <span class="identifier">stepper</span><span class="special">;</span>
|
||||
<span class="identifier">integrate_adaptive</span><span class="special">(</span> <span class="identifier">make_controlled</span><span class="special"><</span><span class="identifier">stepper</span><span class="special">>(</span> <span class="number">1E-8</span> <span class="special">,</span> <span class="number">1E-8</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">lorenz</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span>
|
||||
<span class="identifier">integrate_adaptive</span><span class="special">(</span> <span class="identifier">make_controlled</span><span class="special"><</span><span class="identifier">stepper</span><span class="special">>(</span> <span class="number">1E-8</span> <span class="special">,</span> <span class="number">1E-8</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">lorenz</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span>
|
||||
<span class="number">0.0</span> <span class="special">,</span> <span class="number">10.0</span> <span class="special">,</span> <span class="number">0.1</span> <span class="special">);</span>
|
||||
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">endl</span><span class="special">;</span>
|
||||
<span class="special">}</span>
|
||||
|
@ -132,6 +132,7 @@
|
||||
is the Runge Kutta stepper of fourth order:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">runge_kutta4</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="identifier">rk</span><span class="special">;</span>
|
||||
<span class="identifier">rk</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">sys1</span> <span class="special">,</span> <span class="identifier">inout</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span> <span class="comment">// In-place transformation of inout</span>
|
||||
@ -176,6 +177,7 @@
|
||||
how the FSAL steppers can be used is
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="identifier">rk</span><span class="special">;</span>
|
||||
<span class="identifier">rk</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">sys1</span> <span class="special">,</span> <span class="identifier">in</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">out</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
@ -241,18 +243,26 @@
|
||||
again simple C-functions of functors. An example is the harmonic oscillator:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><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="number">1</span> <span class="special">></span> <span class="identifier">vector_type</span><span class="special">;</span>
|
||||
|
||||
<span class="keyword">void</span> <span class="identifier">harm_osc_f1</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">p</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dqdt</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dqdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="identifier">p</span><span class="special">[</span><span class="number">0</span><span class="special">];</span>
|
||||
<span class="special">}</span>
|
||||
|
||||
<span class="keyword">void</span> <span class="identifier">harm_osc_f2</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">q</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dpdt</span> <span class="special">)</span>
|
||||
<span class="keyword">struct</span> <span class="identifier">harm_osc_f1</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dpdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">q</span><span class="special">[</span><span class="number">0</span><span class="special">];</span>
|
||||
<span class="special">}</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">p</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dqdt</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dqdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="identifier">p</span><span class="special">[</span><span class="number">0</span><span class="special">];</span>
|
||||
<span class="special">}</span>
|
||||
<span class="special">};</span>
|
||||
|
||||
<span class="keyword">struct</span> <span class="identifier">harm_osc_f2</span>
|
||||
<span class="special">{</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">q</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dpdt</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dpdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">q</span><span class="special">[</span><span class="number">0</span><span class="special">];</span>
|
||||
<span class="special">}</span>
|
||||
<span class="special">};</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -262,11 +272,12 @@
|
||||
example for the harmonic oscillator is now:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">pair</span><span class="special"><</span> <span class="identifier">vector_type</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">></span> <span class="identifier">x</span><span class="special">;</span>
|
||||
<span class="identifier">x</span><span class="special">.</span><span class="identifier">first</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">second</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
|
||||
<span class="identifier">symplectic_rkn_sb3a_mclachlan</span><span class="special"><</span> <span class="identifier">vector_type</span> <span class="special">></span> <span class="identifier">rkn</span><span class="special">;</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span> <span class="special">,</span> <span class="identifier">harm_osc_f2</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">harm_osc_f2</span><span class="special">()</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -275,6 +286,7 @@
|
||||
two public method:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">harm_osc</span>
|
||||
<span class="special">{</span>
|
||||
@ -292,6 +304,7 @@
|
||||
<p>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">harm_osc</span> <span class="identifier">h</span><span class="special">;</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span> <span class="special">&</span><span class="identifier">harm_osc</span><span class="special">::</span><span class="identifier">f1</span> <span class="special">,</span> <span class="identifier">h</span> <span class="special">,</span> <span class="identifier">_1</span> <span class="special">,</span> <span class="identifier">_2</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span> <span class="special">&</span><span class="identifier">harm_osc</span><span class="special">::</span><span class="identifier">f2</span> <span class="special">,</span> <span class="identifier">h</span> <span class="special">,</span> <span class="identifier">_1</span> <span class="special">,</span> <span class="identifier">_2</span> <span class="special">)</span> <span class="special">)</span> <span class="special">,</span>
|
||||
@ -311,11 +324,12 @@
|
||||
can be written as
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">pair</span><span class="special"><</span> <span class="identifier">vector_type</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">></span> <span class="identifier">x</span><span class="special">;</span>
|
||||
<span class="identifier">x</span><span class="special">.</span><span class="identifier">first</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">second</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
|
||||
<span class="identifier">symplectic_rkn_sb3a_mclachlan</span><span class="special"><</span> <span class="identifier">vector_type</span> <span class="special">></span> <span class="identifier">rkn</span><span class="special">;</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -334,10 +348,11 @@
|
||||
takes q and p without combining them into a pair:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span> <span class="special">,</span> <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> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span> <span class="special">,</span> <span class="identifier">q</span> <span class="special">,</span> <span class="identifier">p</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span> <span class="special">,</span> <span class="identifier">harm_osc_f2</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">q</span> <span class="special">,</span> <span class="identifier">p</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<pre class="programlisting"><span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span><span class="special">()</span> <span class="special">,</span> <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> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">q</span> <span class="special">,</span> <span class="identifier">p</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
<span class="identifier">rkn</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">harm_osc_f1</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">harm_osc_f2</span><span class="special">()</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">q</span> <span class="special">,</span> <span class="identifier">p</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -399,6 +414,7 @@
|
||||
steps is instantiated and initialized;
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">adams_bashforth_moulton</span><span class="special"><</span> <span class="number">5</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="identifier">abm</span><span class="special">;</span>
|
||||
<span class="identifier">abm</span><span class="special">.</span><span class="identifier">initialize</span><span class="special">(</span> <span class="identifier">sys</span> <span class="special">,</span> <span class="identifier">inout</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
@ -416,6 +432,7 @@
|
||||
state of the Adams-Bashforth-Stepper:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">abm</span><span class="special">.</span><span class="identifier">initialize</span><span class="special">(</span> <span class="identifier">runge_kutta_fehlberg78</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">>()</span> <span class="special">,</span> <span class="identifier">sys</span> <span class="special">,</span> <span class="identifier">inout</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
</pre>
|
||||
@ -678,6 +695,7 @@
|
||||
An example is
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">dense_output_runge_kutta</span><span class="special"><</span> <span class="identifier">controlled_runge_kutta</span><span class="special"><</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">dense</span><span class="special">;</span>
|
||||
<span class="identifier">dense</span><span class="special">.</span><span class="identifier">initialize</span><span class="special">(</span> <span class="identifier">in</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
@ -703,8 +721,9 @@
|
||||
exist:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">make_dense_output</span><span class="special"><</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">dense2</span> <span class="special">=</span> <span class="identifier">make_dense_output</span><span class="special">(</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">>()</span> <span class="special">);</span>
|
||||
<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">odeint</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">make_dense_output</span><span class="special"><</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">dense2</span> <span class="special">=</span> <span class="identifier">make_dense_output</span><span class="special">(</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">>()</span> <span class="special">);</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
@ -720,6 +739,7 @@
|
||||
for easy use with the integrate functions:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">integrate_const</span><span class="special">(</span> <span class="identifier">make_dense_output</span><span class="special">(</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">>()</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">sys</span> <span class="special">,</span> <span class="identifier">inout</span> <span class="special">,</span> <span class="identifier">t_start</span> <span class="special">,</span> <span class="identifier">t_end</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
</pre>
|
||||
@ -788,6 +808,7 @@
|
||||
4 internal derivatives of the solution at times <code class="computeroutput"><span class="special">(</span><span class="identifier">t</span><span class="special">-</span><span class="identifier">dt</span><span class="special">,</span><span class="identifier">t</span><span class="special">-</span><span class="number">2d</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">t</span><span class="special">-</span><span class="number">3d</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">t</span><span class="special">-</span><span class="number">4d</span><span class="identifier">t</span><span class="special">)</span></code>.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">adams_bashforth_moulton</span><span class="special"><</span> <span class="number">4</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="identifier">stepper</span><span class="special">;</span>
|
||||
<span class="identifier">stepper</span><span class="special">.</span><span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">sys</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span> <span class="comment">// make one step with the classical Runge-Kutta stepper and initialize the first internal state at time t-4dt</span>
|
||||
@ -846,7 +867,7 @@
|
||||
By default and for unknown types <code class="computeroutput"><span class="identifier">is_resizeable</span></code>
|
||||
returns <code class="computeroutput"><span class="keyword">false</span></code>, so if you have
|
||||
your own type you need to specialize this metafunction. For more details
|
||||
on the resizing mechanism see the section <a class="link" href="../../">Adapt
|
||||
on the resizing mechanism see the section <a class="link" href="state_types__algebras_and_operations.html" title="State types, algebras and operations">Adapt
|
||||
you own state types</a>.
|
||||
</p>
|
||||
<p>
|
||||
@ -1885,10 +1906,76 @@
|
||||
</div>
|
||||
<br class="table-break">
|
||||
</div>
|
||||
<div class="section"><div class="titlepage"><div><div><h4 class="title">
|
||||
<div class="section">
|
||||
<div class="titlepage"><div><div><h4 class="title">
|
||||
<a name="boost_sandbox_numeric_odeint.odeint_in_detail.steppers.write_own_steppers"></a><a class="link" href="steppers.html#boost_sandbox_numeric_odeint.odeint_in_detail.steppers.write_own_steppers" title="Write own steppers">Write
|
||||
own steppers</a>
|
||||
</h4></div></div></div></div>
|
||||
</h4></div></div></div>
|
||||
<p>
|
||||
Of course, one can write own steppers which are fully compatible with odeint.
|
||||
They only have to fullfil one or several of the stepper <a class="link" href="../concepts.html" title="Concepts">Concepts</a>
|
||||
of odeint.
|
||||
</p>
|
||||
<p>
|
||||
We will illustrate how to write your own stepper with the example of the
|
||||
stochastic euler method. This method is suited to solve stochastic differential
|
||||
equations (SDEs). A SDE has the form
|
||||
</p>
|
||||
<p>
|
||||
<span class="emphasis"><em>dx/dt = f(x) + g(x) ξ(t)</em></span>
|
||||
</p>
|
||||
<p>
|
||||
where <span class="emphasis"><em>ξ</em></span> is Gaussian white noise with zero mean and
|
||||
a standard deviation <span class="emphasis"><em>σ</em></span>. <span class="emphasis"><em>f(x)</em></span> is
|
||||
said to be the deterministic part while <span class="emphasis"><em>g(x) ξ</em></span> is the
|
||||
noisy part. In case <span class="emphasis"><em>g(x)</em></span> is independent of <span class="emphasis"><em>x</em></span>
|
||||
the SDE is said to have additive noise. It is not possible to solve SDE
|
||||
with the classical solvers for ODEs since the noisy part of the SDE has
|
||||
to be scaled differently then the deterministic part with respect to the
|
||||
time step. BUt there exist many solvers for SDEs. A classical and easy
|
||||
method is the stochastic euler solver. It works by iterating
|
||||
</p>
|
||||
<p>
|
||||
<span class="emphasis"><em>x(t+Δ t) = x(t) + Δ t f(x(t)) + Δ t<sup>1/2</sup> g(x) ξ(t)</em></span>
|
||||
</p>
|
||||
<p>
|
||||
where ξ(t) is a independent and identically distributed normal random variable.
|
||||
</p>
|
||||
<p>
|
||||
Now we will implement this method. We will call the stepper <code class="computeroutput"><span class="identifier">stochastic_euler</span></code>. Its class definition
|
||||
looks like
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">stochastic_euler</span>
|
||||
<span class="special">{</span>
|
||||
<span class="keyword">public</span><span class="special">:</span>
|
||||
|
||||
<span class="keyword">typedef</span> <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">state_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <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">deriv_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">value_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">time_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">order_type</span><span class="special">;</span>
|
||||
|
||||
<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">odeint</span><span class="special">::</span><span class="identifier">stepper_tag</span> <span class="identifier">stepper_category</span><span class="special">;</span>
|
||||
<span class="special">};</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
<p>
|
||||
System function
|
||||
</p>
|
||||
<p>
|
||||
steppers body
|
||||
</p>
|
||||
<p>
|
||||
do_step method
|
||||
</p>
|
||||
<p>
|
||||
examples, with integrate function
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
<td align="left"></td>
|
||||
|
@ -61,6 +61,7 @@
|
||||
The implementation of the Lorenz system is
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">sigma</span> <span class="special">=</span> <span class="number">10.0</span><span class="special">;</span>
|
||||
<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">R</span> <span class="special">=</span> <span class="number">28.0</span><span class="special">;</span>
|
||||
@ -83,6 +84,7 @@
|
||||
the perturbation could look like:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span>
|
||||
<span class="keyword">const</span> <span class="identifier">size_t</span> <span class="identifier">num_of_lyap</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span>
|
||||
@ -114,6 +116,7 @@
|
||||
inside a functor with templatized arguments:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">lorenz</span>
|
||||
<span class="special">{</span>
|
||||
@ -135,7 +138,7 @@
|
||||
</pre>
|
||||
<p>
|
||||
This works fine and <code class="computeroutput"><span class="identifier">lorenz_with_lyap</span></code>
|
||||
can be used for example via
|
||||
can be used for example via
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">state_type</span> <span class="identifier">x</span><span class="special">;</span>
|
||||
<span class="comment">// initialize x</span>
|
||||
@ -151,6 +154,7 @@
|
||||
current state lies on the attractor, hence it would look like
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">state_type</span> <span class="identifier">x</span><span class="special">;</span>
|
||||
<span class="comment">// initialize x</span>
|
||||
@ -166,6 +170,7 @@
|
||||
by pointer to the state and an appropriate length, something similar to
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">lorenz</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="keyword">double</span> <span class="special">*</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">params</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
@ -183,6 +188,7 @@
|
||||
the system has to by changed:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">lorenz</span>
|
||||
<span class="special">{</span>
|
||||
@ -205,6 +211,7 @@
|
||||
with an suited range:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// perform 10000 transient steps</span>
|
||||
<span class="identifier">integrate_n_steps</span><span class="special">(</span> <span class="identifier">rk4</span> <span class="special">,</span> <span class="identifier">lorenz</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">n</span> <span class="special">)</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">,</span> <span class="number">10000</span> <span class="special">);</span>
|
||||
@ -235,6 +242,7 @@
|
||||
</li>
|
||||
</ol></div>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">fill</span><span class="special">(</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()+</span><span class="identifier">n</span> <span class="special">,</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">);</span>
|
||||
<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">num_of_lyap</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span> <span class="identifier">x</span><span class="special">[</span><span class="identifier">n</span><span class="special">+</span><span class="identifier">n</span><span class="special">*</span><span class="identifier">i</span><span class="special">+</span><span class="identifier">i</span><span class="special">]</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span>
|
||||
|
@ -52,6 +52,7 @@
|
||||
to just define a function, e.g:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">/* The type of container used to hold the state vector */</span>
|
||||
<span class="keyword">typedef</span> <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">state_type</span><span class="special">;</span>
|
||||
@ -59,7 +60,7 @@
|
||||
<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">gam</span> <span class="special">=</span> <span class="number">0.15</span><span class="special">;</span>
|
||||
|
||||
<span class="comment">/* The rhs of x' = f(x) */</span>
|
||||
<span class="keyword">void</span> <span class="identifier">harmonic_oscillator</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span>
|
||||
<span class="keyword">void</span> <span class="identifier">harmonic_oscillator</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dxdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</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="identifier">dxdt</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">gam</span><span class="special">*</span><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">];</span>
|
||||
@ -78,6 +79,7 @@
|
||||
parameter structure as above:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">/* The rhs of x' = f(x) defined as a class */</span>
|
||||
<span class="keyword">class</span> <span class="identifier">harm_osc</span> <span class="special">{</span>
|
||||
@ -87,7 +89,7 @@
|
||||
<span class="keyword">public</span><span class="special">:</span>
|
||||
<span class="identifier">harm_osc</span><span class="special">(</span> <span class="keyword">double</span> <span class="identifier">gam</span> <span class="special">)</span> <span class="special">:</span> <span class="identifier">m_gam</span><span class="special">(</span><span class="identifier">gam</span><span class="special">)</span> <span class="special">{</span> <span class="special">}</span>
|
||||
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()</span> <span class="special">(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dxdt</span><span class="special">[</span><span class="number">0</span><span class="special">]</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="identifier">dxdt</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">m_gam</span><span class="special">*</span><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">];</span>
|
||||
@ -1136,6 +1138,7 @@
|
||||
<span class="special">)</span></code> function from odeint:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">runge_kutta4</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="identifier">stepper</span><span class="special">;</span>
|
||||
<span class="identifier">integrate_const</span><span class="special">(</span> <span class="identifier">stepper</span> <span class="special">,</span> <span class="identifier">harmonic_oscillator</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="number">10.0</span> <span class="special">,</span> <span class="number">0.01</span> <span class="special">);</span>
|
||||
@ -1152,6 +1155,7 @@
|
||||
method which can used directly. So, you write down the above example as
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">dt</span> <span class="special">=</span> <span class="number">0.01</span><span class="special">;</span>
|
||||
<span class="keyword">for</span><span class="special">(</span> <span class="keyword">double</span> <span class="identifier">t</span><span class="special">=</span><span class="number">0.0</span> <span class="special">;</span> <span class="identifier">t</span><span class="special"><</span><span class="number">10.0</span> <span class="special">;</span> <span class="identifier">t</span><span class="special">+=</span> <span class="identifier">dt</span> <span class="special">)</span>
|
||||
@ -1175,6 +1179,7 @@
|
||||
with 4th order error estimation and coefficients introduced by Cash-Karp.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">runge_kutta_cash_karp54</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">></span> <span class="identifier">error_stepper_type</span><span class="special">;</span>
|
||||
</pre>
|
||||
@ -1187,6 +1192,7 @@
|
||||
stepper exists which can be used via
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">controlled_runge_kutta</span><span class="special"><</span> <span class="identifier">error_stepper_type</span> <span class="special">></span> <span class="identifier">controlled_stepper_type</span><span class="special">;</span>
|
||||
<span class="identifier">controlled_stepper_type</span> <span class="identifier">controlled_stepper</span><span class="special">;</span>
|
||||
@ -1213,6 +1219,7 @@
|
||||
by using <code class="computeroutput"><span class="identifier">make_controlled</span></code>:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">integrate_adaptive</span><span class="special">(</span> <span class="identifier">make_controlled</span><span class="special"><</span> <span class="identifier">error_stepper_type</span> <span class="special">>(</span> <span class="number">1.0e-10</span> <span class="special">,</span> <span class="number">1.0e-6</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">harmonic_oscillator</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="number">10.0</span> <span class="special">,</span> <span class="number">0.01</span> <span class="special">);</span>
|
||||
</pre>
|
||||
@ -1228,6 +1235,7 @@
|
||||
is
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">integrate_adaptive</span><span class="special">(</span> <span class="identifier">make_controlled</span><span class="special">(</span> <span class="number">1.0e-10</span> <span class="special">,</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="identifier">error_stepper_type</span><span class="special">()</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">harmonic_oscillator</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="number">10.0</span> <span class="special">,</span> <span class="number">0.01</span> <span class="special">);</span>
|
||||
</pre>
|
||||
@ -1243,6 +1251,7 @@
|
||||
with all parameters is therefore
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">abs_err</span> <span class="special">=</span> <span class="number">1.0e-10</span> <span class="special">,</span> <span class="identifier">rel_err</span> <span class="special">=</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="identifier">a_x</span> <span class="special">=</span> <span class="number">1.0</span> <span class="special">,</span> <span class="identifier">a_dxdt</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span>
|
||||
<span class="identifier">controlled_stepper_type</span> <span class="identifier">controlled_stepper</span><span class="special">(</span> <span class="identifier">default_error_checker</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">>(</span> <span class="identifier">abs_err</span> <span class="special">,</span> <span class="identifier">rel_err</span> <span class="special">,</span> <span class="identifier">a_x</span> <span class="special">,</span> <span class="identifier">a_dxdt</span> <span class="special">)</span> <span class="special">);</span>
|
||||
|
@ -98,6 +98,7 @@
|
||||
space as well as the velocity. Therefore, we use the operators from <a href="http://www.boost.org/doc/libs/release/doc/html/operators.html" target="_top">Boost.Operators</a>:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">/*the point type */</span>
|
||||
<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>
|
||||
@ -135,6 +136,7 @@
|
||||
type we use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">array</span></code>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// we simulate 5 planets and the sun</span>
|
||||
<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>
|
||||
@ -157,6 +159,7 @@
|
||||
As system function we have to provide <span class="emphasis"><em>f(p)</em></span> and <span class="emphasis"><em>f(q)</em></span>:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<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>
|
||||
|
||||
@ -176,6 +179,7 @@
|
||||
<p>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">solar_system_momentum</span>
|
||||
<span class="special">{</span>
|
||||
@ -217,6 +221,7 @@
|
||||
apply here:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<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>
|
||||
<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>
|
||||
@ -241,6 +246,7 @@
|
||||
The reference wrapper is also passed, but this is not a problem at all:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">streaming_observer</span>
|
||||
<span class="special">{</span>
|
||||
|
@ -63,6 +63,7 @@
|
||||
code is very simple
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><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">complex</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="special">,</span> <span class="number">1</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
|
||||
@ -88,6 +89,7 @@
|
||||
function. In this cast the Stuart-Landau oscillator looks like
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">eta</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span>
|
||||
<span class="keyword">double</span> <span class="identifier">alpha</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span>
|
||||
@ -109,6 +111,7 @@
|
||||
Integration is also very easy:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">state_type</span> <span class="identifier">x</span> <span class="special">=</span> <span class="special">{{</span> <span class="identifier">complex</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">>(</span> <span class="number">1.0</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">)</span> <span class="special">}};</span>
|
||||
|
||||
@ -153,6 +156,7 @@
|
||||
components. Here, is how this function looks like
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">vector</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">container_type</span><span class="special">;</span>
|
||||
|
||||
@ -204,6 +208,7 @@
|
||||
All this can be easily done with the following piece of code:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">64</span><span class="special">;</span>
|
||||
<span class="identifier">container_type</span> <span class="identifier">q</span><span class="special">(</span> <span class="identifier">n</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">p</span><span class="special">(</span> <span class="identifier">n</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">);</span>
|
||||
@ -230,6 +235,7 @@
|
||||
The observer is more or less trivial
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">streaming_observer</span>
|
||||
<span class="special">{</span>
|
||||
@ -298,6 +304,7 @@
|
||||
also need to store the individual frequencies of each oscillator.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">vector</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">container_type</span><span class="special">;</span>
|
||||
|
||||
@ -344,7 +351,7 @@
|
||||
|
||||
<span class="keyword">double</span> <span class="identifier">get_epsilon</span><span class="special">(</span> <span class="keyword">void</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">m_epsilon</span><span class="special">;</span> <span class="special">}</span>
|
||||
|
||||
<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">x</span> <span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span> <span class="keyword">const</span>
|
||||
<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">x</span> <span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span> <span class="keyword">const</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">pair</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">mean</span> <span class="special">=</span> <span class="identifier">calc_mean_field</span><span class="special">(</span> <span class="identifier">x</span> <span class="special">);</span>
|
||||
<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">x</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>
|
||||
@ -360,6 +367,7 @@
|
||||
and we record <span class="emphasis"><em>Z</em></span> for different values of <span class="emphasis"><em>ε</em></span>.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">statistics_observer</span>
|
||||
<span class="special">{</span>
|
||||
@ -392,6 +400,7 @@
|
||||
2</em></span>.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">16384</span><span class="special">;</span>
|
||||
<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">dt</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">;</span>
|
||||
@ -449,6 +458,7 @@
|
||||
all quantities
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// first increase fusion macro variables</span>
|
||||
<span class="preprocessor">#define</span> <span class="identifier">BOOST_FUSION_INVOKE_MAX_ARITY</span> <span class="number">15</span>
|
||||
@ -490,6 +500,7 @@
|
||||
equivalent to the example in the first section of this tutorial
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">oscillator</span>
|
||||
<span class="special">{</span>
|
||||
@ -513,6 +524,7 @@
|
||||
Furthermore, the basic calculations are now performed by the <code class="computeroutput"><span class="identifier">fusion_algebra</span></code> which must also be given.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">,</span> <span class="keyword">double</span> <span class="special">,</span> <span class="identifier">deriv_type</span> <span class="special">,</span> <span class="identifier">time_type</span> <span class="special">,</span> <span class="identifier">fusion_algebra</span> <span class="special">></span> <span class="identifier">stepper_type</span><span class="special">;</span>
|
||||
|
||||
@ -527,6 +539,7 @@
|
||||
the observer is defined a bit different
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">streaming_observer</span>
|
||||
<span class="special">{</span>
|
||||
@ -598,6 +611,7 @@
|
||||
The definition of the system is
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</span><span class="special">::</span><span class="identifier">matrix</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
|
||||
@ -606,7 +620,7 @@
|
||||
<span class="identifier">two_dimensional_phase_lattice</span><span class="special">(</span> <span class="keyword">double</span> <span class="identifier">gamma</span> <span class="special">=</span> <span class="number">0.5</span> <span class="special">)</span>
|
||||
<span class="special">:</span> <span class="identifier">m_gamma</span><span class="special">(</span> <span class="identifier">gamma</span> <span class="special">)</span> <span class="special">{</span> <span class="special">}</span>
|
||||
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span> <span class="keyword">const</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span> <span class="keyword">const</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">size_t</span> <span class="identifier">size1</span> <span class="special">=</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">size1</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">size2</span> <span class="special">=</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">size2</span><span class="special">();</span>
|
||||
|
||||
@ -691,6 +705,7 @@
|
||||
Here is a simple example:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">mpf_class</span> <span class="identifier">value_type</span><span class="special">;</span>
|
||||
<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">value_type</span> <span class="special">,</span> <span class="number">3</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
@ -715,6 +730,7 @@
|
||||
which can be used
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">precision</span> <span class="special">=</span> <span class="number">1024</span><span class="special">;</span>
|
||||
<span class="identifier">mpf_set_default_prec</span><span class="special">(</span> <span class="identifier">precision</span> <span class="special">);</span>
|
||||
@ -776,6 +792,7 @@
|
||||
is kept which should be changed whenever the states' size change.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">vector</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">coord_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">pair</span><span class="special"><</span> <span class="identifier">coord_type</span> <span class="special">,</span> <span class="identifier">coord_type</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
@ -861,6 +878,7 @@
|
||||
of 60.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">//start with 60 sites</span>
|
||||
<span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">N_start</span> <span class="special">=</span> <span class="number">60</span><span class="special">;</span>
|
||||
@ -869,7 +887,7 @@
|
||||
<span class="identifier">coord_type</span> <span class="identifier">p</span><span class="special">(</span> <span class="identifier">N_start</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">);</span>
|
||||
<span class="identifier">p</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span> <span class="identifier">max_N</span> <span class="special">);</span>
|
||||
<span class="comment">// start with uniform momentum distribution over 20 sites</span>
|
||||
<span class="identifier">fill</span><span class="special">(</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()+</span><span class="number">20</span> <span class="special">,</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">end</span><span class="special">()-</span><span class="number">20</span> <span class="special">,</span> <span class="number">1.0</span><span class="special">/</span><span class="identifier">sqrt</span><span class="special">(</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span>
|
||||
<span class="identifier">fill</span><span class="special">(</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()+</span><span class="number">20</span> <span class="special">,</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">end</span><span class="special">()-</span><span class="number">20</span> <span class="special">,</span> <span class="number">1.0</span><span class="special">/</span><span class="identifier">sqrt</span><span class="special">(</span><span class="number">20.0</span><span class="special">)</span> <span class="special">);</span>
|
||||
|
||||
<span class="identifier">coord_type</span> <span class="identifier">distr</span><span class="special">(</span> <span class="identifier">N_start</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">);</span>
|
||||
<span class="identifier">distr</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span> <span class="identifier">max_N</span> <span class="special">);</span>
|
||||
@ -896,6 +914,7 @@
|
||||
the start index of the potential changes in this case.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">t</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
|
||||
<span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">dt</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">;</span>
|
||||
@ -928,6 +947,7 @@
|
||||
, <code class="computeroutput"><span class="identifier">p</span></code> and <code class="computeroutput"><span class="identifier">distr</span></code>.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">do_resize</span><span class="special">(</span> <span class="identifier">coord_type</span> <span class="special">&</span><span class="identifier">q</span> <span class="special">,</span> <span class="identifier">coord_type</span> <span class="special">&</span><span class="identifier">p</span> <span class="special">,</span> <span class="identifier">coord_type</span> <span class="special">&</span><span class="identifier">distr</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">N</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
|
@ -45,13 +45,14 @@
|
||||
is needed. Here is the definition of the above example
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</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">vector_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</span><span class="special">::</span><span class="identifier">matrix</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">matrix_type</span><span class="special">;</span>
|
||||
|
||||
<span class="keyword">struct</span> <span class="identifier">stiff_system</span>
|
||||
<span class="special">{</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="identifier">t</span> <span class="special">)</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="keyword">double</span> <span class="comment">/* t */</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">dxdt</span><span class="special">[</span> <span class="number">0</span> <span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="number">101.0</span> <span class="special">*</span> <span class="identifier">x</span><span class="special">[</span> <span class="number">0</span> <span class="special">]</span> <span class="special">-</span> <span class="number">100.0</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="identifier">dxdt</span><span class="special">[</span> <span class="number">1</span> <span class="special">]</span> <span class="special">=</span> <span class="identifier">x</span><span class="special">[</span> <span class="number">0</span> <span class="special">];</span>
|
||||
@ -60,7 +61,7 @@
|
||||
|
||||
<span class="keyword">struct</span> <span class="identifier">stiff_system_jacobi</span>
|
||||
<span class="special">{</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">matrix_type</span> <span class="special">&</span><span class="identifier">J</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="special">&</span><span class="identifier">t</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dfdt</span> <span class="special">)</span>
|
||||
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">vector_type</span> <span class="special">&</span> <span class="comment">/* x */</span> <span class="special">,</span> <span class="identifier">matrix_type</span> <span class="special">&</span><span class="identifier">J</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="special">&</span> <span class="comment">/* t */</span> <span class="special">,</span> <span class="identifier">vector_type</span> <span class="special">&</span><span class="identifier">dfdt</span> <span class="special">)</span>
|
||||
<span class="special">{</span>
|
||||
<span class="identifier">J</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="special">=</span> <span class="special">-</span><span class="number">101.0</span><span class="special">;</span>
|
||||
<span class="identifier">J</span><span class="special">(</span> <span class="number">0</span> <span class="special">,</span> <span class="number">1</span> <span class="special">)</span> <span class="special">=</span> <span class="special">-</span><span class="number">100.0</span><span class="special">;</span>
|
||||
@ -81,6 +82,7 @@
|
||||
just templatize the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</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">vector_type</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">ublas</span><span class="special">::</span><span class="identifier">matrix</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">matrix_type</span><span class="special">;</span>
|
||||
@ -116,6 +118,7 @@
|
||||
all the other stepper:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">vector_type</span> <span class="identifier">x</span><span class="special">(</span> <span class="number">3</span> <span class="special">,</span> <span class="number">1.0</span> <span class="special">);</span>
|
||||
|
||||
@ -132,6 +135,7 @@
|
||||
5 method with step size control and dense output yields 1531 steps.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">vector_type</span> <span class="identifier">x2</span><span class="special">(</span> <span class="number">3</span> <span class="special">,</span> <span class="number">1.0</span> <span class="special">);</span>
|
||||
|
||||
|
@ -87,6 +87,7 @@
|
||||
website.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">//change this to float if your device does not support double computation</span>
|
||||
<span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">value_type</span><span class="special">;</span>
|
||||
@ -102,7 +103,7 @@
|
||||
a calculation on the GPU you usually have to call a global function like
|
||||
<code class="computeroutput"><span class="identifier">thrust</span><span class="special">::</span><span class="identifier">for_each</span></code>, <code class="computeroutput"><span class="identifier">thrust</span><span class="special">::</span><span class="identifier">reduce</span></code>,
|
||||
... with an appropriate local functor which performs the basic operation.
|
||||
An example is
|
||||
An example is
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">add_two</span>
|
||||
<span class="special">{</span>
|
||||
@ -137,6 +138,7 @@
|
||||
The mean field is calculated in a class <code class="computeroutput"><span class="identifier">mean_field_calculator</span></code>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">mean_field_calculator</span>
|
||||
<span class="special">{</span>
|
||||
@ -190,6 +192,7 @@
|
||||
GPU as well as on the CPU. The line
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">value_type</span> <span class="identifier">sin_sum</span> <span class="special">=</span> <span class="identifier">thrust</span><span class="special">::</span><span class="identifier">reduce</span><span class="special">(</span>
|
||||
<span class="identifier">thrust</span><span class="special">::</span><span class="identifier">make_transform_iterator</span><span class="special">(</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">sin_functor</span><span class="special">()</span> <span class="special">)</span> <span class="special">,</span>
|
||||
@ -205,6 +208,7 @@
|
||||
The system function is defined via
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">phase_oscillator_ensemble</span>
|
||||
<span class="special">{</span>
|
||||
@ -260,6 +264,7 @@
|
||||
thrust algebra:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">runge_kutta4</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">,</span> <span class="identifier">value_type</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">,</span> <span class="identifier">value_type</span> <span class="special">,</span> <span class="identifier">thrust_algebra</span> <span class="special">,</span> <span class="identifier">thrust_operations</span> <span class="special">></span> <span class="identifier">stepper_type</span><span class="special">;</span>
|
||||
</pre>
|
||||
@ -269,6 +274,7 @@
|
||||
Of course, you can also use a controlled or dense output stepper, e.g.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">runge_kutta_dopri5</span><span class="special"><</span> <span class="identifier">state_type</span> <span class="special">,</span> <span class="identifier">value_type</span> <span class="special">,</span> <span class="identifier">state_type</span> <span class="special">,</span> <span class="identifier">value_type</span> <span class="special">,</span> <span class="identifier">thrust_algebra</span> <span class="special">,</span> <span class="identifier">thrust_operations</span> <span class="special">></span> <span class="identifier">stepper_type</span><span class="special">;</span>
|
||||
</pre>
|
||||
@ -279,12 +285,14 @@
|
||||
an instance of the rhs class and using an integration function:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">phase_oscillator_ensemble</span> <span class="identifier">ensemble</span><span class="special">(</span> <span class="identifier">N</span> <span class="special">,</span> <span class="number">1.0</span> <span class="special">);</span>
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">size_t</span> <span class="identifier">steps1</span> <span class="special">=</span> <span class="identifier">integrate_const</span><span class="special">(</span> <span class="identifier">make_controlled</span><span class="special">(</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="number">1.0e-6</span> <span class="special">,</span> <span class="identifier">stepper_type</span><span class="special">()</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">ensemble</span> <span class="special">)</span> <span class="special">,</span> <span class="identifier">x</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="identifier">t_transients</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
|
||||
</pre>
|
||||
@ -326,6 +334,7 @@
|
||||
in front. The full system class is:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">//change this to host_vector< ... > of you want to run on CPU</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">thrust</span><span class="special">::</span><span class="identifier">device_vector</span><span class="special"><</span> <span class="identifier">value_type</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
@ -414,6 +423,7 @@
|
||||
current state, hence the phase of each oscillator.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// create initial conditions and omegas on host:</span>
|
||||
<span class="identifier">vector</span><span class="special"><</span> <span class="identifier">value_type</span> <span class="special">></span> <span class="identifier">x_host</span><span class="special">(</span> <span class="identifier">N</span> <span class="special">);</span>
|
||||
@ -476,6 +486,7 @@
|
||||
<span class="special">></span></code>.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">vector</span><span class="special"><</span> <span class="identifier">value_type</span> <span class="special">></span> <span class="identifier">beta_host</span><span class="special">(</span> <span class="identifier">N</span> <span class="special">);</span>
|
||||
<span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">beta_min</span> <span class="special">=</span> <span class="number">0.0</span> <span class="special">,</span> <span class="identifier">beta_max</span> <span class="special">=</span> <span class="number">56.0</span><span class="special">;</span>
|
||||
@ -493,6 +504,7 @@
|
||||
calculates one particular realization of the Lorenz ensemble
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">lorenz_system</span>
|
||||
<span class="special">{</span>
|
||||
@ -574,6 +586,7 @@
|
||||
which is used within this observer is defined
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">lyap_functor</span>
|
||||
<span class="special">{</span>
|
||||
@ -613,6 +626,7 @@
|
||||
and written to <code class="computeroutput"><span class="identifier">stdout</span></code>.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">state_type</span> <span class="identifier">x</span><span class="special">(</span> <span class="number">6</span> <span class="special">*</span> <span class="identifier">N</span> <span class="special">);</span>
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
<div><p class="copyright">Copyright © 2009-2011 Karsten Ahnert
|
||||
and Mario Mulansky</p></div>
|
||||
<div><div class="legalnotice">
|
||||
<a name="odeint.legal"></a><p>
|
||||
<a name="id532853"></a><p>
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
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>)
|
||||
</p>
|
||||
@ -125,7 +125,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
<td align="left"><p><small>Last revised: March 26, 2012 at 07:18:34 GMT</small></p></td>
|
||||
<td align="left"><p><small>Last revised: March 29, 2012 at 12:51:03 GMT</small></p></td>
|
||||
<td align="right"><div class="copyright-footer"></div></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
|
@ -213,6 +213,38 @@ odeint provides a quite large number of different steppers such that the user is
|
||||
|
||||
[section Write own steppers]
|
||||
|
||||
[import ../examples/stochastic_euler.cpp]
|
||||
|
||||
Of course, one can write own steppers which are fully compatible with odeint. They only have to fullfil one or several of the stepper __concepts of odeint.
|
||||
|
||||
We will illustrate how to write your own stepper with the example of the stochastic euler method. This method is suited to solve stochastic differential equations (SDEs). A SDE has the form
|
||||
|
||||
['dx/dt = f(x) + g(x) __xi(t)]
|
||||
|
||||
where ['__xi] is Gaussian white noise with zero mean and a standard deviation ['__sigma]. ['f(x)] is said to be the deterministic part while [' g(x) __xi] is the noisy part. In case ['g(x)] is independent of ['x] the SDE is said to have additive noise. It is not possible to solve SDE with the classical solvers for ODEs since the noisy part of the SDE has to be scaled differently then the deterministic part with respect to the time step. BUt there exist many solvers for SDEs. A classical and easy method is the stochastic euler solver. It works by iterating
|
||||
|
||||
['x(t+__Delta t) = x(t) + __Delta t f(x(t)) + __Delta t[super 1/2] g(x) __xi(t)]
|
||||
|
||||
where __xi(t) is an independent normal distributed random variable.
|
||||
|
||||
Now we will implement this method. We will call the stepper `stochastic_euler`. It models the __stepper_concept. The class definition looks like
|
||||
|
||||
[stochastic_euler_class_definition]
|
||||
|
||||
The types are needed in order to fullfil the stepper concept. An internal state is not needed in the stochastic euler, there are no temporaries needed during each step. So, in principle `state_type` and `deriv_type` are not needed here. Nevertheless, they must be present in order to fullfil the __stepper_concept and `std::vector< double >` is a good general candidate for the state and deriv type.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
System function
|
||||
|
||||
steppers body
|
||||
|
||||
do_step method
|
||||
|
||||
examples, with integrate function
|
||||
|
||||
|
||||
|
||||
[endsect]
|
||||
|
@ -71,7 +71,7 @@
|
||||
[def __generation_functions
|
||||
[link boost_sandbox_numeric_odeint.odeint_in_detail.generation_functions Generation functions]]
|
||||
[def __adapt_state_types
|
||||
[link boost_sandbox_numeric_odeint.extend_odeint Adapt you own state types]]
|
||||
[link boost_sandbox_numeric_odeint.odeint_in_detail.state_types__algebras_and_operations Adapt you own state types]]
|
||||
|
||||
|
||||
[def __alpha '''α''']
|
||||
@ -94,6 +94,7 @@
|
||||
[def __eta '''η''']
|
||||
[def __theta '''θ''']
|
||||
[def __Theta '''Θ''']
|
||||
[def __xi '''ξ''']
|
||||
|
||||
[def __space '''​''']
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
#include <array>
|
||||
@ -14,14 +15,39 @@ struct sys
|
||||
}
|
||||
};
|
||||
|
||||
//[ stochastic_euler_class_definition
|
||||
class stochastic_euler
|
||||
{
|
||||
public:
|
||||
|
||||
typedef std::vector< double > state_type;
|
||||
typedef std::vector< double > deriv_type;
|
||||
typedef double value_type;
|
||||
typedef double time_type;
|
||||
typedef unsigned short order_type;
|
||||
typedef boost::numeric::odeint::stepper_tag stepper_category;
|
||||
|
||||
// ...
|
||||
};
|
||||
//]
|
||||
|
||||
|
||||
|
||||
//[ stochastic_euler_class
|
||||
class stochastic_euler
|
||||
{
|
||||
public:
|
||||
|
||||
typedef std::vector< double > state_type;
|
||||
typedef std::vector< double > deriv_type;
|
||||
typedef double value_type;
|
||||
typedef double time_type;
|
||||
typedef unsigned short order_type;
|
||||
|
||||
typedef boost::numeric::odeint::stepper_tag stepper_category;
|
||||
|
||||
static order_type order( void ) { return 1; }
|
||||
|
||||
template< class System , class State , class Time >
|
||||
void do_step( System system , State &x , Time t , Time dt ) const
|
||||
{
|
||||
@ -31,6 +57,7 @@ public:
|
||||
x[i] += dt * dxdt[i] + sqrt( dt ) * system.second();
|
||||
}
|
||||
};
|
||||
//]
|
||||
|
||||
template< class Rng , class Dist >
|
||||
struct gen
|
||||
|
Loading…
x
Reference in New Issue
Block a user