Можно ли получить доступ к массиву решений на каждом временном шаге с помощью solve_ivp? - PullRequest
0 голосов
/ 25 апреля 2020

Я использую solve_ivp из scipy.integrate для решения системы уравнений, заданной как,

Xdot = A*X + B*U, где X - массив размером 4*1.

def func(t,X):        
    Xdot=A*X+B*U
    return Xdot

И используя решатель в качестве

solv = solve_ivp(convf, tspan,Z0,method='BDF')
time_value=solv.t
solution_array=sol.y

Можно ли получить доступ к массиву решений solution_array на каждом временном шаге, соответствующем time_value, для любых манипуляций, пока решатель работает во время tspan

1 Ответ

0 голосов
/ 27 апреля 2020

Аргумент t_eval позволяет получить решение для разных временных точек.

Пример из документов:

from scipy.integrate import solve_ivp
def exponential_decay(t, y): return -0.5 * y 

sol = solve_ivp(exponential_decay, [0, 10], [2, 4, 8])

sol.t
>>> array([ 0.        ,  0.11487653,  1.26364188,  3.06061781,  4.81611105,
    6.57445806,  8.33328988, 10.        ])

По умолчанию решатель возвращает произвольные моменты времени. Таким образом, добавив аргумент t_eval, чтобы получить решения в определенные пользователем моменты времени:

t = np.linspace(0, 10, 50)
sol = solve_ivp(exponential_decay, [0, 10], [2, 4, 8], t_eval=t)

sol.t == t
>>> True

И решения в моменты времени sol.t доступны sol.y, как и раньше.

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