用c ++及时向后解决一个ODE系统

时间:2016-05-26 17:22:08

标签: c++ boost odeint

不幸的是,我注意到BOOST的odeint无法及时向后解决ODE系统,即当我改变条件以便

typedef std::vector< double > state_type;

void ode_function(const state_type &x, state_type &dxdt, const double     
{
dxdt[0] = x[0];
}

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

state_type x(1);
x[0] = std::exp(1); 


runge_kutta4< state_type > stepper;
integrate_const(stepper, ode_function, x, 1., 0., 0.01);

cout << x[0] << endl;

这实际上什么也没做,并且返回初始条件不变。在这个简单的例子中,可以通过改变变量s = -t来解决这个问题。但是,我不确定这个技巧是否适用于任何ODE系统。当我在我的程序中使用它时,我不确定它是否给出了正确的结果。 因此,有没有人知道任何允许后向时间集成的c ++库?

1 个答案:

答案 0 :(得分:3)

在odeint中

如果要及时向后集成,还必须使用负步长。在你的情况下,你应该使用-0.01作为integrate_const函数中的最后一个参数。