0

current_stateboost::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);

しかし、これが本当に最善の戦略なのか、それともステッパーの内部状態 (現在のステップサイズや誤差の見積もりなど) を失っているのかは不明です。

4

1 に答える 1

1

使用する

stepper.initialize(x, stepper.current_time(), 0.01);

絶対に大丈夫です。この場合、内部状態は正しく設定されています。

于 2013-01-23T16:32:08.980 に答える