我试图在围绕中心质量的圆形轨道上建立12个粒子的模型。我通过创建一个包含粒子位置和速度的数组,然后使用odeint来整合运动方程来完成这项工作。当我运行程序时,我似乎得到每个粒子的y值的正确演变,但不是x的值。我的数组叫做cond,以[x1,y1,z1,vx1,vy1,vz1,x2]等格式存储系统信息。这是我的代码:
#project starts here
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
from numpy import pi
from scipy.integrate import odeint
from math import sqrt
G=1
M=1
N=12
def deriv(cond,t,G,M):
for q in range (0,12):
i=6*q
dydt = list(range(72))
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
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))
print(sln)
我得到的输出是x保持恒定在值2(其起始值)。随着时间的推移,你会不断发展,就像你期望的那样。知道为什么吗?