Boost 在odeint中设置最大步长

Boost 在odeint中设置最大步长,boost,numerical-integration,odeint,Boost,Numerical Integration,Odeint,我创建了一个boost::odeint步进器,如下所示: auto stepper=boost::numeric::odeint::make_dense_output(0.01/*Absolute*/,0.1/*Relative*/, boost::numeric::odeint::runge_kutta_dopri5< CombinedState >() ); auto-stepper=boost::numeric::odeint::make_density_输出(0.01/*绝

我创建了一个boost::odeint步进器,如下所示:

auto stepper=boost::numeric::odeint::make_dense_output(0.01/*Absolute*/,0.1/*Relative*/, boost::numeric::odeint::runge_kutta_dopri5< CombinedState >() );
auto-stepper=boost::numeric::odeint::make_density_输出(0.01/*绝对*/,0.1/*相对*/,boost::numeric::odeint::runge_kutta_dopri5());
在我的系统集成过程中,有时它会“处于低位”一段时间。在这段时间里,积分器似乎有时会将其步长增大到跳过感兴趣区域的程度


有没有办法限制积分器的步长,使其永远不会超过给定的最大值?

很抱歉,但这在目前是不可能的。不过,如果此功能对您来说非常重要,只需将受控的_runge_kutta复制到具有不同名称(如max_dt_受控的_runge_kutta)的步进机上,然后手动插入最长时间步长的检查。代码并不太复杂。你只需要做两次,因为有两个专门的受控龙格库塔

如果有问题,请告诉我。

您的意思是,如果dt>dt\u max,则类控制的runte\u kutta中的try\u step()函数应该失败吗?你说两次是什么意思?更改类声明就足够了吗?为什么我要接触专门化?是的,如果dt>dt_max,try_step()应该失败。我的意思是,存在两种受控的_runge_kutta专门化,一种用于“经典”步进机,如cash_karp,另一种用于类似fsal的dopri5步进机。但你是对的,也许一门课就足够了,可以同时适用于两个专业。