current_state
boost::odeint でステッパーのを設定したいと思います。
私は次のMWEを持っています:
#include <queue>
#include <boost/numeric/odeint.hpp>
#include <array>
typedef std::array< double , 2 > state_type;
void eqsys(const state_type &x, state_type &dxdt, double t) {
dxdt[0] = 0.3*x[1];
dxdt[1] = 4*x[0];
}
int main() {
int steps=0;
auto stepper=make_dense_output(1.0e-6,1.0e-6,boost::numeric::odeint::runge_kutta_dopri5< state_type >() );
state_type x={2,2};
double stoptime=10;
stepper.initialize(x,0,0.01);
while(true){
//Run stepper
while( stepper.current_time()<stoptime && steps<10000 ) {
stepper.do_step(eqsys);
++steps;
}
x=stepper.current_state();
x[0]=2;
stepper.set_current_state(x);
stoptime+=10;
}
}
行stepper.set_current_state(x);
は機能しないものです。これを達成するために使用できるコマンドはありますか?
おそらく次のものを使用できることに気づきました:
stepper.initialize(x, stepper.current_time(), 0.01);
しかし、これが本当に最善の戦略なのか、それともステッパーの内部状態 (現在のステップサイズや誤差の見積もりなど) を失っているのかは不明です。