如何修改科学模型初始值,使用Matplotlib绘制第二条卫星轨道曲线
你完全可以保留第一次运行生成的曲线,不需要手动复制粘贴数据,只需要把轨道计算逻辑封装为可传入自定义参数的函数,每次更换基准参数后重新计算数据,再叠加绘图即可。
核心原理
matplotlib的ax.plot()方法默认会在当前坐标系上叠加绘制新曲线,不会覆盖已有内容,只要你没有重新创建fig和ax对象,之前画的曲线都会保留。
完整实现代码
from typing import Any, Union import matplotlib.pyplot as plt def calculate_orbit(A:float=10, Cw:float=2.7, init_h:float=300000) -> tuple[list[float], list[float]]: data = [] t = 0 dt = 10 h = init_h 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]) return zip(*data) # 绘图部分,只创建一次画布和坐标系 fig, ax = plt.subplots() # 按需更换参数计算并叠加绘图 t1, h1 = calculate_orbit(init_h=300000, A=10) ax.plot(t1, h1, label='初始高度300km,迎风面积10㎡') t2, h2 = calculate_orbit(init_h=350000, A=10) ax.plot(t2, h2, label='初始高度350km,迎风面积10㎡') t3, h3 = calculate_orbit(init_h=300000, A=12) ax.plot(t3, h3, label='初始高度300km,迎风面积12㎡') # 设置坐标轴信息和图例 ax.set_xlabel('时间(秒)') ax.set_ylabel('高度(米)') ax.set_title("不同参数下卫星轨道高度变化") ax.legend() plt.show()
补充说明
- 你可以根据自己的对比需求调整
calculate_orbit的入参,把需要修改的基准参数都设置为函数入参即可 - 如需提升不同曲线的区分度,可以在
ax.plot中添加c='颜色值'、linestyle='线型'参数自定义样式 - 如果需要复用之前的计算结果,直接把函数返回的时间、高度数组保存为变量即可,无需手动复制数据
内容的提问来源于stack exchange,提问作者TiemeVDS
相关产品推荐
相关产品推荐

