You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用Matplotlib绘制科学模型计算的卫星轨迹时间-高度曲线图

问题解答

不需要推导显式的曲线公式,直接使用数值模拟得到的离散点位就可以绘制t-h曲线图,你当前无法正常出图是代码存在两处逻辑错误:

  • 数据存储逻辑错误:你将数据写入data的代码放在了while循环外部,仅存储了模拟结束后最后一组高度、时间数据,没有收集整个模拟过程的所有点位
  • 绘图入参错误:调用ax.plot(t, h)时传入的是单个的时间、高度数值,matplotlib绘制折线图时单个点位无法生成连续曲线,也几乎不可见

修改后可正常运行的代码

from typing import Any, Union

import matplotlib.pyplot as plt
import numpy as np

data = []
t = 0
dt = 10

A = 10
Cw = 2.7
h = 300000
h0 = h
G = 6.67384 * 10 ** -11
M = 5.972 * 10 ** 24
m = 209.4 * A ** (3 / 2)

r = 6371000 + h
v: Union[float, Any] = (G * M / r) ** .5

vx = v
vy = 0
Px = 0
Py = r

while 0 < h < h0 + 100000:
    t = t + dt

    r = (Px ** 2 + Py ** 2) ** .5
    Fg = G * M * m / r ** 2
    Fgx = -Fg * Px / r
    Fgy = -Fg * Py / r

    h = r - 6371000
    if h > 600000:
        z = 1.607 * 10 ** -11 * 0.991169 ** (h / 1000)
    else:
        if h > 139000:
            z = 3.848 * 10 ** -8 * 0.978294 ** (h / 1000)
        else:
            z = 1.225 * 0.863697 ** (h / 1000)
    v = (vx ** 2 + vy ** 2) ** .5
    Fwl = 0.5 * z * Cw * A * v ** 2
    Fwlx = -Fwl * vx / v
    Fwly = -Fwl * vy / v

    ax = (Fgx + Fwlx) / m
    ay = (Fgy + Fwly) / m
    vx = vx + ax * dt
    vy = vy + ay * dt
    Px = Px + vx * dt
    Py = Py + vy * dt

    # 每次循环都存储当前的时间、高度数据
    data.append([t, h])

# 拆分时间序列和高度序列
t_list = [item[0] for item in data]
h_list = [item[1] for item in data]

fig, ax = plt.subplots()
ax.plot(t_list, h_list)
# 增加坐标轴标签提升可读性
ax.set_xlabel('时间 / s')
ax.set_ylabel('高度 / m')
plt.show()

内容的提问来源于stack exchange,提问作者TiemeVDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:09:00