Metode integrasi DOP853 tidak ada (SciPy)
Saya sedang memeriksa beberapa metode integrasi yang disediakan oleh SciPy, di mana DOP853 harus disertakan sesuai dengan halaman web (https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html#scipy.integrate.solve_ivp).
Namun, tidak seperti yang lain, DOP853 tidak berfungsi dan pesan berikut ini muncul:
~/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.
Apakah Anda tahu bagaimana saya bisa menggunakan metode itu atau di mana saya bisa menemukannya? Saya membutuhkannya secara khusus karena direkomendasikan untuk menyelesaikan persamaan diferensial dengan presisi tinggi dan dapat diterapkan dalam domain yang kompleks.
Jawaban
Saya akan memeriksa versi scipy apa yang Anda gunakan. DOP853 diperkenalkan relatif baru-baru ini di 1.4.0 .
Dalam 1.4.1, saya melihat DOP853 dicantumkan dengan tepat.
>>> 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.