【发布时间】:2021-11-14 12:43:30
【问题描述】:
我正在尝试使用 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).
【问题讨论】:
-
只是指出一个潜在的错误:
k1和k2在函数的前两行被覆盖,因此您为它们传递的值将被丢弃。 -
@EricCanton 你是对的,我刚刚编辑了问题
-
能否告诉我们
Pr和t的类型?例如熊猫数据框或系列。或显示其实例化的简化示例。获得使用它们的正确语法很重要。 -
@EricCanton Pr 是一个包含浮点值的 pandas 系列,t 是包含 1961 年到 2014 年的年份值的列表。两者的长度都是 54。
-
您得到的错误只是突出显示
y0是单个int,而f的返回值包含54 个元素。这两个必须具有相同的形状。如果所有 54 个元素的初始值都相同,则只需编写y0 = 1.2e5 * np.ones(54)。