我试图解一个微分方程组,找到太阳和木星的轨道。但我没有一个好的轨迹,只有一些点。 你能帮忙吗?(“太阳”指太阳)
这是我的密码
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from mc_deriv import deriv
start = 0
end = 14*365
nbpas = end/10
t = np.linspace(start,end,nbpas)
M = M_Soleil + M_Jupiter
x0 = x_Jupiter - x_Soleil
y0 = y_Jupiter - y_Soleil
vx0 = vx_Jupiter - vx_Soleil
vy0 = vy_Jupiter - vy_Soleil
syst_CI = [x0,y0,vx0,vy0]
Sols=odeint(deriv,syst_CI,t,args=(M,))
x = Sols[:, 0]
y = Sols[:, 1]
vx = Sols[:, 2]
vy = Sols[:, 3]
初始化
x_Soleil = -7.139143380212696e-03 # (UA)
y_Soleil = -2.792019770161695e-03 # (UA)
x_Jupiter = +3.996321311604079e+00 # (UA)
y_Jupiter = +2.932561211517850e+00 # (UA)
vx_Soleil = -7.139143380212696e-03 # (UA*j^-1)
vy_Soleil = -2.792019770161695e-03 # (UA*j^-1)
vx_Jupiter = +3.996321311604079e+00 # (UA*j^-1)
vy_Jupiter = +2.932561211517850e+00 # (UA*j^-1)
M_Soleil = 2e30 # masse Soleil (kg)
M_Jupiter = 1.9e27 # masse Jupiter (kg)
r_Soleil = 696e6 # rayon Soleil (m)
以及外部功能
def deriv(syst,t,M):
G = 6.67e-11
x = syst[0]
y = syst[1]
vx = syst[2]
vy = syst[3]
dxdt = vx
dydt = vy
dvxdt = -(G*M*x)/((x**2+y**2)**(3/2))
dvydt = -(G*M*y)/((x**2+y**2)**(3/2))
return dxdt,dydt,dvxdt,dvydt
情节
plt.figure(figsize=(7, 5))
plt.title("Trajectoires Soleil-Jupiter")
#plt.xlabel("UA)")
#plt.ylabel("UA)")
plt.plot(x, y, '-', color="red")
plt.show()
好极了!真管用!!!!你知道吗
目前,我在您的代码中看到了以下问题,这些问题使您的观察结果无法重现(除了缺少参考值之外):
在初始数据中,长度单位是天文单位,时间单位是一天。引力常数的单位是
m^3 s^-1 kg^-2
,所以要把它们组合成一个公式,你需要把AU转换成m,这个因子是150e+09
,其中的立方体要分开。一天就是24*3600
秒,必须乘以。积分的时间间隔也应该以年为单位,此时你似乎想到天,第三个单位没有适当的换算系数。[已解决,un jour=一天]
从时间节点构造的划分来看,似乎您使用的是python2。然后指数
3/2
求值为1
整数除法,可以直接在指数中使用1.5
,它是二进制浮点格式的精确值。[实际上是python 3,那么第一个除法应该是显式整数]在复制初始数据时,会产生复制粘贴错误,初始位置和速度的数字相同,而实数应形成垂直向量。[没有在代码中解决,图像有正确的速度]为了寻找适合你位置的在线数据,NASA地平线系统给我提供了
2011-Nov-11 04:00
木星的位置和速度标准化到重心框架需要应用动量守恒,木星的质量足够大,仅仅减去速度可能会得到物理上错误的结果。[未解析,初始数据应该已经是重心,不需要校正]
物理常数的不同精度也会导致偏离参考位置的误差。目前最“脏”的常数是引力常数和质量,之后是年份的不确定性。您只能得到任何(正确的)计算结果的前两位数。
相关问题 更多 >
编程相关推荐