我创建了一个boost :: odeint步进器,如下所示:
auto stepper=boost::numeric::odeint::make_dense_output(0.01/*Absolute*/,0.1/*Relative*/, boost::numeric::odeint::runge_kutta_dopri5< CombinedState >() );
在我的系统集成期间,有时候它会“低位”一段时间。在此期间,似乎积分器有时会将其步长增加到它跳过感兴趣区域的程度。
有没有办法限制积分器的步长,以便它永远不会超过给定的最大值?
答案 0 :(得分:2)
对不起,但目前无法做到这一点。但是,如果此功能对您非常重要,只需将controlled_runge_kutta复制到具有不同名称的步进器(如max_dt_controlled_runge_kutta),然后手动插入最大时间步长检查。代码不是太复杂。你只需要做两次,因为有两个special_runge_kutta的特化。
如果有问题,请告诉我。