La méthode d'intégration DOP853 est manquante (SciPy)
Je vérifiais certaines méthodes d'intégration fournies par SciPy, dans lesquelles le DOP853 devrait être inclus selon la page Web (https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html#scipy.integrate.solve_ivp).
Cependant, contrairement aux autres, DOP853 ne fonctionne pas et le message suivant apparaît:
~/anaconda3/lib/python3.6/site-packages/scipy/integrate/_ivp/ivp.py in solve_ivp(fun, t_span, y0, method, t_eval, dense_output, events, vectorized, **options)
425 inspect.isclass(method) and issubclass(method, OdeSolver)):
426 raise ValueError("`method` must be one of {} or OdeSolver class."
--> 427 .format(METHODS))
428
429 t0, tf = float(t_span[0]), float(t_span[1])
ValueError: `method` must be one of {'RK23': <class 'scipy.integrate._ivp.rk.RK23'>, 'RK45': <class 'scipy.integrate._ivp.rk.RK45'>, 'Radau': <class 'scipy.integrate._ivp.radau.Radau'>, 'BDF': <class 'scipy.integrate._ivp.bdf.BDF'>, 'LSODA': <class 'scipy.integrate._ivp.lsoda.LSODA'>} or OdeSolver class.
Savez-vous comment je peux utiliser cette méthode ou où je peux la trouver? J'en ai besoin en particulier car il est recommandé pour résoudre des équations différentielles avec une grande précision et il peut être appliqué dans le domaine complexe.
Réponses
Je vérifierais quelle version de scipy vous utilisez. Le DOP853 a été introduit relativement récemment dans la version 1.4.0 .
Dans 1.4.1, je vois DOP853 répertorié de manière appropriée.
>>> import scipy
>>> scipy.__version__
'1.4.1'
>>> 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], "DOP853")
>>> print(sol.t)
[ 0. 0.25860956 2.84470518 7.28558373 10. ]
>>> sol = solve_ivp(exponential_decay, [0, 10], [2, 4, 8], "Invalid")
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
sol = solve_ivp(exponential_decay, [0, 10], [2, 4, 8], "Invalid")
File "C:\WPy64-3771\python-3.7.7.amd64\lib\site-packages\scipy\integrate\_ivp\ivp.py", line 507, in solve_ivp
.format(METHODS))
ValueError: `method` must be one of {'RK23': <class 'scipy.integrate._ivp.rk.RK23'>, 'RK45': <class 'scipy.integrate._ivp.rk.RK45'>, 'DOP853': <class 'scipy.integrate._ivp.rk.DOP853'>, 'Radau': <class 'scipy.integrate._ivp.radau.Radau'>, 'BDF': <class 'scipy.integrate._ivp.bdf.BDF'>, 'LSODA': <class 'scipy.integrate._ivp.lsoda.LSODA'>} or OdeSolver class.