我用这个代码作为一个项目的一部分来模拟3个物体的轨道。我在这一部分使用欧拉方法,但我得到一些错误,我不知道如何摆脱。你知道吗
import vpython as v
from numpy import arange, linspace, array
import numpy as np
np.seterr(divide='ignore')
Earth = array([-1.47E+11, 0, 0, -30290])
Mars = array([-2.07E+11, 0, 0, -26500])
def derivatives(Body1, Body2, t):
Mass_earth = 5.97E+24
Mass_mars = 6.42E+23
Mass_sun = 1.99E+30
Abs_Radius_earth = 1.47E+11
Abs_Radius_mars = 2.07E+11
Radius_earth = array([Body1[0], Body1[1]])
Radius_mars = array([Body2[0], Body2[1]])
ve = 1
vm = 1
G = 6.67408E-11
dvedt = (G*Mass_sun*Radius_earth)/(np.abs(Abs_Radius_earth))**3 + np.divide((G*Mass_mars*(Radius_mars-Radius_earth)), (np.abs(Radius_mars-Radius_earth))**3)
dvmdt = (G*Mass_sun*Radius_mars)/(np.abs(Abs_Radius_mars))**3 + np.divide((G*ME*(Radius_earth-Radius_mars)), (np.abs(Radius_earth-Radius_mars))**3)
dvedt = v.vector(float(dvedt[0]), float(dvedt[1]), 0)
return(ve, vm, dvedt, dvmdt)
Evol = array([Earth[2], Earth[3]])
Epol = array([Earth[0], Earth[1]])
Mvol = array([Mars[2], Mars[3]])
Mpol = array([Mars[0], Mars[1]])
E = array([Epol, Evol])
M = array([Mpol, Mvol])
for t in arange(1, 11, 1):
Evol += (t * derivatives(E, M, 1)[2])
E = array([Epol, Evol])
print(E, M)
以下是错误消息:
C:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:20: RuntimeWarning: invalid value encountered in true_divide
C:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:21: RuntimeWarning: invalid value encountered in true_divide
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-25-ef24509c2299> in <module>()
31
32 for t in arange(1, 11, 1):
---> 33 Evol += (t * derivatives(E, M, 1)[2])
34 E = array([Epol, Evol])
35 print(E, M)
<ipython-input-25-ef24509c2299> in derivatives(Body1, Body2, t)
20 dvedt = (G*Mass_sun*Radius_earth)/(np.abs(Abs_Radius_earth))**3 + np.divide((G*Mass_mars*(Radius_mars-Radius_earth)), (np.abs(Radius_mars-Radius_earth))**3)
21 dvmdt = (G*Mass_sun*Radius_mars)/(np.abs(Abs_Radius_mars))**3 + np.divide((G*ME*(Radius_earth-Radius_mars)), (np.abs(Radius_earth-Radius_mars))**3)
---> 22 dvedt = v.vector(float(dvedt[0]), float(dvedt[1]), 0)
23 return(ve, vm, dvedt, dvmdt)
24
TypeError: only length-1 arrays can be converted to Python scalars
这可能是一个简单的解决办法,但我只是似乎无法得到它的工作。我主要集中在地球的所有部分,如果我能得到工作,我会把它应用到其他行星(火星)。 任何帮助都会非常有用。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐