scipy.integrate.odeint зависит от времени шага
У меня есть следующая проблема:
Я должен использовать оду-решатель, чтобы решить уравнение химической реакции. Константы скорости являются функциями времени и могут внезапно меняться (импульсы от электрического разряда).
Один из способов решить эту проблему - сохранить размер шага очень маленьким 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.....)?
Спасибо
1 ответ
Есть необязательный параметр tcrit
для odeint
что вы могли бы попробовать:
Вектор критических точек (например, особенностей), где следует проявлять осторожность при интеграции.
Я не знаю, что он на самом деле делает, но это может помочь не просто перешагнуть через пульс.
Если это не работает, вы, конечно, можете вручную разбить вашу интеграцию на разные интервалы. Интегрировать, пока ваш tpuls_1_start
, Затем перезапустите интеграцию, используя результаты предыдущего в качестве начальных значений.