Каков R-эквивалент функции solve_ivp() в Python?

#python #r #scipy #ode #runge-kutta

#python #r #scipy #ode #рунге-кутта

Вопрос:

Я перевожу некоторый код с Python на R, и мне трудно найти соответствующие функции в каждом. В данном конкретном случае код, с которым у меня возникли проблемы, является:

 x_sol_best = solve_ivp(
                    fun=model_covid,
                    y0=x_0_cases,
                    t_span=[t_predictions[0], t_predictions[-1]],
                    t_eval=t_predictions,
                    args=tuple(optimal_params),
                ).y
  

Из scipy.integrate.solve_ivp документации я вижу, что в этой функции используется метод интеграции по умолчанию: ‘RK45’ (по умолчанию): Явный метод Рунге-Кутты порядка 5 (4)

Какие пакеты / функции в R были бы эквивалентны этому?

Из документации R ode функции в R я вижу, что существует ряд доступных методов RK 4 (5) (вставлено ниже), но в документации Python указано, что RK45 имеет порядок 5 (4)…

Кто-нибудь может предложить какие-либо разъяснения? TIA

 "rk45ck"    |   Runge-Kutta Cash-Karp, order 4(5)
"rk45f" |   Runge-Kutta-Fehlberg, order 4(5); Octave: ode45, pair=1
"rk45e" |   Runge-Kutta-England, order 4(5)
"rk45dp6"   |   Dormand-Prince, order 4(5), local order 6
"rk45dp7", "ode45"  |   Dormand-Prince 4(5), local order 7
  

Комментарии:

1. Я думаю lsoda , в R эквивалентно solve_ivp() в python rdocumentation.org/packages/deSolve/versions/1.28/topics/lsoda

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

Ответ №1:

Согласно документации, решателем по умолчанию solve_ivp() является Dormand-Prince . Это вызывается ode45 в ode() функции deSolve пакета.

 x_sol_best = deSolve::ode(
                    y = x_0_cases,
                    times = t_predictions,
                    func = model_covid,
                    parms = c(...), # vector of parameter values
                    method = "ode45"
                )[ , -1] # drop the t column
  

Комментарии:

1. спасибо, Саймон — Dormand-Prince и RK45 — это одно и то же? Или я просматривал неправильную документацию? в этой ссылке указано, что методом по умолчанию является RK45 : docs.scipy.org/doc/scipy/reference/generated /…

2. Если вы нажмете на маленький [1] ‘RK45’ (default): Explicit Runge-Kutta method of order 5(4) [1]. элемент, он приведет вас к библиографии, где говорится [1] J. R. Dormand, P. J. Prince, “A family of embedded Runge-Kutta formulae”, Journal of Computational and Applied Mathematics, Vol. 6, No. 1, pp. 19-26, 1980.