Я пытаюсь смоделировать орбиту планеты с помощью метода Compute_orbit, но когда я рисую полученные положения, я получаю прямую линию вместо ожидаемой эллиптической орбиты. Ниже приведены соответствующие части моего кода.
Фрагмент кода
def get_initial_conditions(self, planet_name):
planet_id = self.PLANETS[planet_name]
obj = Horizons(id=planet_id, location='@sun', epochs=2000.0)
eph = obj.vectors()
position = np.array([eph['x'][0], eph['y'][0], eph['z'][0]])
velocity = np.array([eph['vx'][0], eph['vy'][0], eph['vz'][0]])
scale_factor_position = 1
scale_factor_velocity = 1
return {
"position": np.array(position) / scale_factor_position,
"velocity": np.array(velocity) / scale_factor_velocity
}
def compute_orbit(self, central_mass=1.989e30, dt=10000, total_time=31536000):
initial_conditions_data = self.get_initial_conditions(self.planet_name)
initial_conditions = [
initial_conditions_data['position'][0], initial_conditions_data['velocity'][0],
initial_conditions_data['position'][1], initial_conditions_data['velocity'][1],
initial_conditions_data['position'][2], initial_conditions_data['velocity'][2]
]
def f(t, state):
x, vx, y, vy, z, vz = state
r = np.sqrt(x**2 + y**2 + z**2) + 1e-5
G = 6.67430e-11
Fx = -G * central_mass * self.mass * x / r**3
Fy = -G * central_mass * self.mass * y / r**3
Fz = -G * central_mass * self.mass * z / r**3
return [vx, Fx / self.mass, vy, Fy / self.mass, vz, Fz / self.mass]
t_span = (0, total_time)
t_eval = np.arange(0, total_time, dt)
sol = scipy.integrate.solve_ivp(
f,
t_span,
initial_conditions,
t_eval=t_eval,
rtol=1e-3,
atol=1e-6
)
x = sol.y[0]
y = sol.y[2]
z = sol.y[4]
positions = np.column_stack((x, y, z))
return positions
Я пробовал экспериментировать с различными начальными условиями, но всегда получаю прямые линии, отображающие данные. Ниже приведен минимальный воспроизводимый пример.
Фрагмент кода
Фрагмент кода
h3>
from astroquery.jplhorizons import Horizons
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def get_initial_conditions(planet_id):
obj = Horizons(id=planet_id, location='@sun', epochs=2000.0)
eph = obj.vectors()
position = np.array([eph['x'][0], eph['y'][0], eph['z'][0]])
velocity = np.array([eph['vx'][0], eph['vy'][0], eph['vz'][0]])
scale_factor_position = 1
scale_factor_velocity = 1
return {
"position": np.array(position) / scale_factor_position,
"velocity": np.array(velocity) / scale_factor_velocity
}
def compute_orbit(central_mass=1.989e30,rotating_mass=5.972e24, dt=10000, total_time=31536000):
initial_conditions_data = get_initial_conditions(399)
initial_conditions = [
initial_conditions_data['position'][0], initial_conditions_data['velocity'][0],
initial_conditions_data['position'][1], initial_conditions_data['velocity'][1],
initial_conditions_data['position'][2], initial_conditions_data['velocity'][2]
]
def f(t, state):
x, vx, y, vy, z, vz = state
r = np.sqrt(x**2 + y**2 + z**2) + 1e-5
G = 6.67430e-11
Fx = -G * central_mass * rotating_mass * x / r**3
Fy = -G * central_mass * rotating_mass * y / r**3
Fz = -G * central_mass * rotating_mass * z / r**3
return [vx, Fx / rotating_mass, vy, Fy / rotating_mass, vz, Fz / rotating_mass]
t_span = (0, total_time)
t_eval = np.arange(0, total_time, dt)
sol = scipy.integrate.solve_ivp(
f,
t_span,
initial_conditions,
t_eval=t_eval,
rtol=1e-3,
atol=1e-6)
x = sol.y[0]
y = sol.y[2]
z = sol.y[4]
positions = np.column_stack((x, y, z))
return positions
def plot_orbit(positions):
x = positions[:, 0]
y = positions[:, 1]
z = positions[:, 2]
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z, label='Orbit Path', color='blue')
ax.set_xlabel('X Position (m)')
ax.set_ylabel('Y Position (m)')
ax.set_zlabel('Z Position (m)')
ax.set_title('Planet Orbit Simulation')
ax.scatter(0, 0, 0, color='yellow', s=100, label='Central Mass (Sun)')
ax.legend()
ax.set_box_aspect([1, 1, 1])
plt.show()
positions = compute_orbit()
plot_orbit(positions)
Подробнее здесь: https://stackoverflow.com/questions/790 ... -of-an-ell
Почему моя симуляция планетарной орбиты дает прямую линию, а не эллиптическую орбиту? ⇐ Python
Программы на Python
1727643600
Anonymous
Я пытаюсь смоделировать орбиту планеты с помощью метода Compute_orbit, но когда я рисую полученные положения, я получаю прямую линию вместо ожидаемой эллиптической орбиты. Ниже приведены соответствующие части моего кода.
Фрагмент кода
def get_initial_conditions(self, planet_name):
planet_id = self.PLANETS[planet_name]
obj = Horizons(id=planet_id, location='@sun', epochs=2000.0)
eph = obj.vectors()
position = np.array([eph['x'][0], eph['y'][0], eph['z'][0]])
velocity = np.array([eph['vx'][0], eph['vy'][0], eph['vz'][0]])
scale_factor_position = 1
scale_factor_velocity = 1
return {
"position": np.array(position) / scale_factor_position,
"velocity": np.array(velocity) / scale_factor_velocity
}
def compute_orbit(self, central_mass=1.989e30, dt=10000, total_time=31536000):
initial_conditions_data = self.get_initial_conditions(self.planet_name)
initial_conditions = [
initial_conditions_data['position'][0], initial_conditions_data['velocity'][0],
initial_conditions_data['position'][1], initial_conditions_data['velocity'][1],
initial_conditions_data['position'][2], initial_conditions_data['velocity'][2]
]
def f(t, state):
x, vx, y, vy, z, vz = state
r = np.sqrt(x**2 + y**2 + z**2) + 1e-5
G = 6.67430e-11
Fx = -G * central_mass * self.mass * x / r**3
Fy = -G * central_mass * self.mass * y / r**3
Fz = -G * central_mass * self.mass * z / r**3
return [vx, Fx / self.mass, vy, Fy / self.mass, vz, Fz / self.mass]
t_span = (0, total_time)
t_eval = np.arange(0, total_time, dt)
sol = scipy.integrate.solve_ivp(
f,
t_span,
initial_conditions,
t_eval=t_eval,
rtol=1e-3,
atol=1e-6
)
x = sol.y[0]
y = sol.y[2]
z = sol.y[4]
positions = np.column_stack((x, y, z))
return positions
Я пробовал экспериментировать с различными начальными условиями, но всегда получаю прямые линии, отображающие данные. Ниже приведен минимальный воспроизводимый пример.
Фрагмент кода
Фрагмент кода
h3>
from astroquery.jplhorizons import Horizons
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def get_initial_conditions(planet_id):
obj = Horizons(id=planet_id, location='@sun', epochs=2000.0)
eph = obj.vectors()
position = np.array([eph['x'][0], eph['y'][0], eph['z'][0]])
velocity = np.array([eph['vx'][0], eph['vy'][0], eph['vz'][0]])
scale_factor_position = 1
scale_factor_velocity = 1
return {
"position": np.array(position) / scale_factor_position,
"velocity": np.array(velocity) / scale_factor_velocity
}
def compute_orbit(central_mass=1.989e30,rotating_mass=5.972e24, dt=10000, total_time=31536000):
initial_conditions_data = get_initial_conditions(399)
initial_conditions = [
initial_conditions_data['position'][0], initial_conditions_data['velocity'][0],
initial_conditions_data['position'][1], initial_conditions_data['velocity'][1],
initial_conditions_data['position'][2], initial_conditions_data['velocity'][2]
]
def f(t, state):
x, vx, y, vy, z, vz = state
r = np.sqrt(x**2 + y**2 + z**2) + 1e-5
G = 6.67430e-11
Fx = -G * central_mass * rotating_mass * x / r**3
Fy = -G * central_mass * rotating_mass * y / r**3
Fz = -G * central_mass * rotating_mass * z / r**3
return [vx, Fx / rotating_mass, vy, Fy / rotating_mass, vz, Fz / rotating_mass]
t_span = (0, total_time)
t_eval = np.arange(0, total_time, dt)
sol = scipy.integrate.solve_ivp(
f,
t_span,
initial_conditions,
t_eval=t_eval,
rtol=1e-3,
atol=1e-6)
x = sol.y[0]
y = sol.y[2]
z = sol.y[4]
positions = np.column_stack((x, y, z))
return positions
def plot_orbit(positions):
x = positions[:, 0]
y = positions[:, 1]
z = positions[:, 2]
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z, label='Orbit Path', color='blue')
ax.set_xlabel('X Position (m)')
ax.set_ylabel('Y Position (m)')
ax.set_zlabel('Z Position (m)')
ax.set_title('Planet Orbit Simulation')
ax.scatter(0, 0, 0, color='yellow', s=100, label='Central Mass (Sun)')
ax.legend()
ax.set_box_aspect([1, 1, 1])
plt.show()
positions = compute_orbit()
plot_orbit(positions)
Подробнее здесь: [url]https://stackoverflow.com/questions/79037379/why-does-my-planetary-orbit-simulation-produce-a-straight-line-instead-of-an-ell[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия