【发布时间】:2020-08-01 14:05:31
【问题描述】:
目前正在尝试运行以下代码
import numpy as np
from scipy.interpolate import interp1d
from scipy.integrate import ode
def dydt(t,y,tsi,rho):
Lambda = 10^-4
beta = 0.0065
lambda2 = 0.08
rho = interp1d(tsi,rho, fill_value = 'extrapolate')
#one group delayed precursor
dydt1 = (-lambda2*y[0] + beta*y[1])
#power
dydt2 = (((rho(t)-beta)/Lambda)*y[1]+(lambda2*y[0])/Lambda)
return dydt1, dydt2
x = 21
dt = 1
tsi=np.arange(0,x,dt)
dt = [1]
rho=np.ones(x)*0.0025
y0= [1,0]
t0 = [0,x-1]
sol = []
i = ode(dydt)
i.set_integrator('dopri5')
i.set_initial_value(t0,y0)
i.set_f_params(tsi,rho)
for t in tsi[1:]:
i.integrate(i.t+dt)
sol.append(i.y)
但是,我最终得到了这个错误:
runfile('C:/Users/----/Desktop/---.py', wdir='C:/Users/---/Desktop') Traceback(最近一次调用最后一次):
文件“C:\Users---\Desktop---.py”,第 46 行,在 i.integrate(i.t+dt)
文件“C:\Users---\anaconda3\lib\site-packages\scipy\integrate_ode.py”,第 432 行,在集成中 self.f_params, self.jac_params)
文件“C:\Users---\anaconda3\lib\site-packages\scipy\integrate_ode.py”,第 1172 行,运行中 元组(self.call_args) + (f_params,)))
ValueError: 第 0 维必须为 2 但得到 0(未定义)。
我在网上遵循了一个类似的示例,但主要区别在于我在函数中返回了 2 个方程,而我的两个 args 是数组。我尝试使用 odeint 和 solve_ivp 但它们给出的答案非常不准确。
谢谢。
【问题讨论】:
标签: python scipy ode integrate