使用Python建立天体的轨道



确定轨道的参考系统


为了找到经典力学中的相对运动轨迹,使用所有参考系(惯性和非惯性)中绝对时间的假设。

使用此假设,我们考虑两个不同参考系中同一点的运动 ķķ 其中第二个相对于第一个以任意速度移动  v e c V t = \点v e c R t   在哪里  v e c R t 半径向量,描述坐标系原点的位置 ķ 相对于参照系 ķ

我们将描述系统中一点的运动 ķ 半径向量  v É Ç [RT 从系统原点定向 ķ 到该点的当前位置。 然后考虑中的点相对于参考系的运动 ķ 用半径矢量描述  v e c r t

 v e c r t = v e c r 'T+vecRt  ,(1)

和相对速度  vecvt

 vecvt=\点 vecrt+\点 vecRt ,(2)

在哪里 \点 vecrt -点相对于系统的速度 K ; \点 vecRt 帧速度 K 相对于参照系 K



因此,找到任意参考系中点的运动定律 K 必要的:

1)设定运动定律的要点-  vecrt 相对于参照系 K ;
2)设定运动定律-  vecRt 参考系统 K 相对于参照系 K
3)确定点的运动定律-  vecrt= vecrt+ vecRt 相对于参照系 K

在日心参考系中构造月球轨道





日心参考系统(系统 K )地球绕半径移动
R1=1.496 cdot108 km(流通周期 T1=3,156 cdot107 s。)。 月亮又绕半径(圆)绕地球(系统K')运动 R2=3.844 cdot105 公里 (流通期 T2=2.36 cdot106 s 众所周知[1,2],当实体点沿半径的圆移动时 R 角速度恒定  omega 从原点到点的当前位置绘制的半径向量的坐标会根据以下规律变化:

 vecRt= binomR cdotcos omega cdott+ varphi0R cdotsin omega cdott+ varphi0= binomR cdotcos frac2 piT+ varphi0R cdotsin frac2 piT+ varphi03



在哪里  varphi0 -表征粒子在时间的位置的初始阶段 t=0 ,将来我们将假定它等于零。 替换为(3) RR1R2 并代入(1),我们得到日心轴坐标系中月亮半径向量对时间的依赖关系:

 vecrt= binomxtyt= binomR2cos frac2 piT2t+R1cos frac2 piT1tR2sin frac2 piT2t+R1sin frac2 piT1t4



表达式(4)设置月球的轨道( y=yxt )以参数形式显示,其中参数为时间。 为了使用Python建立所需的轨道,我们设置了轨道的半径以及地球和月球的自转周期。

地球以日心坐标系( K )其轨道半径和公转周期分别相等 R1=1.496 cdot108kmT1=3.156 cdot107s 月亮在坐标系中绕地球运动( K )其轨道半径和公转周期分别相等 R2=3.844 cdot105T2=2.36 cdot106s

鉴于(4),我们确定坐标与时间的依存关系的函数:

 binomXt=R1 cdotcos frac2 piT1 cdottYt=R1 cdotsin frac2 piT1 cdottxt=R2 cdotcos frac2 piT2 cdottyt=R2 cdotsin frac2 piT2 cdott5



使用(5),我们获得月球轨道的一对坐标:

 binomXgt=Xt+xtYgt=Yt+yt6



我们设置坐标N = 1000的点数和地球自转间隔的离散时间 dt= fracT1N 。 我们将编写一个程序并为正坐标更改区域构建图形:

确定地球和月球的轨道
from numpy import* from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**5 T2=2.36*10**6 N=1000.0 def X(t): return R1*cos(2*pi*t/T1) def Y(t): return R1*sin(2*pi*t/T1) def x(t): return R2*cos(2*pi*t/T2) def y(t): return R2*sin(2*pi*t/T2) k=100 t=[T1*i/N for i in arange(0,k,1)] X=array([X(w) for w in t]) Y=array([Y(w) for w in t]) x=array([x(w) for w in t]) y=array([y(w) for w in t]) XG=X+x YG=Y+y figure() title("    .\n    ") xlabel('$X(t_{k})$,$X_{g}(t_{k})$') ylabel('$Y(t_{k})$,$Y_{g}(t_{k})$') axis([1.2*10**8,1.5*10**8,0,1*10**8]) plot(X,Y,label=' ') plot(XG,YG,label=' ') legend(loc='best') grid(True) show() 

我们得到:


图1

创建的时间表可让您扩展训练任务,并查看如果月球轨道半径为,月球轨道将是什么 R2=3.844 cdot107 甚至对天文学没有专门知识的读者都清楚,月球在地球的非引力场中不可能有这样的轨道,并且使用假想半径来研究环的出现条件 。 我们将对该程序进行适当的更改:

确定地球和月球的轨道
读书
  from numpy import* from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**7 T2=2.36*10**6 N=1000.0 def X(t): return R1*cos(2*pi*t/T1) def Y(t): return R1*sin(2*pi*t/T1) def x(t): return R2*cos(2*pi*t/T2) def y(t): return R2*sin(2*pi*t/T2) t=[T1*i/N for i in arange(0,N,1)] X=array([X(w) for w in t]) Y=array([Y(w) for w in t]) x=array([x(w) for w in t]) y=array([y(w) for w in t]) XG=X+x YG=Y+y figure() title("    ") xlabel('$X(t_{k})$,$X_{g}(t_{k})$') ylabel('$Y(t_{k})$,$Y_{g}(t_{k})$') axis([-2.0*10**8,2.0*10**8,-2.0*10**8,2.0*10**8]) plot(X,Y,label=' ') plot(XG,YG,label=' ') legend(loc='best') grid(True) show() 


我们得到:


图2

比较图2所示的月球轨道。 1和2,我们发现它们之间的显着差异。 为了解释这些差异的原因,有必要比较月球在第一和第二种情况下的线速度与地球的线速度。

由于地球相对于太阳的线速度的方向以及月球相对于地球的线速度的方向随时间变化,因此速度在大小上保持恒定。

作为在日心坐标系中月球与地球的线速度之比的定量特征,应该选择地球的线速度模块与月球的线速度在地球的线速度方向上的投影之间的差:

vot=\左| vecVt\右| frac vecVt cdot vecvt\左| vecVt right|7



我们定义了描述地球和月球速度分量变化规律的函数:

\开Vxt= fracddtXtVyt= fracddtYtvxt= fracddtxtvyt= fracddtyt endmatrix8



为了确定最终速度,并考虑了投影,我们使用以下关系式:

Dt= sqrtVxt2+Vyt2 sqrtvxt2+vyt2 cdot fracVxt cdotvxt+Vyt cdotvyt sqrtVxt2+Vyt2 cdot sqrtvxt2+vyt29

我们将在考虑到(5),(8),(9)和月球轨道半径的情况下编写程序 R2=3.844 cdot105 公里。:

月亮和地球朝同一方向移动
 from numpy import* from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**5 T2=2.36*10**6 N=1000.0 k1=2*pi/T1 k2=2*pi/T2 def Vx(t): return -k1*R1*sin(k1*t) def Vy(t): return k1*R1*cos(k1*t) def vx(t): return -k2*R2*sin(k2*t) def vy(t): return k2*R2*cos(k2*t) def D(t): return sqrt(Vx(t)**2+Vy(t)**2)-sqrt(vx(t)**2+vy(t)**2)*(Vx(t)*vx(t)+Vy(t)*vy(t))/((sqrt(Vx(t)**2+Vy(t)**2))*(sqrt(vx(t)**2+vy(t)**2))) x=[T1*i/N for i in arange(0,N,1)] y=[D(t) for t in x] title("       \n    R2=3.844*10**5 .") xlabel('t') ylabel('D(t)') plot(x,y) show() 


我们得到:


图3。

我们将编写一个程序,考虑到(5),(8),(9)以及月球轨道半径R2 = 3.844 * 10 ** 7 km:

月亮定期向与地球相反的方向移动
 from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**7 T2=2.36*10**6 N=1000.0 k1=2*pi/T1 k2=2*pi/T2 def Vx(t): return -k1*R1*sin(k1*t) def Vy(t): return k1*R1*cos(k1*t) def vx(t): return -k2*R2*sin(k2*t) def vy(t): return k2*R2*cos(k2*t) def D(t): return sqrt(Vx(t)**2+Vy(t)**2)-sqrt(vx(t)**2+vy(t)**2)*(Vx(t)*vx(t)+Vy(t)*vy(t))/((sqrt(Vx(t)**2+Vy(t)**2))*(sqrt(vx(t)**2+vy(t)**2))) x=[T1*i/N for i in arange(0,N,1)] y=[D(t) for t in x] title("        \n .    R2=3.844*10**7 .") xlabel('t') ylabel('D(t)') plot(x,y) show() 


我们得到:


图4。

对相关性的分析使我们能够解释轨道不同的原因。 的函数D(t) R2=3.844 cdot105 km始终是正的,也就是说,月亮始终沿地球运动的方向移动,并且不形成环。 在 R2=3.844 cdot107 公里值 D 取负值,并且有时月亮在与地球运动方向相反的方向上运动,因此轨道具有回圈。 这就是在计算中使用月球不存在的含义。

在与地球有关的参考系中构造火星轨道




在日心参考系统(系统K)中,地球在半径为圆的范围内运动 R1=1.496 cdot108 km,循环周期 T1=$365.2 一天,火星沿着椭圆的半长轴移动 am=2.28 cdot108 公里,火星的革命时期 Tm=$689.9 天。,轨道的离心率 e=$0.09 [3]。 地球运动由表达式(3)定义的半径矢量R(t)描述。 由于火星的轨道是椭圆形,因此 x=xty=yt 从时间开始参数设置[4]:

x varepsilon=am cdotcos varepsilone ,(10)

y varepsilon=am cdot sqrt1e2 cdotsin varepsilon ,(11)

t varepsilon= fracTm2 pi cdot varepsilone cdotsin varepsilon ,(12)

完整的椭圆旋转对应于参数<img的更改  varepsilon 从0到 2 pi 。 为了建立火星的轨道,有必要在描述地球和火星在日心参考系中的位置的同时,计算半径矢量的坐标,然后根据  vecrt= vecrt vecRt 计算与地球相关的参考系中火星的坐标。

为了在与地球连接的参考系中建立火星的轨道,我们使用先前给定的地球和火星轨道参数,关系(10)-(12),以及地球坐标的关系:

Xt=R1 cdotcos frac2 piT1t ,(13)

Yt=R1 cdotsin frac2 piT1t ,(14)

应当指出,火星绕太阳公转的周期为 K=9 ,则应根据以下关系确定进行计算的点数及其之间的距离:

N=4000 cdotK varepsiloni= frac2 piN cdotii=0...N (15)

火星在地球参照系中的轨道
 from numpy import* from matplotlib.pyplot import* R1=1.496*10e8#       [4] T1=365.24 am=2.28*10e8 Tm=689.98 ee=0.093 N=36000 def x(g): return am*(cos(g)-ee) def y(g): return am*sqrt(1-ee**2)*sin(g) def t(g): return Tm*(g-ee*sin(g))/2*pi def X(g): return R1*cos(2*pi*t(g)/T1) def Y(g): return R1*sin(2*pi*t(g)/T1) y=array([y(2*pi*i/N) for i in arange(0,N,1)]) x=array([x(2*pi*i/N) for i in arange(0,N,1)]) X=array([X(2*pi*i/N) for i in arange(0,N,1)]) Y=array([Y(2*pi*i/N) for i in arange(0,N,1)]) t=array([t(2*pi*i/N) for i in arange(0,N,1)]) figure() title("    ") xlabel('x(g),X(g)') ylabel('y(g),Y(g)') plot(x,y,label=' ') plot(X,Y,label=' ') legend(loc='best') figure() title("       ") xlabel('x1/10e8') ylabel('y1(g/10e8') x1=(xX) y1=(yY) plot(x1/10e8,y1/10e8) figure() title("      \n    ") xlabel('t/365.24') ylabel('sqrt(x1**2+y1**2)/10e8') y2=sqrt(x1**2+y1**2)/10e8 x2=t/365.24 plot(x2,y2) show() 


我们得到:


图5

我们计算半径向量的坐标,以描述火星在与地球连接的参考系中的位置,并使用以下关系式构建轨道(图6):

x1i=x varepsiloniXt varepsiloniy1i=y varepsiloniYt varepsiloni (16)


图6

火星运动的另一个重要特征(主要用于行星际太空飞行)是地球与火星之间的距离(t),它是由描述火星在与地球相关的参考系中的位置的半径向量的模数确定的。 图7显示了地球与火星之间的距离与以地球年计的时间的关系。


图7

对图7所示依赖性的分析表明,地球与火星之间的距离是时间的复杂周期函数。 如果我们使用信号理论[5]的术语,那么我们可以说依赖关系s(t)是幅度调制信号,通常表示为定义幅度调制(包络)的高频(载波)和低频函数这两个函数的乘积:

ut= baru+a cdotsin omega1t cdot1+ Deltaa cdotsin omega2t (17)

在哪里  baru -函数的常数 ; -信号幅度;  omega1 -载波频率; \三 -设置幅度调制深度的函数的幅度;  omega2 -调制功能的频率。

从图7中可以看出,载波的周期约为2年,调制功能的周期约为17年[6]。

哈雷彗星日心轨道的构造




1986年2月9日,哈雷彗星最后一次穿过近日点(离太阳最近的轨道点)。 (太阳本身被认为位于原点。)

哈雷彗星当时的坐标和速度分量相等 p0=0.3255140.4594600.166229v0=9.0961116.9166861.305721 分别以长度的天文单位-a.u.d.或简称a.u.表示距离。 (天文单位,即地球轨道的主要主要半轴的长度)和时间(以年为单位)。 在这些度量单位中,彗星的三维运动方程具有以下形式:

\ left \ {\ begin {matrix} \ frac {d ^ {2} x} {dt ^ {2}} =-\ frac {\ mu \ cdot x} {r ^ {3}} \\ \ frac { d ^ {2} y} {dt ^ {2}} =-\ frac {\ mu \ cdot y} {r ^ {3}} \\ \ frac {d ^ {2} z} {dt ^ {2} } =-\ frac {\ mu \ cdot z} {r ^ {3}} \ end {matrix} \ right。,(18)

(18)

其中:  mu=4 pi2r= sqrtx2+y2+z2

哈雷彗星日心轨道的构造
 from numpy import* from scipy.integrate import odeint import matplotlib.pyplot as plt from matplotlib.patches import Circle def f(y, t): y1, y2, y3, y4,y5,y6 = y return [y2, -(4*pi*pi*y1)/(y1**2+y3**2 +y5**2)**(3/2),y4,-(4*pi*pi*y3)/(y1**2+y3**2 +y5**2)**(3/2),y6,-(4*pi*pi*y5)/(y1**2+y3**2 +y5**2)**(3/2)] t = linspace(0,300,10001) y0 = [0.325514,-9.096111, -0.459460,-6.916686,0.166229,-1.305721] [y1,y2, y3, y4,y5,y6]=odeint(f, y0, t, full_output=False).T fig, ax = plt.subplots() plt.title("  (  ..,   ) \n    ") plt.xlabel('x(t)') plt.ylabel('y(t)') fig.set_facecolor('white') ax.plot(y1,y3,linewidth=1) circle = Circle((0, 0), 0.2, facecolor='orange') ax.add_patch(circle) plt.axis([1,-21,-1,29]) plt.grid(True) fig, ax = plt.subplots() plt.title("   \n    ") plt.xlabel('x(t)') plt.ylabel('z(t)') fig.set_facecolor('white') ax.plot(y1,y5,linewidth=1) circle = Circle((0, 0), 0.1, facecolor='orange') ax.add_patch(circle) plt.axis([1,-21,1,-11]) plt.grid(True) fig, ax = plt.subplots() plt.title("   \n    ") plt.xlabel('y(t)') plt.ylabel('z(t)') fig.set_facecolor('white') ax.plot(y3,y5,linewidth=1) circle = Circle((0, 0), 0.2, facecolor='orange') ax.add_patch(circle) plt.axis([-1,29,1,-11]) plt.grid(True) fig, ax = plt.subplots() plt.title("     \n   ZOX  ZOY ") ax.plot(t,y1,linewidth=1) ax.plot(t,y3,linewidth=1) plt.show() 


我们得到:









你自己的彗星

尝试一个实验。 晚上,您将望远镜安装在离家不远的小山顶上。 夜晚应该晴朗,万里无云,繁星密布,如果幸运的话向您微笑:在凌晨0.30时,您会注意到一颗新的彗星。

经过第二天晚上的反复观察,您将能够在第一天晚上计算其坐标。 日心轴坐标系中的坐标:P0 =(x0,y0,z0),速度矢量v0 =(vx0,vy0,vz0)。

使用此数据,确定:

  • 彗星到太阳的距离在近日点(最靠近太阳的轨道点)和顶峰(距离太阳最远的轨道点)处;
  • 穿过近日点和顶点时的彗星速度;
  • 彗星绕太阳公转的时期;
  • 接下来的两个日期,彗星穿过近日点。

如果我们以天文单位测量距离,并以年为单位测量时间,那么彗星的运动方程将采用(18)的形式。 对于您自己的彗星,选择与哈雷彗星相同顺序的任意起始坐标和速度。

如有必要,请重新选择初始位置和速度矢量,直到获得超出地球轨道的似真的偏心轨道为止(就像大多数真实的彗星一样)。

参考文献:


  1. Feynman R.,Leighton R.,Sands M. Feynman物理讲座。 第三版。 T.-1.-2。 M .:米尔,1977年。
  2. Matveev A.N.力学和相对论。 M .:更高。 学校,1986年。
  3. 物理百科全书。 T. 3. M .:《大俄罗斯百科全书》,1992年。
  4. Landau L.D.,Lifshits E.M.理论物理课程。 力学。 M .:富马吉兹(Fu-matgiz),1958年。
  5. Baskakov S.I.无线电工程电路和信号。 M .:更高。 1988年。
  6. 波什涅夫 使用mathcad软件包对物理过程进行计算机模拟。

Source: https://habr.com/ru/post/zh-CN419911/


All Articles