Различия между двумя решателями ODE - PullRequest
1 голос
/ 14 марта 2019

Мне интересно, чем отличаются ODEINT от solve_ivp для решения дифференциального уравнения.Какие могут быть преимущества и недостатки между ними?

f1 = solve_ivp(f, [0,1], y0) #y0 is the initial point
f2 = odeint(f, y0, [0, 1], args=(a, b)) # a and b are arguments of function f

Спасибо

1 Ответ

2 голосов
/ 14 марта 2019

Ну, главное отличие заключается в следующем:

  1. odeint появился первым и использует lsoda из пакета FORTRAN odepack для решения ODE.
  2. solve_ivp - более общее решение, позволяющее решить, какой интегратор использовать для решения ODE.Если вы определите параметр method как method='LSODA', тогда будет использоваться тот же интегратор, что и odeint.Дополнительно вы можете выбрать другие методы, такие как BDF и RK25 .

Что касается производительности, есть билет, который указывает, что solve_ivp медленнее.Это может быть потому, что написано на Python.

https://github.com/scipy/scipy/issues/8257

Проверьте документы для них обоих в scipy:

https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.integrate.odeint.html https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.integrate.solve_ivp.html

...