odeint Python的问题

2024-10-04 11:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用odeint,但我有一个参数,它会随着每个时间步改变值。我的职能是——

def f(y, t, k1, k2, Pr):

    return k1*(Pr-k2)*y

其中Pr是一个包含浮点值的系列,我观察到了其中的值。Anft是从1961年到2014年的整数年列表。我为odeint编写了以下代码-

y0 = 120000
k1 = 0.2
k2 = -.4
y = odeint(f, y0, t, args = (k1, k2, Pr, ))

但它给出了以下错误-

RuntimeError: The size of the array returned by func (54) does not match the size of y0 (1).

Tags: ofthe参数sizereturndef时间k2
1条回答
网友
1楼 · 发布于 2024-10-04 11:30:01

如错误消息所示,Pr作为长度为54的向量传递,而不是逐个传递值。推断Pr是一个NumPy向量,这意味着f的输出是将return值按元素应用于Pr的结果

为了解决这个问题,您可以使用一个函数从时间输入生成一个Pr值。再次假设Pr[k]对应于t[k],此函数的最简单版本可能是:

def get_Pr(time: float):
    t_index = sum(t <= time) - 1 
    return Pr[t_index]

然后修改f,如下所示:

def f(y, t, k1, k2):
    this_pr = get_Pr(t)
    return k1*(this_pr-k2)*y

编辑:…然后不要将Pr作为参数传递给scipy.odeint,因为f以不同的方式获取值

相关问题 更多 >