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 处数值;
- 动压随高度增加而减小(因密度下降),随速度平方增大。
若输出与上述标准值一致(误差在舍入范围内),则模型实现正确。
预期输出
对于示例输入 \( 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³)一致,验证了模型分段递推计算的正确性。