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