3

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を使用しています。

4

1 に答える 1

0

残念ながら、この機能は現在 odeint の github バージョンにのみ存在します。

ところで。問題トラッカーで同じトピックについて議論しており、実際にあなたの問題や同様の問題に対する実際の解決策があります. しかし、この解決策はまだ完成していません。

于 2013-08-29T05:49:14.657 に答える