C++

2016-05-26 5 views
0

に時間を逆方向にして常微分方程式のシステムを解くことは残念ながら、私はこれは実際には何もしませんC++

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; 

ように、私は条件を変更したときBOOSTのodeintは、時間すなわち後方のODEのシステムを解くことができないことに気づきました変更されていない初期条件を返します。この簡単な例の場合、変数s = -tを変更することでこれを解くことができます。しかし、このトリックがODEのどのシステムでもうまく機能するかどうかはわかりません。自分のプログラムで使用するとき、正しい結果が得られるかどうかはわかりません。 したがって、後方互換性のあるC++ライブラリを知っている人はいますか?

答えて

3

in odeint逆方向に統合する場合は、負のステップサイズも使用する必要があります。あなたの場合は、integrate_const関数の最後のパラメータとして-0.01を使用する必要があります。