Python: scipy.integrate.solve_ivp; как указать несколько временных точек, которые должны l ie на (гораздо более тонкой) сетке решения - PullRequest
0 голосов
/ 02 мая 2020

Я только начал использовать 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.

Теперь я хотел бы сделать следующее: Есть несколько разреженных временных точек, где я хочу принудительно использовать решатель иметь точку сетки. Однако я не хочу, чтобы сетка состояла только из этих точек. Шаги, которые использует решатель, должны быть намного меньше. Т.е. мне нужна точная сетка, которую выбирает решатель, но я хочу несколько раз выбрать вишню, которая будет добавлена ​​в эту сетку.

Есть два необязательных аргумента, которые, я думал, могли бы сделать эту работу:

  1. Аргумент t_eval

… в котором просто передается решающему массив времени, который будет совпадать с sol.t. Однако я не уверен, является ли это полной сеткой или именно тем, что я хочу.

аргумент events

… где можно указать событие, и точки данных автоматически сохраняются при возникновении события. Я мог бы установить в качестве события, что время равно точкам, которые я хочу, и это должно работать. Однако это кажется немного громоздким, и я также не уверен, насколько точным тогда будет алгоритм поиска root. Поэтому я предпочел бы вариант 1, но я не уверен, что это делает то, что я хочу.

Кто-нибудь из вас знает, возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...