diff options
Diffstat (limited to 'src/boost/libs/numeric/odeint/examples/stuart_landau.cpp')
-rw-r--r-- | src/boost/libs/numeric/odeint/examples/stuart_landau.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/boost/libs/numeric/odeint/examples/stuart_landau.cpp b/src/boost/libs/numeric/odeint/examples/stuart_landau.cpp new file mode 100644 index 00000000..84f9b04d --- /dev/null +++ b/src/boost/libs/numeric/odeint/examples/stuart_landau.cpp @@ -0,0 +1,87 @@ +/* + * stuart_landau.cpp + * + * This example demonstrates how one can use odeint can be used with state types consisting of complex variables. + * + * Copyright 2011-2012 Karsten Ahnert + * Copyright 2011-2013 Mario Mulansky + * 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 <iostream> +#include <complex> +#include <boost/array.hpp> + +#include <boost/numeric/odeint.hpp> + +using namespace std; +using namespace boost::numeric::odeint; + +//[ stuart_landau_system_function +typedef complex< double > state_type; + +struct stuart_landau +{ + double m_eta; + double m_alpha; + + stuart_landau( double eta = 1.0 , double alpha = 1.0 ) + : m_eta( eta ) , m_alpha( alpha ) { } + + void operator()( const state_type &x , state_type &dxdt , double t ) const + { + const complex< double > I( 0.0 , 1.0 ); + dxdt = ( 1.0 + m_eta * I ) * x - ( 1.0 + m_alpha * I ) * norm( x ) * x; + } +}; +//] + + +/* +//[ stuart_landau_system_function_alternative +double eta = 1.0; +double alpha = 1.0; + +void stuart_landau( const state_type &x , state_type &dxdt , double t ) +{ + const complex< double > I( 0.0 , 1.0 ); + dxdt = ( 1.0 + m_eta * I ) * x - ( 1.0 + m_alpha * I ) * norm( x ) * x; +} +//] +*/ + + +struct streaming_observer +{ + std::ostream& m_out; + + streaming_observer( std::ostream &out ) : m_out( out ) { } + + template< class State > + void operator()( const State &x , double t ) const + { + m_out << t; + m_out << "\t" << x.real() << "\t" << x.imag() ; + m_out << "\n"; + } +}; + + + + +int main( int argc , char **argv ) +{ + //[ stuart_landau_integration + state_type x = complex< double >( 1.0 , 0.0 ); + + const double dt = 0.1; + + typedef runge_kutta4< state_type > stepper_type; + + integrate_const( stepper_type() , stuart_landau( 2.0 , 1.0 ) , x , 0.0 , 10.0 , dt , streaming_observer( cout ) ); + //] + + return 0; +} |