2016-04-24 18 views
0

上記のエラーが発生します。私はそれが何を意味するのか、原則的に理解し、本当にそれは私のコードTypeError:deriv()は2つの位置引数をとりますが、4が与えられました

#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)) 

それはから来ているすべてのアイデアをどのように適用され見ることができませんか?私は正しい数の議論を与えたように感じます。

答えて

1

odeint docsには、最初の2つの引数がyおよびtでなければならない関数derivがあります。 odeint(deriv,cond,t,...)に電話すると、derivの最初の2つの引数として、condtが自動的に送信されます。あなたがする必要があるのはderiv(cond,t,G,M)です。

+0

これは私の問題を解決しました。ありがとう! –

0

odeint [1]のドキュメントを見ると、oneintを呼び出す機能がfunc(y、t0、...)の形式である必要があります。だからを呼び出すと、は実際に誘導体(cond、t、G、m)としてと呼ばれます。しかし、あなたの関数は2つの引数を取るだけです。

[1] http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.integrate.odeint.htmlあなたがderivに4つの引数を送信している

関連する問題