1

我有以下问题:

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

解决这个问题的一种方法是保持步长非常小hmax < dt。这导致高补偿。afort -> 耗时。我的问题是:有没有一种有效的方法来完成这项工作?我想过要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 ......)?

谢谢

4

1 回答 1

0

您可以尝试一个可选参数tcritodeint

应注意积分的关键点(例如奇点)向量。

我不知道它实际上做了什么,但它可能有助于不要简单地跨过脉搏。

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

于 2019-03-18T14:13:12.427 回答