| /* |
| libs/numeric/odeint/examples/stochastic_euler.hpp |
| |
| Copyright 2012 Karsten Ahnert |
| Copyright 2012-2013 Mario Mulansky |
| Copyright 2013 Pascal Germroth |
| |
| Stochastic euler stepper example and Ornstein-Uhlenbeck process |
| |
| Distributed under the Boost Software License, Version 1.0. |
| (See accompanying file LICENSE_1_0.txt or |
| copy at http://www.boost.org/LICENSE_1_0.txt) |
| */ |
| |
| #include <boost/array.hpp> |
| |
| #include <boost/numeric/odeint.hpp> |
| |
| typedef boost::array< double , 1 > state_type; |
| |
| using namespace boost::numeric::odeint; |
| |
| |
| //[ generation_functions_own_steppers |
| class custom_stepper |
| { |
| public: |
| |
| typedef double value_type; |
| // ... |
| }; |
| |
| class custom_controller |
| { |
| // ... |
| }; |
| |
| class custom_dense_output |
| { |
| // ... |
| }; |
| //] |
| |
| |
| //[ generation_functions_get_controller |
| namespace boost { namespace numeric { namespace odeint { |
| |
| template<> |
| struct get_controller< custom_stepper > |
| { |
| typedef custom_controller type; |
| }; |
| |
| } } } |
| //] |
| |
| //[ generation_functions_controller_factory |
| namespace boost { namespace numeric { namespace odeint { |
| |
| template<> |
| struct controller_factory< custom_stepper , custom_controller > |
| { |
| custom_controller operator()( double abs_tol , double rel_tol , const custom_stepper & ) const |
| { |
| return custom_controller(); |
| } |
| |
| custom_controller operator()( double abs_tol , double rel_tol , double max_dt , |
| const custom_stepper & ) const |
| { |
| // version with maximal allowed step size max_dt |
| return custom_controller(); |
| } |
| }; |
| |
| } } } |
| //] |
| |
| int main( int argc , char **argv ) |
| { |
| { |
| typedef runge_kutta_dopri5< state_type > stepper_type; |
| |
| /* |
| //[ generation_functions_syntax_auto |
| auto stepper1 = make_controlled( 1.0e-6 , 1.0e-6 , stepper_type() ); |
| // or with max step size limit: |
| // auto stepper1 = make_controlled( 1.0e-6 , 1.0e-6 , 0.01, stepper_type() ); |
| |
| auto stepper2 = make_dense_output( 1.0e-6 , 1.0e-6 , stepper_type() ); |
| //] |
| */ |
| |
| //[ generation_functions_syntax_result_of |
| boost::numeric::odeint::result_of::make_controlled< stepper_type >::type stepper3 = make_controlled( 1.0e-6 , 1.0e-6 , stepper_type() ); |
| (void)stepper3; |
| boost::numeric::odeint::result_of::make_dense_output< stepper_type >::type stepper4 = make_dense_output( 1.0e-6 , 1.0e-6 , stepper_type() ); |
| (void)stepper4; |
| //] |
| } |
| |
| { |
| /* |
| //[ generation_functions_example_custom_controller |
| auto stepper5 = make_controlled( 1.0e-6 , 1.0e-6 , custom_stepper() ); |
| //] |
| */ |
| |
| boost::numeric::odeint::result_of::make_controlled< custom_stepper >::type stepper5 = make_controlled( 1.0e-6 , 1.0e-6 , custom_stepper() ); |
| (void)stepper5; |
| } |
| return 0; |
| } |