如何使用Python(SciPy)为一定数量的时间步求解ODE?
我正在尝试使用SciPy解决一组ODE。给我的任务要求我解500个时间步的微分方程。如何使用SciPy实现这一点 到目前为止,我已经尝试使用了如何使用Python(SciPy)为一定数量的时间步求解ODE?,python,scipy,ode,differential-equations,Python,Scipy,Ode,Differential Equations,我正在尝试使用SciPy解决一组ODE。给我的任务要求我解500个时间步的微分方程。如何使用SciPy实现这一点 到目前为止,我已经尝试使用了scipy.integrate.solve\u ivp,这为我提供了一个正确的解决方案,但我无法控制它运行的时间步数。t\u span参数允许我配置t的初始值和最终值,但我实际上并不感兴趣——我只感兴趣我集成了多少次。(例如,当我用t_span=(0500)运行方程时,解算器积分907次。) 下面是我的代码的简化示例: from scipy.integra
scipy.integrate.solve\u ivp
,这为我提供了一个正确的解决方案,但我无法控制它运行的时间步数。t\u span
参数允许我配置t
的初始值和最终值,但我实际上并不感兴趣——我只感兴趣我集成了多少次。(例如,当我用t_span=(0500)
运行方程时,解算器积分907次。)
下面是我的代码的简化示例:
from scipy.integrate import solve_ivp
def simple_diff(t, z) :
x, y = z
return [1 - 2*x*y, 2*x - y]
t_range = (0, 500)
xy_init = [0, 0]
sol = solve_ivp(simple_diff, t_range, xy_init)
我也可以使用SciPy以外的东西,但最好使用SciPy解决方案。您可以使用
t\u eval
参数来求解ivp,以便在特定时间点进行评估:
import numpy as np
t_eval = np.arange(501)
sol = solve_ivp(simple_diff, t_range, xy_init, t_eval=t_eval)
但是,请注意,这不会导致解算器限制由错误度量确定的集成步骤的数量
如果您必须精确计算函数500次才能获得500个积分步骤,那么您描述的是Euler积分,它的精度将低于solve\u ivp
使用的算法
看看方程的解,你可能只想积分到t=5
以下是与上述设置集成时的结果:
这是我们的调查结果
t_eval=np.linspace(0,5)
t_范围=(0,5)
sol=solve_ivp(简单差异,t_范围,xy_初始,t_eval=t_eval)