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 回答