“额外参数必须在元组中”是什么意思?

2024-04-29 02:51:20 发布

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

当我尝试运行下面的代码时,会收到以下错误消息:

error                                     Traceback (most recent call last)
<ipython-input-49-c5d034b4424d> in <module>
      3 k_vals = [0.42, 0.17, 0, 0.17, 0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17]  # arbitrary in this case
      4 c0 = [1, 0.5, 0, 2, 1, 0,0,0,0,0,0,0,0,0]
----> 5 cout = odeint(rhs, c0, tout, k_vals)  # EXERCISE: rhs, c0, tout, k_vals

/opt/anaconda3/lib/python3.7/site-packages/scipy/integrate/odepack.py in odeint(func, y0, t, args, Dfun, col_deriv, full_output, ml, mu, rtol, atol, tcrit, h0, hmax, hmin, ixpr, mxstep, mxhnil, mxordn, mxords, printmessg, tfirst)
    243                              full_output, rtol, atol, tcrit, h0, hmax, hmin,
    244                              ixpr, mxstep, mxhnil, mxordn, mxords,
--> 245                              int(bool(tfirst)))
    246     if output[-1] < 0:
    247         warning_msg = _msgs[output[-1]] + " Run with full_output = 1 to get quantitative information."

error: Extra arguments must be in a tuple

代码:

import numpy as np
from scipy.integrate import odeint

def rhs(c, t, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17):

r1 = k1 * c[14] * c[9]
r2 = k2 * c[8] * c[9]
r3 = k3 * c[13]**2 * c[0]**2
r4 = k4 * c[13] * c[2]
r5 = k5 * c[9] * c[4]
r6 = k6 * c[10] * c[12]
r7 = k7 * c[11]**2 * c[0]**2
r8 = k8 * c[11] * c[2]
r9 = k9 * c[10] * c[4]
r10 = k10 * c[10] * c[8]
r11 = k11 * c[12] * c[9]
r12 = k12 * c[0] * c[5]
r13 = k13 * c[6]
r14 = k14 * c[6]
r15 = k15 * c[3]
r16 = k16 * c[2]
r17 = k17 * c[14]

return [2*(r2-r3) + 2*(r6 - r7) + r13 - r12, 
        r17, 
        r5 - r4 + r9 - r8 + r14 + r15 - r16, 
        r16 - r15, 
        r4 - r5 + r8 - r9, 
        r13 - r12, 
        r12 - r13 + 2(-r14), 
        r14, 
        r1 + r3 - r2 + r11 - r10, 
        -r1 + r3 - r2 + r4, 
        r7 - r6 + r8 - r9 + r11 - r10, 
        2(r6 - r7) + r9 - r8, 
        r7 - r6 + r10 - r11, 
        2(r2 - r3) + r5 - r4, 
        -r1 - r17, 
        r1 + r17]

tout = np.linspace(0, 10)

k_vals = [0.42, 0.17, 0, 0.17, 0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17,0.17]
c0 = [1, 0.5, 0, 2, 1, 0,0,0,0,0,0,0,0,0]
cout = odeint(rhs, c0, tout, k_vals)  # EXERCISE: rhs, c0, tout, k_vals

此错误消息的含义是什么?我如何修复它


Tags: inoutputr2r3r8r1rhsvals
1条回答
网友
1楼 · 发布于 2024-04-29 02:51:20

使用括号将k_vals更改为元组,因为参数是作为元组而不是列表传递的。然后像这样调用odeint:

cout = odeint(rhs, c0, tout, args=k_vals)

此外,看起来k_vals中只有14个值,而函数rhs的值为17 k。您可能需要将三个值添加到k_值以满足rhs的所有参数,将两个值添加到c0以匹配rhs返回的列表的大小

相关问题 更多 >