如何使用odeint处理不连续性

时间:2013-08-29 02:55:40

标签: c++ boost odeint

我想知道使用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。

1 个答案:

答案 0 :(得分:0)

不幸的是,此功能目前只出现在odeint的github版本中。

顺便说一下。我们在issue tracker上讨论了同一主题,我们实际上已经解决了您的问题和类似的问题。但是这个解决方案现在还没有完成。