mirror of
https://github.com/boostorg/odeint.git
synced 2025-05-09 23:24:01 +00:00
rewritten doc: details / state_types, algebras, operations
This commit is contained in:
parent
fc3c7a682e
commit
9f684ab983
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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,6 +243,7 @@
|
||||
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>
|
||||
|
||||
@ -269,6 +272,7 @@
|
||||
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>
|
||||
@ -282,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>
|
||||
@ -299,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>
|
||||
@ -318,6 +324,7 @@
|
||||
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>
|
||||
@ -341,6 +348,7 @@
|
||||
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="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>
|
||||
@ -406,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>
|
||||
@ -423,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>
|
||||
@ -685,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>
|
||||
@ -710,6 +721,7 @@
|
||||
exist:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<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>
|
||||
@ -727,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>
|
||||
@ -795,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>
|
||||
@ -1932,6 +1946,7 @@
|
||||
The class definition looks like
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="identifier">size_t</span> <span class="identifier">N</span> <span class="special">></span> <span class="keyword">class</span> <span class="identifier">stochastic_euler</span>
|
||||
<span class="special">{</span>
|
||||
@ -1967,6 +1982,7 @@
|
||||
order to simulate the stochastic process. We can now implement the <code class="computeroutput"><span class="identifier">do_step</span></code> method
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="identifier">size_t</span> <span class="identifier">N</span> <span class="special">></span> <span class="keyword">class</span> <span class="identifier">stochastic_euler</span>
|
||||
<span class="special">{</span>
|
||||
@ -2022,6 +2038,7 @@
|
||||
part:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">static</span> <span class="identifier">size_t</span> <span class="identifier">N</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
|
||||
<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">,</span> <span class="identifier">N</span> <span class="special">></span> <span class="identifier">state_type</span><span class="special">;</span>
|
||||
@ -2056,6 +2073,7 @@
|
||||
Euler stepper with the integrate functions:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">dt</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">;</span>
|
||||
<span class="identifier">state_type</span> <span class="identifier">x</span> <span class="special">=</span> <span class="special">{{</span> <span class="number">1.0</span> <span class="special">}};</span>
|
||||
|
@ -27,6 +27,7 @@
|
||||
stepper will be passed by value:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">rk4</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">// pass sys by value</span>
|
||||
</pre>
|
||||
@ -45,6 +46,7 @@
|
||||
all of you system will take place:
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<pre class="programlisting"><span class="identifier">rk4</span><span class="special">.</span><span class="identifier">do_step</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">sys</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="comment">// pass sys as references</span>
|
||||
</pre>
|
||||
|
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
@ -566,7 +579,7 @@
|
||||
Using <a href="http://www.boost.org/doc/libs/release/libs/units/index.html" target="_top">Boost.Units</a>
|
||||
works nicely but compilation can be very time and memory consuming. For
|
||||
example the unit test for <a href="http://www.boost.org/doc/libs/release/libs/units/index.html" target="_top">Boost.Units</a>
|
||||
take up to 4 GB of memory.
|
||||
take up to 4 GB of memory at compilation.
|
||||
</p></td></tr>
|
||||
</table></div>
|
||||
<p>
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
@ -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,6 +45,7 @@
|
||||
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>
|
||||
@ -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="id546634"></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: April 02, 2012 at 16:04:40 GMT</small></p></td>
|
||||
<td align="left"><p><small>Last revised: April 04, 2012 at 17:13:01 GMT</small></p></td>
|
||||
<td align="right"><div class="copyright-footer"></div></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
|
@ -1,43 +1,38 @@
|
||||
[section State types, algebras and operations]
|
||||
|
||||
In odeint the integration algorithms are implemented independently of the
|
||||
underlying fundamental mathematical operations.
|
||||
This is realized by giving the user full control over the state type and the
|
||||
mathematical operations for this state type.
|
||||
Technically, this is done by introducing three concepts: StateType, Algebra,
|
||||
Operations.
|
||||
Most of the steppers in odeint expect three classes types fullfilling these
|
||||
concepts as template parameters.
|
||||
Note that these concepts are not fully independent of each other but rather a
|
||||
valid combination must be provided in order to make the steppers work.
|
||||
In the following we will give some examples on reasonable
|
||||
state_type-algebra-operations combinations.
|
||||
For the most common state types, like `vector<double>` or `array<double,N>`
|
||||
the default values range_algebra and default_operations are perfectly fine and
|
||||
odeint can be used as is without worrying about algebra/operations at all.
|
||||
|
||||
[important state_type, algebra and operations are not independent, a valid
|
||||
combination must be provided to make odeint work properly]
|
||||
|
||||
[section Algebras and operations]
|
||||
|
||||
which steppers support algebras
|
||||
|
||||
[endsect]
|
||||
|
||||
|
||||
[section Adapt your own state types]
|
||||
|
||||
One of the main goals of odeint is to provide algorithms independent from the underlying state type.
|
||||
The state type is a type representing the state of the ODE, that is the
|
||||
variable x.
|
||||
As we usually deal with systems of ODEs, the state type is represented by some
|
||||
sort of container.
|
||||
Most often, the value type of the container is simply `double`, as usually
|
||||
ODEs are defined as systems of real variables.
|
||||
However, it is also possible to use complex types (`complex<double>`) as
|
||||
underlying value type.
|
||||
Moreover, you can even adopt odeint to work with _any_ value type as long as
|
||||
the required operations are defined.
|
||||
However, in the following I will describe how your own state types can be used
|
||||
to run with odeint.
|
||||
I will assume that the state type is some sort of container aggregating a
|
||||
number of values representing state of the ODE.
|
||||
As odeint also takes care for the memory management of where intermediate results are stored,
|
||||
it first of all needs to know how to construct/destruct and possibly resize the state type.
|
||||
Additionally, it requires to be told how basic algebraic operations are to be performed on state
|
||||
types. So when introducing new state types to odeint, the following points have to be considered:
|
||||
Moreover, as odeint handles the memory required for intermediate temporary
|
||||
objects itself, it also needs knowledge about how to create state_type objects
|
||||
and maybe how to allocate memory (resizing).
|
||||
All in all, the following things have to be taken care of when odeint is used
|
||||
with non-standard state types:
|
||||
|
||||
* construction/destruction
|
||||
* resizing (if possible/required)
|
||||
* algebraic operations
|
||||
|
||||
Of course, odeint already provides basic interfaces for most of the usual state types.
|
||||
So if you use a `std::vector`, or a `boost::array` as state type no additional work is required,
|
||||
they just work out of the box.
|
||||
Again, odeint already provides basic interfaces for most of the usual state
|
||||
types.
|
||||
So if you use a `std::vector`, or a `boost::array` as state type no additional
|
||||
work is required, they just work out of the box.
|
||||
|
||||
[section Construction/Resizing]
|
||||
|
||||
@ -62,7 +57,7 @@ following functionality:
|
||||
pointing to the end of the sequence]]
|
||||
]
|
||||
|
||||
[caution If your state type does not allocate memory by default construction,
|
||||
[warning If your state type does not allocate memory by default construction,
|
||||
you [*must define it as resizeable] and provide resize functionality (see
|
||||
below). Otherwise segmentation faults will occur.]
|
||||
|
||||
@ -145,31 +140,47 @@ A complete example can be found in [github_link libs/numeric/odeint/examples/lis
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Algebraic operations]
|
||||
[section Algebras and Operations]
|
||||
|
||||
If your state type is not supported by Boost.Range there are several
|
||||
To provide maximum flexibility odeint is implemented in a highly modularized
|
||||
way. This means it is possible to change the underlying mathematical
|
||||
operations without touching the integration algorithms.
|
||||
The fundamental mathematical operations are those of a vector space, that is
|
||||
addition of `state_types` and multiplication of `state_type`s with a scalar
|
||||
(`time_type`). In odeint this is realized in two concepts: _Algebra_ and
|
||||
_Operations_.
|
||||
The standard way how this works is by the range algebra which provides
|
||||
functions that apply a specific operation to each of the individual elements
|
||||
of a container based on the __boost_range library.
|
||||
If your state type is not supported by __boost_range there are several
|
||||
possibilities to tell odeint how to do algebraic operations:
|
||||
|
||||
* Implement `boost::begin` and `boost::end` for your state type so it works
|
||||
with Boost.Range.
|
||||
with __boost_range.
|
||||
* Implement vector-vector addition operator `+` and scalar-vector
|
||||
multiplication operator `*` and use the non-standard `vector_space_algebra`.
|
||||
* Implement your own algebra that defines the required operations.
|
||||
* Implement your own algebra that implements the required functions.
|
||||
|
||||
[section GSL Vector]
|
||||
|
||||
All the above examples use __boost_range to iterate through the elements of the
|
||||
state type and perform the algebraic operation for each element.
|
||||
This is the most natural way when dealing with state types which are some kind
|
||||
of container.
|
||||
But what to do if your state type does not support iterators at all?
|
||||
In the following example we will try to use the `gsl_vector` type from __gsl (GNU
|
||||
Scientific Library) as state type in odeint.
|
||||
We will realize this by implementing a wrapper around the gsl_vector that
|
||||
takes care of construction/destruction.
|
||||
Also, __boost_range is extended such that it works with `gsl_vector`s as well
|
||||
which required also the implementation of a new `gsl_iterator`.
|
||||
|
||||
[note odeint already includes all the code presented here, see [github_link
|
||||
boost/numeric/odeint/external/gsl/gsl_wrapper.hpp gsl_wrapper.hpp], so `gsl_vector`s
|
||||
can be used straight out-of-box.
|
||||
The following description is just for educational purpose.]
|
||||
|
||||
The GSL is a C library, so `gsl_vector` has neither constructor, nor
|
||||
destructor or any `begin` or `end` function, no iterators at all.
|
||||
So to make it work with odeint plenty of things have to be implemented.
|
||||
Note that all of the work shown here is already included in odeint, so using
|
||||
gls_vectors in odeint doesn't require any further adjustments.
|
||||
`gsl_vector`s in odeint doesn't require any further adjustments.
|
||||
We present it here just as an educational example.
|
||||
We start with defining appropriate constructors and destructors.
|
||||
This is done by specializing the `state_wrapper` for `gsl_vector`.
|
||||
State wrappers are used by the steppers internally to create and manage
|
||||
@ -182,7 +193,6 @@ struct state_wrapper< gsl_vector* >
|
||||
typedef double value_type;
|
||||
typedef gsl_vector* state_type;
|
||||
typedef state_wrapper< gsl_vector* > state_wrapper_type;
|
||||
typedef boost::true_type is_resizeable;
|
||||
|
||||
state_type m_v;
|
||||
|
||||
@ -238,8 +248,8 @@ struct resize_impl< gsl_vector* , gsl_vector* >
|
||||
};
|
||||
``
|
||||
|
||||
Up to now, we defined creation and resizing, but gsl_vectors also don't
|
||||
support iterators, so we first implement a gsl iterator:
|
||||
Up to now, we defined creation/destruction and resizing, but gsl_vectors also
|
||||
don't support iterators, so we first implement a gsl iterator:
|
||||
|
||||
``
|
||||
/*
|
||||
@ -430,8 +440,6 @@ libs/numeric/odeint/examples/lorenz_point.cpp lorenz_point.cpp]
|
||||
|
||||
[endsect]
|
||||
|
||||
[endsect]
|
||||
|
||||
gsl_vector, gsl_matrix, ublas::matrix, blitz::matrix, thrust
|
||||
|
||||
[section Adapt your own operations]
|
||||
@ -444,4 +452,4 @@ min, max, pow
|
||||
|
||||
|
||||
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
@ -107,7 +107,9 @@ It is quite easy but the compilation time might take very long. Furthermore, the
|
||||
|
||||
[units_observer]
|
||||
|
||||
[caution Using __boost_units works nicely but compilation can be very time and memory consuming. For example the unit test for __boost_units take up to 4 GB of memory.]
|
||||
[caution Using __boost_units works nicely but compilation can be very time and
|
||||
memory consuming. For example the unit test for __boost_units take up to 4 GB
|
||||
of memory at compilation.]
|
||||
|
||||
The full cpp file for this example can be found here [github_link libs/numeric/odeint/examples/harmonic_oscillator_units.cpp harmonic_oscillator_units.cpp].
|
||||
|
||||
@ -205,4 +207,4 @@ The full example can be found in [github_link libs/numeric/odeint/examples/resiz
|
||||
|
||||
[endsect]
|
||||
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
Loading…
x
Reference in New Issue
Block a user