2016-05-26 6 views
0

Leider habe ich das BOOST des odeint bemerkte in der Zeit, dh ein System von ODEs rückwärts nicht lösen kann, wenn ich die Bedingungen ändern, so dassein System von Differentialgleichungen in der Zeit zurück in c Lösen ++

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; 

Dieser in der Tat nichts tut und gibt den ursprünglichen Zustand unverändert zurück. Bei diesem einfachen Beispiel ist es möglich, dies zu lösen, indem man die Variablen s = -t ändert. Ich bin mir jedoch nicht sicher, ob dieser Trick für irgendein System von ODEs gut funktioniert. Wenn ich es in meinem Programm verwende, bin ich nicht sicher, ob es die richtigen Ergebnisse liefert. Kennt jemand eine C++ - Bibliothek, die Rückwärtszeitintegration ermöglicht?

Antwort

3

in Odein, wenn Sie rückwärts in der Zeit integrieren möchten, müssen Sie auch eine negative Schrittgröße verwenden. In Ihrem Fall sollten Sie -0.01 als letzten Parameter in der Funktion integrate_const verwenden.