scipy.integrate.odeint зависит от времени шага - PullRequest
1 голос
/ 14 марта 2019

У меня следующая проблема:

Я должен использовать решатель оды, чтобы решить уравнение химической реакции.Константы скорости являются функциями времени и могут внезапно меняться (импульсы от электрического разряда).

Один из способов решить эту проблему - сохранить размер шага очень маленьким 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= Неверно) -> puls_2_start .....)?

thx

1 Ответ

0 голосов
/ 18 марта 2019

Существует необязательный параметр tcrit для odeint, который вы можете попробовать:

Вектор критических точек (например, сингулярностей), где следует проявлять осторожность при интеграции.

Я не знаю, что он на самом деле делает, но это может помочь не просто перешагнуть через пульс.

Если это не сработает, вы, конечно, можете вручную разбить вашу интеграцию на разные интервалы. Интегрировать, пока ваш tpuls_1_start. Затем перезапустите интеграцию, используя результаты предыдущего в качестве начальных значений.

...