TypeError:deriv()接受2个位置参数,但给出了4个

2024-09-28 22:08:16 发布

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

我得到了上面的错误。原则上我理解它的含义,但不能真正理解它如何应用于我的代码

#project starts here
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
from numpy import pi
from scipy.integrate import odeint

def deriv(cond,t):
    for q in range (0,N):
        i=6*q
        dydt[i]=cond[i+3]
        dydt[i+1]=cond[i+4]
        dydt[i+2]=cond[i+5]
        r=sqrt((cond[i])**2 +(cond[i+1])**2 +(cond[i+2])**2)
        dydt[i+3]=-G*M*cond[i]/(r**3)
        dydt[i+4]=-G*M*cond[i+1]/(r**3)
        dydt[i+5]=-G*M*cond[i+2]/(r**3)
    return dydt

G=1
M=1
N=12
vmag=((G*M)/(2))**(0.5)
theta = np.linspace(0,2*pi,N)
x=2*np.cos(theta)
y=2*np.sin(theta)
vx=-vmag*np.sin(theta)
vy=vmag*np.cos(theta)
z=np.zeros(N)
vz=np.zeros(N)
t=np.linspace(0,30,100)

cond=list(item for group in zip(x,y,z,vx,vy,vz) for item in group)
sln=odeint(deriv, cond, t, args=(G,M))

有什么想法吗?我觉得我已经给出了正确的论点。


Tags: infromimportnumpyforasnppi
2条回答

如果您查看odeint[1]的documanimation,您将看到调用oneint的函数的格式必须是func(y,t0,…)。所以当你调用odeint(deriv,cond,t,args=(G,M))它实际上把你的函数称为deriv(cond,t,G,M)。但是你的函数只需要2个参数。在

[1]http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.integrate.odeint.html

您正在向deriv发送4个参数。根据odeint docs,有一个函数deriv,其前两个参数必须是y和{}。当您调用odeint(deriv,cond,t,...)时,cond和{}将自动作为deriv的前两个参数发送。您需要做的就是生成deriv(cond,t,G,M)。在

相关问题 更多 >