【发布时间】:2013-04-09 14:04:57
【问题描述】:
如何在 python 中设置三体问题?如何定义求解 ODE 的函数?
这三个方程是x'' = -mu / np.sqrt(x ** 2 + y ** 2 + z ** 2) * x、y'' = -mu / np.sqrt(x ** 2 + y ** 2 + z ** 2) * y和z'' = -mu / np.sqrt(x ** 2 + y ** 2 + z ** 2) * z。
写成 6 一阶我们有
x' = x2,
y' = y2,
z' = z2,
x2' = -mu / np.sqrt(x ** 2 + y ** 2 + z ** 2) * x,
y2' = -mu / np.sqrt(x ** 2 + y ** 2 + z ** 2) * y,和
z2' = -mu / np.sqrt(x ** 2 + y ** 2 + z ** 2) * z
我还想添加地球轨道和火星的路径,我们可以假设它是圆形的。
地球距离太阳149.6 * 10 ** 6 km,距离火星227.9 * 10 ** 6 km。
#!/usr/bin/env python
# This program solves the 3 Body Problem numerically and plots the trajectories
import pylab
import numpy as np
import scipy.integrate as integrate
import matplotlib.pyplot as plt
from numpy import linspace
mu = 132712000000 #gravitational parameter
r0 = [-149.6 * 10 ** 6, 0.0, 0.0]
v0 = [29.0, -5.0, 0.0]
dt = np.linspace(0.0, 86400 * 700, 5000) # time is seconds
【问题讨论】:
-
您特别想问什么?如果您有更具体的问题,人们可能会更有可能提供帮助。
-
@askewchan 我不知道如何输入 6 个一阶 ODE 作为函数,因为
integrate.odeint只会采用一阶方程。 -
您可以使用
integrate.ode求解高阶方程。 -
@askewchan 是的,如果您将它们写为第一顺序。但是我不知道之后如何定义函数。
-
顺便说一句,不要写
-149.6 * 10 ** 6,而是写-149.6e6:)
标签: python numpy matplotlib scipy differential-equations