Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python(SciPy)为一定数量的时间步求解ODE?_Python_Scipy_Ode_Differential Equations - Fatal编程技术网

如何使用Python(SciPy)为一定数量的时间步求解ODE?

如何使用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解决一组ODE。给我的任务要求我解500个时间步的微分方程。如何使用SciPy实现这一点

到目前为止,我已经尝试使用了
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)