Pass Args For Solve_ivp (new Scipy Ode Api)
Solution 1:
Relatively recently there appeared a similar question on scipy's github. Their solution is to use lambda
:
solve_ivp(fun=lambda t, y: fun(t, y, *args), ...)
And they argue that there is already enough overhead for this not to matter.
Solution 2:
It doesn't seem like the new function has an args
parameter. As a workaround you can create a wrapper like
defwrapper(t, y):
orig_func(t,y,hardcoded_args)
and pass that in.
Solution 3:
Recently the 'args' option was added to solve_ivp, see here: https://github.com/scipy/scipy/issues/8352#issuecomment-535689344
Solution 4:
According to Javier-Acuna's ultra-brief, ultra-useful answer, the feature that you (as well as I) desire has recently been added. This was announced on Github by none other than the great Warren Weckesser (See his Github, StackOverflow) himself. Anyway, jokes aside the docstring of solve_ivp has an example using it in for the `Lotka-Volterra equations
solve_ivp( fun, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, args=None, **options, )
So, just include args as a tuple. In your case
args = (arg1, arg2)
Please don't use my answer unless your scipy version >= 1.4 . There is no args parameter in solve_ivp for versions below it. I have personally experienced my answer failing for version 1.2.1.
The implementation by zahabaz would probably still work fine in case your scipy version < 1.4
Solution 5:
For completeness, I think you can also do this but I'm not sure why you would bother since the other two options posted here are perfectly fine.
from functools import partial
fun = partial(dy_dt, arg1=arg1, arg2=arg2)
scipy.integrate.solve_ivp(fun, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, **options)
Post a Comment for "Pass Args For Solve_ivp (new Scipy Ode Api)"