Я только начал использовать import solve_ivp from scipy.integrate
, помощь по которому здесь . Это решает начальные задачи вида y'(t) = fun(t,y)
с y(t0) = y0
. Основной вызов функции c выглядит следующим образом:
sol = solve_ivp(fun,[t0,tf],y0)
, и существует множество дополнительных параметров. Можно обратиться к массивам времени и значений решения с помощью sol.t
и sol.y
.
Теперь я хотел бы сделать следующее: Есть несколько разреженных временных точек, где я хочу принудительно использовать решатель иметь точку сетки. Однако я не хочу, чтобы сетка состояла только из этих точек. Шаги, которые использует решатель, должны быть намного меньше. Т.е. мне нужна точная сетка, которую выбирает решатель, но я хочу несколько раз выбрать вишню, которая будет добавлена в эту сетку.
Есть два необязательных аргумента, которые, я думал, могли бы сделать эту работу:
- Аргумент
t_eval
… в котором просто передается решающему массив времени, который будет совпадать с sol.t
. Однако я не уверен, является ли это полной сеткой или именно тем, что я хочу.
аргумент
events
… где можно указать событие, и точки данных автоматически сохраняются при возникновении события. Я мог бы установить в качестве события, что время равно точкам, которые я хочу, и это должно работать. Однако это кажется немного громоздким, и я также не уверен, насколько точным тогда будет алгоритм поиска root. Поэтому я предпочел бы вариант 1, но я не уверен, что это делает то, что я хочу.
Кто-нибудь из вас знает, возможно?