如何将数组传递给 scipy.integate.solve_ivp 函数?现在 u=1.0
我想要的是 u=np.random.uniform(-1, 1, 1000)
.
scipy的版本是1.4.1。
代码是:
import numpy as np
from scipy.integrate import solve_ivp
def func(t, x, u):
dydt = (-x + u) / 5
return dydt
y0 = 0
t_span = [0, 10]
t_eval = np.linspace(0, 10, 1000)
u = 1.0
sol = solve_ivp(func, t_span=t, y0=y0, t_eval=t_eval, args=(u, ))
希望能得到帮助
不要忘记逗号 arg=(u, )
,否则你会有一个错误 odepack.error: Extra arguments must be in a tuple
. 感谢@熊布朗解决了这个问题,我的代码是: import numpy as np from scipy.integration import odeint def func(t, x, u): dydt = (-x + u) 5 return dydt y0.
我想这可能是可行的。
import numpy as np
from scipy.integrate import solve_ivp
def func(t, x, u):
dydt = (-x + u(t)) / 5
return dydt
y0 = 0
t_span = [0, 10]
t_eval = np.linspace(0, 10, 1000)
u = lambda t: np.random.uniform(-1, 1, 1000)
sol = solve_ivp(func, t_span=t, y0=y0, t_eval=t_eval, args=(u, ))
这里有一个更好的解决方案。谢谢 @Lutz Lehmann
import numpy as np
from scipy.integrate import solve_ivp
from scipy.interpolate import interp1d
def func(t, x, u):
dydt = (-x + u(t)) / 5
return dydt
y0 = 0
t_span = [0, 10]
t_eval = np.linspace(0, 10, 1000)
u_value = np.random.uniform(-1, 1, 1000)
u = interp1d(x=t_eval, y=u_value)
sol = solve_ivp(func, t_span=t, y0=y0, t_eval=t_eval, args=(u, ))