我有以下问题:
我必须使用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
答案 0 :(得分:0)
对于tcrit
,您可以尝试使用可选参数odeint
:
应注意整合的关键点(例如奇异点)的向量。
我不知道它的实际作用,但这可能有助于避免简单地超越脉搏。
如果这不起作用,您当然可以手动将积分拆分为不同的时间间隔。积分直到您的tpuls_1_start
。然后使用上一个结果作为初始值重新开始集成。