使用odeint的简单2d系统(使用数组)不能编译

时间:2014-03-20 11:33:56

标签: c++ arrays boost vector odeint

我在Mint 12上使用boost 1.55运行g ++ 4.7。我试图用odeint解决一个简单的2d ode系统 - 按照这里的1d示例:1d。第1个示例在原始版本和修订版本的答案中编译正常。现在,如果我想要一个2d系统而且我使用double [2]则不起作用:

#include <iostream>
#include <boost/numeric/odeint.hpp>

using namespace std;
using namespace boost::numeric::odeint;

void rhs( const double *x, double *dxdt, const double t )
{
    dxdt[0] = 3.0/(2.0*t*t) + x[0]/(2.0*t);
    dxdt[1] = 3.0/(2.0*t*t) + x[1]/(2.0*t);
}

void write_cout( double *x, const double t )
{
    cout << t << '\t' << x[0] << '\t' << 2*x[1] << endl;
}

typedef runge_kutta_cash_karp54< double[2] > stepper_type;

int main()
{
    double x[2] = {0.0,0.0};
    integrate_adaptive( make_controlled( 1E-12, 1E-12, stepper_type() ), rhs, x, 1.0, 10.0, 0.1, write_cout );
}

错误消息很乱,但以:

结尾
  

/usr/include/boost/numeric/odeint/algebra/range_algebra.hpp:129:47:错误:函数返回一个数组

数组加倍[2]问题?我该如何解决?也许使用矢量?顺便说一下,我尝试了两个

typedef runge_kutta_cash_karp54< double > stepper_type;

typedef runge_kutta_cash_karp54< double , double , double , double , vector_space_algebra > stepper_type;
正如1d答案中所建议的那样,但无济于事。我还应该提一下,在旧机器上使用较旧的增强功能(不记得哪个版本),所有编译都没有问题。谢谢你的任何建议!

1 个答案:

答案 0 :(得分:1)

使用std :: array&lt; double,2&gt;

#include <array>

typedef std::array< double , 2 > state_type;
void rhs( state_type const &x, state_type &dxdt, const double t )
{
    dxdt[0] = 3.0/(2.0*t*t) + x[0]/(2.0*t);
    dxdt[1] = 3.0/(2.0*t*t) + x[1]/(2.0*t);
}

void write_cout( state_type const& x, const double t )
{
    cout << t << '\t' << x[0] << '\t' << 2*x[1] << endl;
}

typedef runge_kutta_cash_karp54< state_type > stepper_type;