【发布时间】:2020-05-03 10:15:49
【问题描述】:
我正在用 Python 完成一个关于行星运动的项目,第一个任务是为地球绕太阳运行的轨道编写代码。这是我目前所拥有的:
def earth_orbit(rEar,v0):
#r0 = xEar[0] = rEar
#v0 = vyEar[0] = np.sqrt(mu/rEar)
#Set parameters:
N = 365 # Earth days in a year
dt = 1.00/N # Time Step: Fractions of a year - 1 Earth day (i.e. 1/365)
mu = 4*np.pi**2 # Gravitational parameter
#Create an array, for all variables, of size N with all entries equal to zero:
xEar = np.zeros((N,))
yEar = np.zeros((N,))
vxEar = np.zeros((N,))
vyEar = np.zeros((N,))
# Initial Conditions:
xEar[0] = rEar # (x0 = r, y0 = 0) in AU
vyEar[0] = v0 #units: AU/yr
#Implement Verlet Algorithm:
for k in range(0,N-1):
rEar = (xEar[k]**2+yEar[k]**2)**0.5
vxEar[k+1] = vxEar[k] - (mu*xEar[k])/((rEar)**3)*dt
xEar [k+1] = xEar[k] + vxEar[k+1]*dt
vyEar[k+1] = vyEar[k] - (mu*yEar[k])/((rEar)**3)*dt
yEar [k+1] = yEar[k] + vyEar[k+1]*dt
#Plot:
a = plt.plot(xEar, yEar, 'go', markersize = 1, label = 'Earth trajectory')
plt.plot(0,0,'yo', label = 'Sun positon') #yellow marker for the sun
plt.plot(xEar[0],0,'bo', label = 'Earth initial positon') #dark blue marker for earth's initial position
plt.axis('equal')
plt.xlabel ('x')
plt.ylabel ('y')
return a, xEar, yEar
这很好用,但是对于项目的后续部分,我被告知我不应该将 AU 用于此基本代码,因为它会造成困难。我尝试更改引力参数并将输入置于标准单位中,但图形变为仅 2 个点(xEar 和 vyEar 的值保持不变)而不是圆形轨道,我不知道为什么会这样?
【问题讨论】:
-
IIUC,你有一个工作功能,所以试着逐步改变它到你想要的版本,并在每一个小步骤之后进行测试,看看是什么导致了问题。
-
问题可能仅仅是您更改了尺寸(如果您已从 AU 更改为米,则会更改多个数量级)但没有更改初始值?我一直在努力让您的代码正常工作,但我懒得弄清楚参数的合理值是多少,所以我一直在猜测,到目前为止,我还没有实现任何类似轨道的东西。 (编辑:当我写这篇文章时,我想到给定单位,1 和 2*Pi 将是初始值的明显选择,我现在有一个圆形轨道)
-
我试图改变初始值以及重力参数,我只是不明白为什么将所有从 AU 更改为 km 或 m 时它根本不起作用
标签: python simulation orbital-mechanics