scipy.odeint
允许用户指定必须将状态添加到输出状态历史记录的时间。scipy.odeint
是一个可变的timestep积分器,其一个线性调用如下所示(状态从初始条件X0
集成,并在times
中指定的时间内插/存储)
X = scipy.odeint(dxdt,X0,times,atol = 1e-13,rtol = 1e-13)
其中X
是一个矩阵,它的行数与times
中的元素数相同
基本上,我在boost::odeint
中寻找一个类似的特性,以便做两件事:
t0
传播到tf
,但只检索状态的最终值。我想如果内部时间满足t == tf
,我可以编写一个只存储状态的观察器,但这看起来是一个相当丑陋的黑客。如果我想让积分器选择适当的内部时间步来满足容差值,那么存储中间状态是一个不必要的负担。你知道吗t0
传播到tf
,但在预先指定的时间存储状态,这些时间不一定均匀分布,方式与上面对scipy.odeint
的调用类似,同时也让积分器选择适当的内部时间步。你知道吗我最接近实现这一目标的方法是
size_t steps = integrate_adaptive( make_controlled< error_stepper_type >( 1.0e-10 , 1.0e-16 ) ,
dynamics , x , 0.0 , 10.0 , 1. , push_back_state_and_time( x_vec , times ));
虽然满足了公差,但所有状态都由观察者存储到x_vec
,而不让我指定存储时间。你知道吗
我该怎么办?你知道吗
似乎您正在寻找^{} 函数:
它允许您指定调用观察者的精确时间范围,如有必要,可以调整步长以精确到达每个时间步长。你知道吗
特别是对于自适应方法,这非常有用,因为它在指定的精确时间计算解,同时仍然控制时间步长不超过错误界限。你知道吗
所以你现在的电话可以改成
相关问题 更多 >
编程相关推荐