我有一个大学项目,要求我们使用 ODE 和 SciPy 的 odeint 函数模拟卫星接近火星。
我设法通过将二阶 ODE 转换为两个一阶 ODE 来在 2D 中模拟它。但是我被时间限制困住了,因为我的代码使用的是 SI 单位,因此可以在几秒钟内运行,而 Python 的 linspace 限制甚至不能模拟一个完整的轨道。
我尝试将变量和常量转换为小时和公里,但现在代码不断出错。
我遵循了这个方法:
http://bulldog2.redlands.edu/facultyfolder/deweerd/tutorials/Tutorial-ODEs.pdf
代码是:
import numpy
import scipy
from scipy.integrate import odeint
def deriv_x(x,t):
return array([ x[1], -55.3E10/(x[0])**2 ]) #55.3E10 is the value for G*M in km and hours
xinit = array([0,5251]) # this is the velocity for an orbit of period 24 hours
t=linspace(0,24.0,100)
x=odeint(deriv_x, xinit, t)
def deriv_y(y,t):
return array([ y[1], -55.3E10/(y[0])**2 ])
yinit = array([20056,0]) # this is the radius for an orbit of period 24 hours
t=linspace(0,24.0,100)
y=odeint(deriv_y, yinit, t)
我不知道如何从 PyLab 复制/粘贴错误代码,所以我拍摄了错误的 PrintScreen:
t=linspace(0.01,24.0,100) 和 xinit=array([0.001,5251]) 的第二个错误:
如果有人对如何改进代码有任何建议,我将不胜感激。
非常感谢!