Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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 ODE解算器输出_Python_Ode - Fatal编程技术网

选择性python ODE解算器输出

选择性python ODE解算器输出,python,ode,Python,Ode,我正在使用scipy.integrate来解决一个ODE系统。我的代码的摘要如下所示: # step 1: import all necessary modules and functions imports here import numpy as np from scipy.integrate import ode # step 2: define ode sys def ode_rhs(t, y, p1, p2, ..., pn): ''' do some stuff to

我正在使用scipy.integrate来解决一个ODE系统。我的代码的摘要如下所示:

# step 1: import all necessary modules and functions imports here
import numpy as np
from scipy.integrate import ode

# step 2: define ode sys  
def ode_rhs(t, y, p1, p2, ..., pn):   
  ''' do some stuff to define rhs''' 
  return ydot

# step 3: set parameters p1, p2, ..., pn 
"""
p1 = ...
p2 = ...
...
pn = ...
"""

# step 4: set time parameters
ts = 0.0
tf = 340.

# step 5: set initial conditions
y0 = np.zeros(some_shape) 

# step 6: set ode solver
#backend = 'dopri5'
backend = 'vode'
r = ode(ode_rhs).set_integrator(backend, method='BDF', atol=1e-12, rtol=1e-6)
r.set_initial_value(y0,ts)

# step 7: store solution
t   = [ts]
y  =  [y0]

# step 8: call ode rhs and integrate
while r.successful() and r.t < tf:
  r.set_f_params(p1, p2, ..., pn)
  r.integrate(tf, step=True)

  t.append(r.t)  
  y.append(r.y)  

# step 9: process output for plotting
t   = array(t)
y = array(y).T
#步骤1:在此处导入所有必要的模块和函数导入
将numpy作为np导入
从scipy.integrate导入ode
#步骤2:定义ode系统
def ode_rhs(t,y,p1,p2,…,pn):
“做些事情来定义rhs”
返回伊多
#步骤3:设置参数p1、p2、…、pn
"""
p1=。。。
p2=。。。
...
pn=。。。
"""
#步骤4:设置时间参数
ts=0.0
tf=340。
#步骤5:设置初始条件
y0=np.零(某些形状)
#步骤6:设置ode解算器
#后端='dopri5'
后端='vode'
r=ode(ode_rhs)。设置集成器(后端,方法='BDF',atol=1e-12,rtol=1e-6)
r、 设置初始值(y0,ts)
#步骤7:存储解决方案
t=[ts]
y=[y0]
#步骤8:调用ode rhs并集成
当r.successful()和r.t

解算器在其用于推进解决方案的任何时间步输出y值。我需要的是特定时间(0,1,2,…339)的输出,而不是解算器内部使用的时间步。我可以用r积分(t+dt)。但是,我必须使用可变步进来减少模拟时间。

您能为我们提供一个最小的可执行示例吗?特别是
ode()
不知从何而来,它是属于
scipy
还是其他什么?你能在解算器时间步之间插入其他时间步吗?@缺点:为不完整性道歉。我无法发布可执行代码,因为它依赖于其他用户定义的函数和与之相关的ext.文件。我已经更新了我的帖子,以显示解算器的来源。@Paul:我希望解算器在这些特定时间解算,我有验证数据。我的系统非常动态,我不知道插值是否合适。如果我想插值,我想我必须在解决系统后(即在y上)进行插值,对吗?为什么不在样本之间的每个时间段运行
integrate()
,并收集每次运行的最终结果?