odeint を使用して不連続性を処理するための最良の (計算効率が高く、見栄えの良いコード) 方法を知りたいです。サンプルコードはありますか?
ロータリーエンコーダーによって角度がデジタル的に測定されるフィードバック制御モーターのようなものをシミュレートしています。ロータリー エンコーダの出力 y は、y=floor(angle) のようにモデル化できます。ここで、角度は実数です。
概念的には、何をすべきかはわかっています。シミュレーション中に、角度が整数値と交差する時間を見つけてから、前のステップに戻り、その交差時間まで積分し、不連続性に従って状態 y を調整し、同じ点から積分を再開する必要があります。時間。
いくつかのグーグルの後、私は以下のコードを見つけました。しかし、ライブラリで使用できる関数 make_const_step_time_range が見つかりません。
http://meetingcpp.com/tl_files/mcpp/slides/12/odeint.pdfの 18 ページ:
auto iter = boost::find_if(
make_const_step_time_range(rk4,ode, x, t1, t2, dt),
[](const std::pair< state_type &, double> &x) {
return ( x.first[0] < 0.0 ); } );
私はboost_1_54_0を使用しています。