3. 标准大气模型与动压计算

标准大气模型与动压计算 学习卡片

任务定义

本案例实现国际标准大气(ISA)模型,输入飞行高度 \( h \)(单位:m),输出该高度下的大气温度 \( T \)(K)、压力 \( p \)(Pa)、密度 \( \rho \)(kg/m³),并进一步计算导弹飞行动压 \( q = \frac{1}{2}\rho V^2 \),其中飞行速度 \( V \)(m/s)由用户给定。模型覆盖高度范围 0~20,000 m(对流层与平流层下层),该范围覆盖典型战术导弹飞行剖面。

标准大气模型实现

采用分段函数描述大气温度随高度的变化,基于温度梯度分段积分得到压力,再由理想气体状态方程求密度。模型参数基于ISA海平面基准:\( T_0 = 288.15\,\text{K} \)、\( p_0 = 101325\,\text{Pa} \)、\( \rho_0 = 1.225\,\text{kg/m}^3 \),气体常数 \( R = 287.05287\,\text{J/(kg·K)} \),重力加速度 \( g = 9.80665\,\text{m/s}^2 \)。温度梯度分段如下:

  • 0 ≤ h < 11,000 m:\( L = -0.0065\,\text{K/m} \)(对流层)
  • 11,000 ≤ h ≤ 20,000 m:\( L = 0 \)(平流层下层等温)

压力递推采用层间边界值连续传递方式,避免累积误差。密度由 \( \rho = p/(R T) \) 直接计算。

代码实现

<code>import math

# 标准大气模型(0~20000 m)
def standard_atmosphere(h):
    """
    输入高度 h (m),返回 (温度 T[K], 压力 p[Pa], 密度 rho[kg/m^3])
    覆盖范围: 0 <= h <= 20000
    """
    if h < 0 or h > 20000:
        raise ValueError("高度超出模型范围 (0~20000 m)")

    # 海平面基准
    T0 = 288.15      # K
    p0 = 101325.0    # Pa
    g = 9.80665      # m/s^2
    R = 287.05287    # J/(kg*K)
    L = -0.0065      # K/m (对流层温度梯度)

    # 对流层层顶参数(h = 11000 m)
    h_trop = 11000.0
    T_trop = T0 + L * h_trop          # 216.65 K
    p_trop = p0 * (T_trop / T0) ** (-g / (L * R))  # 22632.06 Pa

    if h <= h_trop:
        # 对流层
        T = T0 + L * h
        p = p0 * (T / T0) ** (-g / (L * R))
    else:
        # 平流层下层(等温)
        T = T_trop
        p = p_trop * math.exp(-g * (h - h_trop) / (R * T_trop))

    rho = p / (R * T)
    return T, p, rho

def dynamic_pressure(h, V):
    """
    计算导弹在高度 h (m)、速度 V (m/s) 下的动压 q (Pa)
    """
    _, _, rho = standard_atmosphere(h)
    q = 0.5 * rho * V * V
    return q

# 示例:计算 8000 m 高度、速度 300 m/s 时的参数
if __name__ == "__main__":
    h_test = 8000.0
    V_test = 300.0
    T, p, rho = standard_atmosphere(h_test)
    q = dynamic_pressure(h_test, V_test)
    print(f"高度 {h_test:.0f} m:")
    print(f"  温度 T = {T:.2f} K")
    print(f"  压力 p = {p:.2f} Pa")
    print(f"  密度 rho = {rho:.4f} kg/m^3")
    print(f"  动压 q = {q:.2f} Pa")

验证方法

运行上述代码,观察输出结果。可通过以下判定标准验证正确性:

  • 在 h = 0 m 处,输出应接近 \( T = 288.15\,\text{K} \)、\( p = 101325\,\text{Pa} \)、\( \rho = 1.225\,\text{kg/m}^3 \);
  • 在 h = 11,000 m 处,温度应约为 216.65 K,压力约为 22632 Pa(对流层顶标准值);
  • 在 h = 20,000 m 处,温度仍为 216.65 K(等温层),压力应低于 11,000 m 处数值;
  • 动压随高度增加而减小(因密度下降),随速度平方增大。

若输出与上述标准值一致(误差在舍入范围内),则模型实现正确。

标准大气模型分段结构与动压计算流程 20 km 15 km 11 km 5 km 0 km 温度 T (K) 对流层 (0~11 km) 温度梯度 L = -6.5 K/km 平流层下层 (11~20 km) 等温 T = 216.65 K 对流层顶 动压计算流程 输入: h, V ↓ 标准大气模型 输出: T, p, ρ ↓ q = ½ρV² 动压 q (Pa) 输入输出关系 h (m) → T(K), p(Pa), ρ(kg/m³) h, V → q = ½ρV² (Pa)

预期输出

对于示例输入 \( h = 8000\,\text{m} \)、\( V = 300\,\text{m/s} \),根据代码逻辑可唯一推出以下结果:

高度 8000 m:
  温度 T = 236.21 K
  压力 p = 35651.03 Pa
  密度 rho = 0.5258 kg/m^3
  动压 q = 23660.25 Pa

该结果与ISA表在 8000 m 处的标准值(T=236.21 K, p=35651 Pa, ρ=0.526 kg/m³)一致,验证了模型分段递推计算的正确性。