使用scipy ode求解器时的尺寸值误差

问题描述 投票:0回答:1

当前正在尝试运行以下代码

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') 追溯(最近一次通话):

文件“ 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(未定义)。

我在网上遵循了一个类似的示例,但是主要区别是我在函数中返回了两个方程,而我的两个参数是数组。我尝试使用odeint和solve_ivp,但是它们给出的答案非常不准确。

谢谢。

python scipy ode integrate
1个回答
0
投票

再次检查该行

i.set_initial_value(t0,y0)
© www.soinside.com 2019 - 2024. All rights reserved.