【问题标题】:odepack.error: Extra arguments must be in a tupleodepack.error:额外的参数必须在一个元组中
【发布时间】:2018-01-25 20:12:03
【问题描述】:

我的 ode 求解器出现了一些问题,我正在尝试解决 SEIR 问题,尽管我的代码基于非常相似的代码,但我不断收到相同的错误。我的代码是:

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# Total population, N.
N1 = 55600
# Initial number of infected and recovered individuals, I0 and R0.
I10, R10, E10 = 1, 0, 0
# Everyone else, S0, is susceptible to infection initially.
S10 = N1 - I10 - R10 - E10
# parameters
B = 0.05
a = 0.000001
d = 0.0167
g = 0.0167
z = 0.0167
M = 100000

# A grid of time points (in months)
t = np.linspace(0, 160, 160)

# The SIR model differential equations.
def deriv(y, t, N1, B, a, d, g, z, M):
S1, E1, I1, R1 = y

dS1dt = B*N1 + d*(R1) - S1/N1 * (M*a(I1))
dE1dt = S1/N1 * M*a(I1) - g * E1
dI1dt = g * E1 - z * I1
dR1dt = z * I1 - d * R1

return dS1dt, dE1dt, dI1dt, dR1dt

# Initial conditions vector
y0 = S10, E10, I10, R10
# Integrate the SIR equations over the time grid, t.
ret = odeint(deriv, y0, t, args=[N1, B, a, d, g, z, M])
S1, E1, I1, R1 = ret.T

我不断收到错误:

文件“C:/Users/Angus/PycharmProjects/firstAttempt/bugfinder.py”,第 44 行, 在

  ret = odeint(deriv, y0, t, args=[N1, B, a, d, g, z, M],)

文件“C:\Python36\lib\site-packages\scipy\integrate\odepack.py”,第 215 行,在 odeint ixpr, mxstep, mxhnil, mxordn, mxords) odepack.error: 额外的参数必须在一个元组中

任何帮助将不胜感激!

【问题讨论】:

  • 尝试用args=(N1, B, a, d, g, z, M)替换args=[N1, B, a, d, g, z, M]
  • 来自文档:args : tuple, optional Extra arguments to pass to function.

标签: python pycharm ode


【解决方案1】:

对于单个参数,不要忘记在元组中添加逗号,例如

    ret = odeint(deriv, y0, t, args=(singleArg,))

有关单值元组,请参见此处 https://www.tutorialspoint.com/python/python_tuples.htm

很遗憾,我没有足够的声誉来发表评论。

【讨论】:

  • 谢谢你!!!!
  • 感谢@dgruending!这解决了我的问题。
【解决方案2】:

尝试替换:

  ret = odeint(deriv, y0, t, args=[N1, B, a, d, g, z, M],)

用这个:

  ret = odeint(deriv, y0, t, args=(N1, B, a, d, g, z, M))

来自 scipy documentation

args : 元组,可选

要传递给函数的额外参数。

另外,谷歌differences b/w list and tuple

【讨论】:

  • 感谢@Jean-FrançoisFabre 明确回答
  • 我的荣幸。您找到了解决方法,但我想向您展示如何在格式和参考方面做出更好的回答。这个答案对于使用python使用特殊包,对python了解不多的人很有用。
  • 感谢@Jean-FrançoisFabre,a 和 I1 之间的等式还有一个小问题,没有 * 阻止代码运行
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多