我想知道使用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。
答案 0 :(得分:0)
不幸的是,此功能目前只出现在odeint的github版本中。
顺便说一下。我们在issue tracker上讨论了同一主题,我们实际上已经解决了您的问题和类似的问题。但是这个解决方案现在还没有完成。