在粒子绕中心质量轨道运动的模拟中,有一个变量没有正确演化

2024-09-28 22:09:34 发布

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

我正试图建立一个由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(它的起始值)保持不变。正如你所料,y是随着时间不断进化的。知道为什么吗


Tags: infromimportnumpyforasnp粒子