【发布时间】:2021-12-01 01:10:37
【问题描述】:
我有一个 ODE 系统,到目前为止我通过 solve_ivp 解决了它。
scipy.integrate.solve_ivp(fun=model, t_span=(0.0, t_end), y0=[s0])
我的问题是,我想在运行模拟中求解 ODE,其中新值不断注入模拟并显示结果。模拟可能会运行几个小时。我的做法是反复调用solve_ivp,大致如下(这样可以展示中间结果,获取新数据,这里没有展示):
t = 0.0
s = s0
while t < t_end:
result = scipy.integrate.solve_ivp(fun=model, t_span=(t, t + t_step), y0=[s])
s = result.y[0][-1]
t += t_step
我写了一些测试用例,在其中我解析求解了 ODE,由于我还不完全理解的原因,重复调用 solve_ivp 总是更接近解析解(无需手动调整 solve_ivp 的不同参数)。我的问题更接近于:如果这种方法有问题,或者 scipy 或其他包中的某些功能可能更适合我的需求?
【问题讨论】: