2
0
mirror of https://github.com/boostorg/odeint.git synced 2026-01-26 06:42:23 +00:00

adjust size for rosenbrock and documentation

This commit is contained in:
karsten
2011-03-31 16:44:16 +00:00
parent efc377054f
commit d5639662e6
12 changed files with 346 additions and 351 deletions

View File

@@ -33,6 +33,7 @@
#include <boost/numeric/odeint/stepper/implicit_euler.hpp>
#include <boost/numeric/odeint/stepper/rosenbrock4.hpp>
#include <boost/numeric/odeint/stepper/rosenbrock4_controller.hpp>
#include <boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp>
/*
* Including this algebra slows down the compilation time

View File

@@ -162,6 +162,7 @@ public:
rosenbrock4& operator=( const rosenbrock4 &rb )
{
copy( rb );
return *this;
}
template< class System >

View File

@@ -21,6 +21,25 @@ namespace odeint {
template< class Stepper >
class rosenbrock4_controller
{
private:
void initialize_variables( void )
{
m_state_adjuster.register_state( 0 , m_xerr );
}
void copy_variables( const rosenbrock4_controller &rb )
{
m_stepper = rb.m_stepper;
m_xerr = rb.m_xerr;
m_atol = rb.m_atol;
m_rtol = rb.m_rtol;
m_first_step = rb.m_first_step;
m_err_old = rb.m_err_old;
m_dt_old = rb.m_dt_old;
m_last_rejected = rb.m_last_rejected;
}
public:
typedef Stepper stepper_type;
@@ -28,14 +47,33 @@ public:
typedef typename stepper_type::state_type state_type;
typedef typename stepper_type::time_type time_type;
typedef typename stepper_type::deriv_type deriv_type;
typedef typename stepper_type::adjust_size_policy adjust_size_policy;
typedef controlled_stepper_tag stepper_category;
rosenbrock4_controller( value_type atol = 1.0e-6 , value_type rtol = 1.0e-6 , const stepper_type &stepper = stepper_type() )
: m_stepper() , m_atol( atol ) , m_rtol( rtol ) ,
: m_stepper() , m_state_adjuster() , m_xerr() ,
m_atol( atol ) , m_rtol( rtol ) ,
m_first_step( true ) , m_err_old( 0.0 ) , m_dt_old( 0.0 ) ,
m_last_rejected( false )
{
initialize_variables();
}
rosenbrock4_controller( const rosenbrock4_controller &rb )
: m_stepper() , m_state_adjuster() , m_xerr() ,
m_atol( 1.0e-6l ) , m_rtol( 1.0e-6 ) ,
m_first_step( true ) , m_err_old( 0.0 ) , m_dt_old( 0.0 ) ,
m_last_rejected( false )
{
initialize_variables();
copy_variables( rb );
}
rosenbrock4_controller& operator=( const rosenbrock4_controller &rb )
{
copy_variables( rb );
return *this;
}
value_type error( const state_type &x , const state_type &xold , const state_type &xerr )
@@ -82,10 +120,10 @@ public:
{
static const value_type safe = 0.9 , fac1 = 5.0 , fac2 = 1.0 / 6.0;
const size_t n = x.size();
state_type xerr( n );
m_stepper.do_step( sys , x , t , xout , dt , xerr );
value_type err = error( xout , x , xerr );
m_state_adjuster.adjust_size_by_policy( x , adjust_size_policy() );
m_stepper.do_step( sys , x , t , xout , dt , m_xerr );
value_type err = error( xout , x , m_xerr );
value_type fac = std::max( fac2 ,std::min( fac1 , std::pow( err , 0.25 ) / safe ) );
value_type dt_new = dt / fac;
@@ -121,6 +159,15 @@ public:
}
template< class StateType >
void adjust_size( const StateType &x )
{
m_stepper.adjust_size( x );
m_state_adjuster.adjust_size( x );
}
stepper_type& stepper( void )
@@ -139,6 +186,8 @@ public:
private:
stepper_type m_stepper;
size_adjuster< state_type , 1 > m_state_adjuster;
state_type m_xerr;
value_type m_atol , m_rtol;
bool m_first_step;
value_type m_err_old , m_dt_old;

View File

@@ -79,10 +79,6 @@ public:
return *this;
}
~rosenbrock4_dense_output( void )
{
}
template< class StateType >
@@ -131,6 +127,15 @@ public:
}
template< class StateType >
void adjust_size( const StateType &x )
{
m_stepper.adjust_size( x );
m_state_adjuster.adjust_size( x );
}
const state_type& current_state( void ) const
{

View File

@@ -3,8 +3,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Concepts</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="prev" href="extend_odeint.html" title="Extend odeint">
<link rel="next" href="reference.html" title="Reference">
@@ -13,9 +13,9 @@
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="extend_odeint.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="extend_odeint.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_sandbox_numeric_odeint.concepts"></a><a class="link" href="concepts.html" title="Concepts">Concepts</a>
</h2></div></div></div>
@@ -35,7 +35,7 @@
<p>
The odeint library defines three concepts for stepping objects.
</p>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.basic_stepper"></a><a class="link" href="concepts.html#boost_sandbox_numeric_odeint.concepts.basic_stepper" title="Basic stepper">Basic
stepper</a>
@@ -59,12 +59,8 @@
</colgroup>
<thead><tr>
<th>
<p>
</p>
</th>
<th>
<p>
</p>
</th>
<th>
<p>
@@ -147,25 +143,27 @@
<p>
<span class="bold"><strong>Methods</strong></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<code class="computeroutput"><span class="identifier">Stepper</span><span class="special">()</span></code>
Constructor.
</li>
<li>
<code class="computeroutput"><span class="identifier">Stepper</span><span class="special">(</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code> Constructor
that allocates internal memory to store intermediate results of the same
size as <code class="computeroutput"><span class="identifier">x</span></code>.
</li>
<li><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">t</span> <span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">dt</span>
<span class="special">)</span></code></li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">Stepper</span><span class="special">()</span></code>
Constructor.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">Stepper</span><span class="special">(</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code>
Constructor that allocates internal memory to store intermediate results
of the same size as <code class="computeroutput"><span class="identifier">x</span></code>.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">t</span> <span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">dt</span>
<span class="special">)</span></code>
</li>
</ul></div>
<p>
Executes one timestep with the given parameters:
@@ -268,44 +266,53 @@
The result of this method is the (approximate) state of the system <span class="bold"><strong>x(t+dt)</strong></span> and is stored in the variable <code class="computeroutput"><span class="identifier">x</span></code> (in-place). Note, that the time <code class="computeroutput"><span class="identifier">t</span></code> is not automatically increased by this
method.
</p>
<div class="itemizedlist"><ul type="disc"><li><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="keyword">const</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="identifier">time_type</span> <span class="identifier">t</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">dt</span> <span class="special">)</span></code></li></ul></div>
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="keyword">const</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="identifier">time_type</span> <span class="identifier">t</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">dt</span> <span class="special">)</span></code>
</li></ul></div>
<p>
The same as above but with the additional parameter <code class="computeroutput"><span class="identifier">dxdt</span></code>
that represents the derivative <span class="bold"><strong>x'(t) = f(x,t)</strong></span>
at the time <span class="bold"><strong>t</strong></span>.
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">adjust_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code> Adjusts
the internal memory to store intermediate results of the same size as
<code class="computeroutput"><span class="identifier">x</span></code>. This function <span class="emphasis"><em>must</em></span>
be called whenever the system size changes during the integration.
</li>
<li>
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_step</span><span class="special">()</span></code> Returns the order of the algorithm. If
<span class="bold"><strong>n</strong></span> is the order of a method, then the result
of one iteration with the timestep <span class="bold"><strong>dt</strong></span>
is accurate up to <span class="bold"><strong>dt^n</strong></span>. That means the
error made by the time discretization is of order <span class="bold"><strong>dt^(n+1)</strong></span>.
</li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">adjust_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code>
Adjusts the internal memory to store intermediate results of the same
size as <code class="computeroutput"><span class="identifier">x</span></code>. This function
<span class="emphasis"><em>must</em></span> be called whenever the system size changes
during the integration.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_step</span><span class="special">()</span></code> Returns the order of the algorithm.
If <span class="bold"><strong>n</strong></span> is the order of a method, then
the result of one iteration with the timestep <span class="bold"><strong>dt</strong></span>
is accurate up to <span class="bold"><strong>dt^n</strong></span>. That means the
error made by the time discretization is of order <span class="bold"><strong>dt^(n+1)</strong></span>.
</li>
</ul></div>
<p>
<span class="bold"><strong>Stepper that model this concept</strong></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li><code class="computeroutput"><span class="identifier">stepper_euler</span></code></li>
<li><code class="computeroutput"><span class="identifier">stepper_rk4</span></code></li>
<li><code class="computeroutput"><span class="identifier">stepper_rk78_fehlberg</span></code></li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">stepper_euler</span></code>
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">stepper_rk4</span></code>
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">stepper_rk78_fehlberg</span></code>
</li>
</ul></div>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.error_stepper"></a><a class="link" href="concepts.html#boost_sandbox_numeric_odeint.concepts.error_stepper" title="Error stepper">Error
stepper</a>
@@ -330,26 +337,28 @@
<p>
<span class="bold"><strong>Methods</strong></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<code class="computeroutput"><span class="identifier">Error_Stepper</span><span class="special">()</span></code>
Constructor.
</li>
<li>
<code class="computeroutput"><span class="identifier">Error_Stepper</span><span class="special">(</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code> Constructor
that allocates internal memory to store intermediate results of the same
size as <code class="computeroutput"><span class="identifier">x</span></code>.
</li>
<li><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">t</span> <span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">dt</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">xerr</span><span class="special">)</span></code></li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">Error_Stepper</span><span class="special">()</span></code>
Constructor.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">Error_Stepper</span><span class="special">(</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code>
Constructor that allocates internal memory to store intermediate results
of the same size as <code class="computeroutput"><span class="identifier">x</span></code>.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">t</span> <span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">dt</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">xerr</span><span class="special">)</span></code>
</li>
</ul></div>
<p>
Executes one timestep with the given parameters:
@@ -471,45 +480,54 @@
Note, that the time <code class="computeroutput"><span class="identifier">t</span></code> is
not automatically increased by this method.
</p>
<div class="itemizedlist"><ul type="disc"><li><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="keyword">const</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="identifier">time_type</span> <span class="identifier">t</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">dt</span> <span class="special">,</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">xerr</span><span class="special">)</span></code></li></ul></div>
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">do_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span>
<span class="special">&amp;</span><span class="identifier">system</span>
<span class="special">,</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">x</span>
<span class="special">,</span> <span class="keyword">const</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">dxdt</span> <span class="special">,</span> <span class="identifier">time_type</span> <span class="identifier">t</span>
<span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">dt</span> <span class="special">,</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">xerr</span><span class="special">)</span></code>
</li></ul></div>
<p>
The same as above but with the additional parameter <code class="computeroutput"><span class="identifier">dxdt</span></code>
that represents the derivative <span class="bold"><strong>x'(t) = f(x,t)</strong></span>
at the time <span class="bold"><strong>t</strong></span>.
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">adjust_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code> Adjusts
the internal memory to store intermediate results of the same size as
<code class="computeroutput"><span class="identifier">x</span></code>. This function <span class="emphasis"><em>must</em></span>
be called whenever the system size changes during the integration.
</li>
<li>
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_error_step</span><span class="special">()</span></code> Returns the order of the result <span class="bold"><strong>x(t+dt)</strong></span> of the algorithm.
</li>
<li>
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_error</span><span class="special">()</span></code> Returns the order of the error estimation
of the algorithm.
</li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">adjust_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code>
Adjusts the internal memory to store intermediate results of the same
size as <code class="computeroutput"><span class="identifier">x</span></code>. This function
<span class="emphasis"><em>must</em></span> be called whenever the system size changes
during the integration.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_error_step</span><span class="special">()</span></code> Returns the order of the result <span class="bold"><strong>x(t+dt)</strong></span> of the algorithm.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_error</span><span class="special">()</span></code> Returns the order of the error estimation
of the algorithm.
</li>
</ul></div>
<p>
<span class="bold"><strong>Stepper that model this concept</strong></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li><code class="computeroutput"><span class="identifier">stepper_rk5_ck</span></code></li>
<li><code class="computeroutput"><span class="identifier">stepper_rk78_fehlberg</span></code></li>
<li><code class="computeroutput"><span class="identifier">stepper_half_step</span></code></li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">stepper_rk5_ck</span></code>
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">stepper_rk78_fehlberg</span></code>
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">stepper_half_step</span></code>
</li>
</ul></div>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.controlled_stepper"></a><a class="link" href="concepts.html#boost_sandbox_numeric_odeint.concepts.controlled_stepper" title="Controlled stepper">Controlled
stepper</a>
@@ -529,11 +547,13 @@
<p>
<span class="bold"><strong>Methods</strong></span>
</p>
<div class="itemizedlist"><ul type="disc"><li><code class="computeroutput"><span class="identifier">Controlled_Stepper</span><span class="special">(</span>
<span class="identifier">time_type</span> <span class="identifier">abs_err</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">rel_err</span><span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">factor_x</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">factor_dxdt</span> <span class="special">)</span></code></li></ul></div>
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<code class="computeroutput"><span class="identifier">Controlled_Stepper</span><span class="special">(</span>
<span class="identifier">time_type</span> <span class="identifier">abs_err</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">rel_err</span><span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">factor_x</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">factor_dxdt</span> <span class="special">)</span></code>
</li></ul></div>
<p>
Constructor that initializes the controlled stepper with several parameters
of the error control. The controlled stepper assures that the error done
@@ -552,22 +572,20 @@
If the estimated error is less than half of the desired error, an increased
stepsize will be suggested.
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<code class="computeroutput"><span class="identifier">Controlled_Stepper</span><span class="special">(</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">abs_err</span><span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">rel_err</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">factor_x</span><span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">factor_dxdt</span>
<span class="special">)</span></code> Same as above, but with additional
allocation of the internal memory to store intermediate results of the
same size as <code class="computeroutput"><span class="identifier">x</span></code>.
</li>
<li><code class="computeroutput"><span class="identifier">controlled_step_result</span> <span class="identifier">try_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span> <span class="special">&amp;</span><span class="identifier">system</span><span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="special">&amp;</span><span class="identifier">dt</span>
<span class="special">)</span></code></li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">Controlled_Stepper</span><span class="special">(</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">time_type</span> <span class="identifier">abs_err</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">rel_err</span><span class="special">,</span>
<span class="identifier">time_type</span> <span class="identifier">factor_x</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="identifier">factor_dxdt</span> <span class="special">)</span></code>
Same as above, but with additional allocation of the internal memory
to store intermediate results of the same size as <code class="computeroutput"><span class="identifier">x</span></code>.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">controlled_step_result</span> <span class="identifier">try_step</span><span class="special">(</span>
<span class="identifier">DynamicalSystem</span> <span class="special">&amp;</span><span class="identifier">system</span><span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">time_type</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">time_type</span> <span class="special">&amp;</span><span class="identifier">dt</span> <span class="special">)</span></code>
</li>
</ul></div>
<p>
Tries one timestep with the given parameters
@@ -680,43 +698,50 @@
<code class="computeroutput"><span class="identifier">dt</span></code> now containes the suggested
reduced stepsize that should give an error below the desired level.
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<code class="computeroutput"><span class="identifier">controlled_step_result</span> <span class="identifier">try_step</span><span class="special">(</span> <span class="identifier">DynamicalSystem</span> <span class="special">&amp;</span><span class="identifier">system</span><span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span>
<span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">dxdt</span><span class="special">,</span> <span class="identifier">time_type</span> <span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="special">&amp;</span><span class="identifier">dt</span>
<span class="special">)</span></code> Same as above but with the additional
parameter <code class="computeroutput"><span class="identifier">dxdt</span></code> that that
represents the derivative <span class="bold"><strong>x'(t) = f(x,t)</strong></span>
at the time <span class="bold"><strong>t</strong></span>.
</li>
<li>
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">adjust_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code> Adjusts
the internal memory to store intermediate results of the same size as
<code class="computeroutput"><span class="identifier">x</span></code>. This function <span class="emphasis"><em>must</em></span>
be called whenever the system size changes during the integration.
</li>
<li>
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_error_step</span><span class="special">()</span></code> Returns the order of the result <span class="bold"><strong>x(t+dt)</strong></span> of the algorithm.
</li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">controlled_step_result</span> <span class="identifier">try_step</span><span class="special">(</span>
<span class="identifier">DynamicalSystem</span> <span class="special">&amp;</span><span class="identifier">system</span><span class="special">,</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">container_type</span>
<span class="special">&amp;</span><span class="identifier">dxdt</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="special">&amp;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">time_type</span>
<span class="special">&amp;</span><span class="identifier">dt</span>
<span class="special">)</span></code> Same as above but with the additional
parameter <code class="computeroutput"><span class="identifier">dxdt</span></code> that that
represents the derivative <span class="bold"><strong>x'(t) = f(x,t)</strong></span>
at the time <span class="bold"><strong>t</strong></span>.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">void</span> <span class="identifier">adjust_size</span><span class="special">(</span> <span class="keyword">const</span> <span class="identifier">container_type</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">)</span></code>
Adjusts the internal memory to store intermediate results of the same
size as <code class="computeroutput"><span class="identifier">x</span></code>. This function
<span class="emphasis"><em>must</em></span> be called whenever the system size changes
during the integration.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">order_type</span> <span class="identifier">order_error_step</span><span class="special">()</span></code> Returns the order of the result <span class="bold"><strong>x(t+dt)</strong></span> of the algorithm.
</li>
</ul></div>
<p>
<span class="bold"><strong>Stepper that model this concept</strong></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li><code class="computeroutput"><span class="identifier">controlled_stepper_standard</span></code></li>
<li><code class="computeroutput"><span class="identifier">controlled_stepper_bs</span></code></li>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<code class="computeroutput"><span class="identifier">controlled_stepper_standard</span></code>
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">controlled_stepper_bs</span></code>
</li>
</ul></div>
</div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.dense_ouput_stepper"></a><a class="link" href="concepts.html#boost_sandbox_numeric_odeint.concepts.dense_ouput_stepper" title="Dense ouput stepper">Dense
ouput stepper</a>
</h3></div></div></div></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.size_adjusting_stepper"></a><a class="link" href="concepts.html#boost_sandbox_numeric_odeint.concepts.size_adjusting_stepper" title="Size adjusting stepper">Size
adjusting stepper</a>
</h3></div></div></div></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.concepts.compositestepper"></a><a class="link" href="concepts.html#boost_sandbox_numeric_odeint.concepts.compositestepper" title="CompositeStepper">CompositeStepper</a>
</h3></div></div></div></div>
<p>
@@ -733,7 +758,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="extend_odeint.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="extend_odeint.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -3,8 +3,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Extend odeint</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="prev" href="tutorial.html" title="Tutorial">
<link rel="next" href="concepts.html" title="Concepts">
@@ -13,9 +13,9 @@
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="tutorial.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="concepts.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="tutorial.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="concepts.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_sandbox_numeric_odeint.extend_odeint"></a><a class="link" href="extend_odeint.html" title="Extend odeint">Extend odeint</a>
</h2></div></div></div>
@@ -27,11 +27,11 @@
<dt><span class="section"><a href="extend_odeint.html#boost_sandbox_numeric_odeint.extend_odeint.adapt_your_own_operations">Adapt
your own operations</a></span></dt>
</dl></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.extend_odeint.write_own_steppers"></a><a class="link" href="extend_odeint.html#boost_sandbox_numeric_odeint.extend_odeint.write_own_steppers" title="Write own steppers">Write
own steppers</a>
</h3></div></div></div></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.extend_odeint.adapt_your_own_containers"></a><a class="link" href="extend_odeint.html#boost_sandbox_numeric_odeint.extend_odeint.adapt_your_own_containers" title="Adapt your own containers">Adapt
your own containers</a>
@@ -40,7 +40,7 @@
gsl_vector, gsl_matrix, ublas::matrix, blitz::matrix, thrust
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.extend_odeint.adapt_your_own_operations"></a><a class="link" href="extend_odeint.html#boost_sandbox_numeric_odeint.extend_odeint.adapt_your_own_operations" title="Adapt your own operations">Adapt
your own operations</a>
@@ -60,7 +60,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="tutorial.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="concepts.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="tutorial.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="concepts.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -3,8 +3,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Getting started</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="prev" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="next" href="tutorial.html" title="Tutorial">
@@ -13,9 +13,9 @@
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorial.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="tutorial.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_sandbox_numeric_odeint.getting_started"></a><a class="link" href="getting_started.html" title="Getting started">Getting started</a>
</h2></div></div></div>
@@ -26,7 +26,7 @@
<dt><span class="section"><a href="getting_started.html#boost_sandbox_numeric_odeint.getting_started.short_example">Short
Example</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.getting_started.overview"></a><a class="link" href="getting_started.html#boost_sandbox_numeric_odeint.getting_started.overview" title="Overview">Overview</a>
</h3></div></div></div>
@@ -52,7 +52,7 @@
algorithms are implemented:
</p>
<div class="table">
<a name="id326539"></a><p class="title"><b>Table&#160;1.1.&#160;Stepper Algorithms</b></p>
<a name="id533115"></a><p class="title"><b>Table&#160;1.1.&#160;Stepper Algorithms</b></p>
<div class="table-contents"><table class="table" summary="Stepper Algorithms">
<colgroup>
<col>
@@ -331,7 +331,7 @@
sometimes also refered as lattices ODEs.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.getting_started.usage__compilation__headers"></a><a class="link" href="getting_started.html#boost_sandbox_numeric_odeint.getting_started.usage__compilation__headers" title="Usage, Compilation, Headers">Usage,
Compilation, Headers</a>
@@ -354,7 +354,7 @@
<p>
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.getting_started.short_example"></a><a class="link" href="getting_started.html#boost_sandbox_numeric_odeint.getting_started.short_example" title="Short Example">Short
Example</a>
@@ -369,9 +369,7 @@
= (x,p)</em></span>:
</p>
<p>
</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">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</span> <span class="identifier">state_type</span><span class="special">;</span>
@@ -385,8 +383,6 @@
<span class="identifier">dxdt</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">gam</span><span class="special">*</span><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">];</span>
<span class="special">}</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -403,16 +399,12 @@
start:
</p>
<p>
</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><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -422,15 +414,11 @@
stepper (5th order) and uses adaptive stepsize.
</p>
<p>
</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>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -447,9 +435,7 @@
rhs must then be implemented as a functor having defined the ()-operator:
</p>
<p>
</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>
@@ -466,24 +452,18 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
which can be used via
</p>
<p>
</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>
<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>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -493,9 +473,7 @@
to provide a reasonable observer. An example is
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">push_back_state_and_time</span>
<span class="special">{</span>
@@ -512,8 +490,6 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -521,9 +497,7 @@
pass this container to the integration function:
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">state_type</span><span class="special">&gt;</span> <span class="identifier">x_vec</span><span class="special">;</span>
<span class="identifier">vector</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">times</span><span class="special">;</span>
@@ -538,8 +512,6 @@
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">times</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">&lt;&lt;</span> <span class="char">'\t'</span> <span class="special">&lt;&lt;</span> <span class="identifier">x_vec</span><span class="special">[</span><span class="identifier">i</span><span class="special">][</span><span class="number">0</span><span class="special">]</span> <span class="special">&lt;&lt;</span> <span class="char">'\t'</span> <span class="special">&lt;&lt;</span> <span class="identifier">x_vec</span><span class="special">[</span><span class="identifier">i</span><span class="special">][</span><span class="number">1</span><span class="special">]</span> <span class="special">&lt;&lt;</span> <span class="char">'\n'</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -562,7 +534,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tutorial.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="tutorial.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -3,8 +3,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Reference</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="prev" href="concepts.html" title="Concepts">
</head>
@@ -12,9 +12,9 @@
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="concepts.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a>
<a accesskey="p" href="concepts.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_sandbox_numeric_odeint.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
</h2></div></div></div>
@@ -27,13 +27,13 @@
<dt><span class="section"><a href="reference.html#boost_sandbox_numeric_odeint.reference.operations">Operations</a></span></dt>
<dt><span class="section"><a href="reference.html#boost_sandbox_numeric_odeint.reference.resizing">Resizing</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.reference.stepper_classes"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.stepper_classes" title="Stepper classes">Stepper
classes</a>
</h3></div></div></div>
<div class="table">
<a name="id379162"></a><p class="title"><b>Table&#160;1.3.&#160;Stepper Algorithms</b></p>
<a name="id585104"></a><p class="title"><b>Table&#160;1.3.&#160;Stepper Algorithms</b></p>
<div class="table-contents"><table class="table" summary="Stepper Algorithms">
<colgroup>
<col>
@@ -201,7 +201,7 @@
</div>
<br class="table-break">
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.reference.integration_functions"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.integration_functions" title="Integration functions">Integration
functions</a>
@@ -212,22 +212,22 @@
<dt><span class="section"><a href="reference.html#boost_sandbox_numeric_odeint.reference.integration_functions.adaptive_step_size_functions">Adaptive
step-size functions</a></span></dt>
</dl></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
<div class="section"><div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.reference.integration_functions.constant_step_size_functions"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.integration_functions.constant_step_size_functions" title="Constant step-size functions">Constant
step-size functions</a>
</h4></div></div></div></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
<div class="section"><div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.reference.integration_functions.adaptive_step_size_functions"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.integration_functions.adaptive_step_size_functions" title="Adaptive step-size functions">Adaptive
step-size functions</a>
</h4></div></div></div></div>
</div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.reference.algebras"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.algebras" title="Algebras">Algebras</a>
</h3></div></div></div></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.reference.operations"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.operations" title="Operations">Operations</a>
</h3></div></div></div></div>
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
<div class="section"><div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.reference.resizing"></a><a class="link" href="reference.html#boost_sandbox_numeric_odeint.reference.resizing" title="Resizing">Resizing</a>
</h3></div></div></div></div>
</div>
@@ -241,7 +241,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="concepts.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a>
<a accesskey="p" href="concepts.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
</div>
</body>
</html>

View File

@@ -3,8 +3,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Tutorial</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="prev" href="getting_started.html" title="Getting started">
<link rel="next" href="extend_odeint.html" title="Extend odeint">
@@ -13,9 +13,9 @@
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="getting_started.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="extend_odeint.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="getting_started.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="extend_odeint.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_sandbox_numeric_odeint.tutorial"></a><a class="link" href="tutorial.html" title="Tutorial">Tutorial</a>
</h2></div></div></div>
@@ -34,7 +34,7 @@
topics</a></span></dt>
<dt><span class="section"><a href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.references">References</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator" title="Harmonic oscillator">Harmonic
oscillator</a>
@@ -49,7 +49,7 @@
<dt><span class="section"><a href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.integration_with_adaptive_step_size">Integration
with Adaptive Step Size</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.define_the_ode"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.define_the_ode" title="Define the ODE">Define
the ODE</a>
@@ -71,9 +71,7 @@
to just define a function, e.g:
</p>
<p>
</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">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</span> <span class="identifier">state_type</span><span class="special">;</span>
@@ -87,8 +85,6 @@
<span class="identifier">dxdt</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">x</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">-</span> <span class="identifier">gam</span><span class="special">*</span><span class="identifier">x</span><span class="special">[</span><span class="number">1</span><span class="special">];</span>
<span class="special">}</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -102,9 +98,7 @@
parameter structure as above:
</p>
<p>
</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>
@@ -121,8 +115,6 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -130,7 +122,7 @@
which allows for cleaner code.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.stepper_types"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.stepper_types" title="Stepper Types">Stepper
Types</a>
@@ -147,7 +139,7 @@
choose:
</p>
<div class="table">
<a name="id370055"></a><p class="title"><b>Table&#160;1.2.&#160;Stepper Algorithms</b></p>
<a name="id575770"></a><p class="title"><b>Table&#160;1.2.&#160;Stepper Algorithms</b></p>
<div class="table-contents"><table class="table" summary="Stepper Algorithms">
<colgroup>
<col>
@@ -424,7 +416,7 @@
which kind of steppers should be applied.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.integration_with_constant_step_size"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.integration_with_constant_step_size" title="Integration with Constant Step Size">Integration
with Constant Step Size</a>
@@ -442,15 +434,11 @@
<span class="special">)</span></code> function from odeint:
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="identifier">explicit_rk4</span><span class="special">&lt;</span> <span class="identifier">state_type</span> <span class="special">&gt;</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>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -463,20 +451,16 @@
method which can used directly. So, you write down the above example as
</p>
<p>
</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">&lt;</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>
<span class="identifier">stepper</span><span class="special">.</span><span class="identifier">do_step</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="identifier">t</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">);</span>
</pre>
<p>
</p>
<p>
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.integration_with_adaptive_step_size"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.harmonic_oscillator.integration_with_adaptive_step_size" title="Integration with Adaptive Step Size">Integration
with Adaptive Step Size</a>
@@ -491,15 +475,11 @@
with 4th order error estimation and coefficients introduced by Cash-Karp.
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">explicit_error_rk54_ck</span><span class="special">&lt;</span> <span class="identifier">state_type</span> <span class="special">&gt;</span> <span class="identifier">error_stepper_type</span><span class="special">;</span>
<span class="identifier">error_stepper_type</span> <span class="identifier">rk54</span><span class="special">;</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -524,16 +504,12 @@
stepper create by <code class="computeroutput"><span class="identifier">make_controlled_stepper_standard</span></code>.
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">controlled_error_stepper</span><span class="special">&lt;</span> <span class="identifier">error_stepper_type</span> <span class="special">&gt;</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>
<span class="identifier">integrate_adaptive</span><span class="special">(</span> <span class="identifier">controlled_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>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -557,7 +533,7 @@
The full cpp file for this example can be found here: <a href="../../../examples/harmonic_oscillator.cpp" target="_top">../../examples/harmonic_oscillator.cpp</a>
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.solar_system"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.solar_system" title="Solar system">Solar
system</a>
@@ -568,7 +544,7 @@
<dt><span class="section"><a href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.solar_system.define_the_system_function">Define
the system function</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.solar_system.gravitation_and_energy_conservation"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.solar_system.gravitation_and_energy_conservation" title="Gravitation and energy conservation">Gravitation
and energy conservation</a>
@@ -630,7 +606,7 @@
f( q<sub>&#8203;i</sub> )</em></span>.
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.solar_system.define_the_system_function"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.solar_system.define_the_system_function" title="Define the system function">Define
the system function</a>
@@ -640,9 +616,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>
<p>
</p>
<pre class="programlisting"><span class="comment">/*the point type */</span>
<span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
@@ -672,8 +646,6 @@
<span class="comment">//...
</span><span class="comment">// more operators
</span></pre>
<p>
</p>
<p>
</p>
<p>
@@ -682,9 +654,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>
<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>
@@ -693,8 +663,6 @@
<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span> <span class="identifier">point_type</span> <span class="special">,</span> <span class="identifier">n</span> <span class="special">&gt;</span> <span class="identifier">container_type</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span> <span class="keyword">double</span> <span class="special">,</span> <span class="identifier">n</span> <span class="special">&gt;</span> <span class="identifier">mass_type</span><span class="special">;</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -709,9 +677,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>
<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>
@@ -728,14 +694,10 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">solar_system_momentum</span>
<span class="special">{</span>
@@ -762,8 +724,6 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -779,9 +739,7 @@
apply here:
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">symplectic_rkn_sb3a_mclachlan</span><span class="special">&lt;</span> <span class="identifier">container_type</span> <span class="special">&gt;</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>
@@ -792,8 +750,6 @@
<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="number">0.0</span> <span class="special">,</span> <span class="number">200000.0</span> <span class="special">,</span> <span class="identifier">dt</span> <span class="special">,</span> <span class="identifier">streaming_observer</span><span class="special">(</span> <span class="identifier">cout</span> <span class="special">)</span> <span class="special">);</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -807,9 +763,7 @@
is also passed, but this is not a problem at all:
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">streaming_observer</span>
<span class="special">{</span>
@@ -827,8 +781,6 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -836,7 +788,7 @@
</p>
</div>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.chaotic_systems_and_lyapunov_exponents"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.chaotic_systems_and_lyapunov_exponents" title="Chaotic systems and Lyapunov exponents">Chaotic
systems and Lyapunov exponents</a>
@@ -845,7 +797,7 @@
blah blah
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.stiff_systems"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.stiff_systems" title="Stiff systems">Stiff
systems</a>
@@ -873,9 +825,7 @@
is needed. Here is the definition of the above example
</p>
<p>
</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">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</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">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</span> <span class="identifier">matrix_type</span><span class="special">;</span>
@@ -902,8 +852,6 @@
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -914,16 +862,16 @@
just templatize the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>:
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">stiff_system</span>
<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">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</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">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</span> <span class="identifier">matrix_type</span><span class="special">;</span>
<span class="keyword">struct</span> <span class="identifier">stiff_system</span>
<span class="special">{</span>
<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">State</span> <span class="special">&gt;</span>
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">State</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">State</span> <span class="special">&amp;</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="special">{</span>
<span class="special">...</span>
<span class="special">}</span>
<span class="special">};</span>
@@ -932,12 +880,9 @@
<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">State</span> <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Matrix</span> <span class="special">&gt;</span>
<span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">const</span> <span class="identifier">State</span> <span class="special">&amp;</span><span class="identifier">x</span> <span class="special">,</span> <span class="identifier">Matrix</span> <span class="special">&amp;</span><span class="identifier">J</span> <span class="special">,</span> <span class="keyword">const</span> <span class="keyword">double</span> <span class="special">&amp;</span><span class="identifier">t</span> <span class="special">,</span> <span class="identifier">State</span> <span class="special">&amp;</span><span class="identifier">dfdt</span> <span class="special">)</span>
<span class="special">{</span>
<span class="special">...</span>
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -953,34 +898,29 @@
all the other stepper:
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">rosenbrock4</span><span class="special">&lt;</span> <span class="keyword">double</span> <span class="special">&gt;</span> <span class="identifier">stepper_type</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">rosenbrock4_controller</span><span class="special">&lt;</span> <span class="identifier">stepper_type</span> <span class="special">&gt;</span> <span class="identifier">controlled_stepper_type</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">rosenbrock4_dense_output</span><span class="special">&lt;</span> <span class="identifier">controlled_stepper_type</span> <span class="special">&gt;</span> <span class="identifier">dense_output_type</span><span class="special">;</span>
<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>
<span class="identifier">size_t</span> <span class="identifier">num_of_steps</span> <span class="special">=</span> <span class="identifier">integrate_const</span><span class="special">(</span> <span class="identifier">controlled_stepper_type</span><span class="special">()</span> <span class="special">,</span>
<span class="identifier">size_t</span> <span class="identifier">num_of_steps</span> <span class="special">=</span> <span class="identifier">integrate_const</span><span class="special">(</span> <span class="identifier">dense_output_type</span><span class="special">()</span> <span class="special">,</span>
<span class="identifier">make_pair</span><span class="special">(</span> <span class="identifier">stiff_system</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">stiff_system_jacobi</span><span class="special">()</span> <span class="special">)</span> <span class="special">,</span>
<span class="identifier">x</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="number">50.0</span> <span class="special">,</span> <span class="number">0.01</span> <span class="special">,</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg2</span> <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg1</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="special">);</span>
</pre>
<p>
</p>
<p>
</p>
<p>
During the integration approximately XX steps have been done. Comparing to
During the integration approximately 71 steps have been done. Comparing to
a classical Runge-Kutta solver this is a very good result. For example the
Dormand-Prince 5 method with step size control and dense output yields ca.
XX steps.
1531 steps.
</p>
<p>
</p>
<p>
</p>
<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">explicit_error_dopri5</span><span class="special">&lt;</span> <span class="identifier">vector_type</span> <span class="special">&gt;</span> <span class="identifier">dopri5_type</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">controlled_error_stepper</span><span class="special">&lt;</span> <span class="identifier">dopri5_type</span> <span class="special">&gt;</span> <span class="identifier">controlled_dopri5_type</span><span class="special">;</span>
@@ -991,10 +931,7 @@
<span class="identifier">size_t</span> <span class="identifier">num_of_steps2</span> <span class="special">=</span> <span class="identifier">integrate_const</span><span class="special">(</span> <span class="identifier">dense_output_dopri5_type</span><span class="special">()</span> <span class="special">,</span>
<span class="identifier">stiff_system</span><span class="special">()</span> <span class="special">,</span> <span class="identifier">x2</span> <span class="special">,</span> <span class="number">0.0</span> <span class="special">,</span> <span class="number">50.0</span> <span class="special">,</span> <span class="number">0.01</span> <span class="special">,</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg2</span> <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg1</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span> <span class="special">);</span>
<span class="identifier">clog</span> <span class="special">&lt;&lt;</span> <span class="identifier">num_of_steps2</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
</pre>
<p>
</p>
<p>
</p>
<p>
@@ -1005,7 +942,7 @@
The full example can be found here: <a href="../../../examples/stiff_system.cpp" target="_top">../../examples/stiff_system.cpp</a>
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.odeint_in_detail"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.odeint_in_detail" title="Odeint in detail">Odeint
in detail</a>
@@ -1025,11 +962,14 @@
<p>
dense output
</p>
<p>
Algebras and operations
</p>
<p>
Overview and table
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics" title="Special topics">Special
topics</a>
@@ -1058,7 +998,7 @@
<dt><span class="section"><a href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.self_expanding_lattices">Self
expanding lattices</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.complex_state_types"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.complex_state_types" title="Complex state types">Complex
state types</a>
@@ -1073,7 +1013,7 @@
DNLS
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.lattice_systems"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.lattice_systems" title="Lattice systems">Lattice
systems</a>
@@ -1082,7 +1022,7 @@
Fermi-Pasta-Ulam system
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.partial_differential_equations"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.partial_differential_equations" title="Partial differential equations">Partial
differential equations</a>
@@ -1097,7 +1037,7 @@
Ginzburg-Landau
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.using_boost__units"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.using_boost__units" title="Using boost::units">Using
boost::units</a>
@@ -1106,7 +1046,7 @@
blah blah
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.using_cuda_and_thrust"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.using_cuda_and_thrust" title="Using Cuda and Thrust">Using
Cuda and Thrust</a>
@@ -1115,7 +1055,7 @@
blah blah
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.using_matrices_as_state_types"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.using_matrices_as_state_types" title="Using matrices as state types">Using
matrices as state types</a>
@@ -1124,11 +1064,11 @@
Expanding resizing
</p>
</div>
<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
<div class="section"><div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.ordinary_differential_equations_on_networks"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.ordinary_differential_equations_on_networks" title="Ordinary differential equations on networks">Ordinary
differential equations on networks</a>
</h4></div></div></div></div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.pass_by_value_or_by_reference"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.pass_by_value_or_by_reference" title="Pass by value or by reference">Pass
by value or by reference</a>
@@ -1137,7 +1077,7 @@
blah blah
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.using_boost__range"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.using_boost__range" title="Using boost::range">Using
boost::range</a>
@@ -1146,7 +1086,7 @@
blah blah
</p>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.using_arbitrary_precision_floating_point_types"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.using_arbitrary_precision_floating_point_types" title="Using arbitrary precision floating point types">Using
arbitrary precision floating point types</a>
@@ -1155,12 +1095,12 @@
GMP
</p>
</div>
<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
<div class="section"><div class="titlepage"><div><div><h4 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.special_topics.self_expanding_lattices"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.special_topics.self_expanding_lattices" title="Self expanding lattices">Self
expanding lattices</a>
</h4></div></div></div></div>
</div>
<div class="section" lang="en">
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_sandbox_numeric_odeint.tutorial.references"></a><a class="link" href="tutorial.html#boost_sandbox_numeric_odeint.tutorial.references" title="References">References</a>
</h3></div></div></div>
@@ -1217,7 +1157,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="getting_started.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="extend_odeint.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
<a accesskey="p" href="getting_started.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="extend_odeint.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -3,15 +3,15 @@
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Chapter&#160;1.&#160;boost.sandbox.numeric.odeint</title>
<link rel="stylesheet" href="boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="index.html" title="Chapter&#160;1.&#160;boost.sandbox.numeric.odeint">
<link rel="next" href="boost_sandbox_numeric_odeint/getting_started.html" title="Getting started">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr><td valign="top"></td></tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="boost_sandbox_numeric_odeint/getting_started.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
<div class="chapter" lang="en">
<div class="spirit-nav"><a accesskey="n" href="boost_sandbox_numeric_odeint/getting_started.html"><img src="images/next.png" alt="Next"></a></div>
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="odeint"></a>Chapter&#160;1.&#160;boost.sandbox.numeric.odeint</h2></div>
@@ -23,7 +23,7 @@
</h3></div></div>
<div><p class="copyright">Copyright &#169; 2009 -2011 Karsten Ahnert and Mario Mulansky</p></div>
<div><div class="legalnotice">
<a name="id358081"></a><p>
<a name="id563828"></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>
@@ -93,10 +93,10 @@
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: March 23, 2011 at 08:22:08 GMT</small></p></td>
<td align="left"><p><small>Last revised: March 31, 2011 at 16:36:47 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="boost_sandbox_numeric_odeint/getting_started.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
<div class="spirit-nav"><a accesskey="n" href="boost_sandbox_numeric_odeint/getting_started.html"><img src="images/next.png" alt="Next"></a></div>
</body>
</html>

View File

@@ -28,7 +28,7 @@ A well know solver for stiff systems is the so called Rosenbrock method. It has
[integrate_stiff_system]
During the integration approximately XX steps have been done. Comparing to a classical Runge-Kutta solver this is a very good result. For example the Dormand-Prince 5 method with step size control and dense output yields ca. XX steps.
During the integration approximately 71 steps have been done. Comparing to a classical Runge-Kutta solver this is a very good result. For example the Dormand-Prince 5 method with step size control and dense output yields ca. 1531 steps.
[integrate_stiff_system_alternative]

View File

@@ -79,10 +79,11 @@ int main( int argc , char **argv )
//[ integrate_stiff_system
typedef rosenbrock4< double > stepper_type;
typedef rosenbrock4_controller< stepper_type > controlled_stepper_type;
typedef rosenbrock4_dense_output< controlled_stepper_type > dense_output_type;
vector_type x( 3 , 1.0 );
size_t num_of_steps = integrate_const( controlled_stepper_type() ,
size_t num_of_steps = integrate_const( dense_output_type() ,
make_pair( stiff_system() , stiff_system_jacobi() ) ,
x , 0.0 , 50.0 , 0.01 ,
cout << phoenix::arg_names::arg2 << " " << phoenix::arg_names::arg1[0] << "\n" );
@@ -101,8 +102,9 @@ int main( int argc , char **argv )
size_t num_of_steps2 = integrate_const( dense_output_dopri5_type() ,
stiff_system() , x2 , 0.0 , 50.0 , 0.01 ,
cout << phoenix::arg_names::arg2 << " " << phoenix::arg_names::arg1[0] << "\n" );
clog << num_of_steps2 << endl;
//]
clog << num_of_steps2 << endl;
return 0;
}