mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-27 11:00:32 -04:00 
			
		
		
		
	
		
			
	
	
		
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | /*
 | ||
|  |  Copyright 2011-2012 Mario Mulansky | ||
|  |  Copyright 2012-2013 Karsten Ahnert | ||
|  | 
 | ||
|  |  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)
 | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | /* example showing how odeint can be used with std::list */ | ||
|  | 
 | ||
|  | #include <iostream>
 | ||
|  | #include <cmath>
 | ||
|  | #include <list>
 | ||
|  | 
 | ||
|  | #include <boost/numeric/odeint.hpp>
 | ||
|  | 
 | ||
|  | //[ list_bindings
 | ||
|  | typedef std::list< double > state_type; | ||
|  | 
 | ||
|  | namespace boost { namespace numeric { namespace odeint { | ||
|  | 
 | ||
|  | template< > | ||
|  | struct is_resizeable< state_type > | ||
|  | { // declare resizeability
 | ||
|  |     typedef boost::true_type type; | ||
|  |     const static bool value = type::value; | ||
|  | }; | ||
|  | 
 | ||
|  | template< >  | ||
|  | struct same_size_impl< state_type , state_type > | ||
|  | { // define how to check size
 | ||
|  |     static bool same_size( const state_type &v1 , | ||
|  |                            const state_type &v2 ) | ||
|  |     { | ||
|  |         return v1.size() == v2.size(); | ||
|  |     } | ||
|  | }; | ||
|  | 
 | ||
|  | template< > | ||
|  | struct resize_impl< state_type , state_type > | ||
|  | { // define how to resize
 | ||
|  |     static void resize( state_type &v1 , | ||
|  |                         const state_type &v2 ) | ||
|  |     { | ||
|  |         v1.resize( v2.size() ); | ||
|  |     } | ||
|  | }; | ||
|  | 
 | ||
|  | } } }  | ||
|  | //]
 | ||
|  | 
 | ||
|  | void lattice( const state_type &x , state_type &dxdt , const double /* t */ ) | ||
|  | { | ||
|  |     state_type::const_iterator x_begin = x.begin(); | ||
|  |     state_type::const_iterator x_end = x.end(); | ||
|  |     state_type::iterator dxdt_begin = dxdt.begin(); | ||
|  |      | ||
|  |     x_end--; // stop one before last
 | ||
|  |     while( x_begin != x_end ) | ||
|  |     { | ||
|  |         *(dxdt_begin++) = std::sin( *(x_begin) - *(x_begin++) ); | ||
|  |     } | ||
|  |     *dxdt_begin = sin( *x_begin - *(x.begin()) ); // periodic boundary
 | ||
|  | } | ||
|  | 
 | ||
|  | using namespace boost::numeric::odeint; | ||
|  | 
 | ||
|  | int main() | ||
|  | { | ||
|  |     const int N = 32; | ||
|  |     state_type x; | ||
|  |     for( int i=0 ; i<N ; ++i ) | ||
|  |         x.push_back( 1.0*i/N ); | ||
|  | 
 | ||
|  |     integrate_const( runge_kutta4< state_type >() , lattice , x , 0.0 , 10.0 , 0.1 ); | ||
|  | } |