Falta el método de integración DOP853 (SciPy)
Aug 18 2020
Estaba revisando algunos métodos de integración proporcionados por SciPy, en los que el DOP853 debería incluirse de acuerdo con la página web (https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html#scipy.integrate.solve_ivp).
Sin embargo, a diferencia de otros, DOP853 no funciona y aparece el siguiente mensaje:
~/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.
¿Sabes cómo puedo usar ese método o dónde puedo encontrarlo? Lo necesito en particular porque se recomienda para resolver ecuaciones diferenciales con alta precisión y se puede aplicar en el dominio complejo.
Respuestas
1 Alex Aug 18 2020 at 17:39
Verificaría qué versión de scipy estás usando. DOP853 se introdujo relativamente recientemente en 1.4.0 .
En 1.4.1, veo DOP853 en la lista correspondiente.
>>> 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.