scipy.integrate.odeint时间依存步长

时间:2019-03-14 13:35:50

标签: scipy integrate odeint timestep

我有以下问题:

我必须使用ode-solver来解决化学反应方程式。速率常数是时间的函数,并且可能会突然变化(放电脉冲)。

解决此问题的一种方法是使步长保持很小hmax < dt。这导致较高的补偿。努力->耗时。我的问题是:是否有一种有效的方法来完成这项工作?我想到了def hmax(puls_ON)plus_ON=True之间的脉冲和plus_ON=False之间的脉冲。但是,由于dt随时间增加,所以由于时间间隔在不断增长,hmax = hmax(t)甚至无法识别脉冲。

时间网格将是我的最佳选择,但我认为odeint不可能做到这一点吗?

或者是否可能以某种方式强制求解器在特定的时间点进行积分(例如t0->(hmax = False)-> tpuls_1_start->(hmax = dt)-> tpuls_1_end->(hmax = False) -> puls_2_start .....)?

thx

1 个答案:

答案 0 :(得分:0)

对于tcrit,您可以尝试使用可选参数odeint

  

应注意整合的关键点(例如奇异点)的向量。

我不知道它的实际作用,但这可能有助于避免简单地超越脉搏。

如果这不起作用,您当然可以手动将积分拆分为不同的时间间隔。积分直到您的tpuls_1_start。然后使用上一个结果作为初始值重新开始集成。