I try to run odeint examples in boost_1_54_0 on Debian Squeeze g++4.4
Lorenz system works fine, but Simple 1d ode:
#include <iostream>
#include <boost/numeric/odeint.hpp>
using namespace std;
using namespace boost::numeric::odeint;
/* we solve the simple ODE x' = 3/(2t^2) + x/(2t)
* with initial condition x(1) = 0.
* Analytic solution is x(t) = sqrt(t) - 1/t
*/
void rhs( const double x , double &dxdt , const double t )
{
dxdt = 3.0/(2.0*t*t) + x/(2.0*t);
}
void write_cout( const double &x , const double t )
{
cout << t << '\t' << x << endl;
}
// state_type = double
typedef runge_kutta_dopri5< double > stepper_type;
int main()
{
double x = 0.0;
//with the following line commented the program compiles
integrate_adaptive( make_controlled( 1E-12 , 1E-12 , stepper_type() ) ,
rhs , x , 1.0 , 10.0 , 0.1 , write_cout );
}
doesn't compile. There are 192 lines of errors that end with:
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘end(double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(const double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(const double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(double&)’
/usr/local/include/boost/numeric/odeint/algebra/range_algebra.hpp:76: error: no matching function for call to ‘begin(double&)’
What's the problem?
The example on the webpage is only running with the github version of odeint. If you change the stepper type to
typedef runge_kutta_dopri5< double , double , double , double , vector_space_algebra > stepper_type;
it should run. We have included a automatic algebra detection mechanism which is not in the official boost version but which will be included very soon.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With