我试图使用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).
如错误消息所示,
Pr
作为长度为54的向量传递,而不是逐个传递值。推断Pr
是一个NumPy向量,这意味着f
的输出是将return
值按元素应用于Pr
的结果为了解决这个问题,您可以使用一个函数从时间输入生成一个
Pr
值。再次假设Pr[k]
对应于t[k]
,此函数的最简单版本可能是:然后修改
f
,如下所示:编辑:…然后不要将
Pr
作为参数传递给scipy.odeint
,因为f
以不同的方式获取值相关问题 更多 >
编程相关推荐