我收到了上述错误。我原则上理解它的含义,但不能真正看到它如何应用于我的代码
#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))
它来自哪里的想法?我觉得我已经给出了正确数量的论点。
答案 0 :(得分:1)
您要向deriv
发送4个参数。根据{{3}},您有一个函数deriv
,其前两个参数必须为y
和t
。当您致电odeint(deriv,cond,t,...)
时,cond
和t
会自动作为deriv
的前两个参数发送。您需要做的就是制作deriv(cond,t,G,M)
。
答案 1 :(得分:0)
如果你看odeint [1]的文档,你会看到你在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