Решение системы ОДУ в обратном направлении во времени в С++

К сожалению, я заметил, что одеинт BOOST не может решить систему ОДУ назад во времени, т.е. когда я изменяю условия так, чтобы

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. Однако я не уверен, что этот трюк хорошо работает для любой системы ОДУ. Когда я использую его в своей программе, я не уверен, что он дает правильные результаты. Поэтому кто-нибудь знает какую-нибудь библиотеку С++, которая позволяет интегрировать обратное время?


person Revist    schedule 26.05.2016    source источник


Ответы (1)


в odeint, если вы хотите интегрировать назад во времени, вы также должны использовать отрицательный размер шага. в вашем случае вы должны использовать -0.01 в качестве последнего параметра в функцииintegr_const.

person mariomulansky    schedule 26.05.2016