本节摘要:数值模拟把微分方程变成步进计算:点质量与六自由度积分管飞行弹道,有限元管侵彻毁伤,专用程序管膛内两相燃烧。本节给出一个完整可运行的 RK4 弹道积分器(含阻力表插值),讲清六自由度模型多出的三个转动自由度、有限元求解侵彻的时间步约束与网格收敛检验,以及数值结果的两条通用质检线。9.1 节立了标尺,本节造主力工具。
位置感:这是全册技术的合流点——第 2 章的燃速方程、第 4 章的弹道方程、第 5 章的材料响应,都在数值框架里找到各自的求解器。1946 年 ENIAC 用几十秒算一条弹道,如今你的笔记本一秒能算上万条——工具的成本塌了,方法论没变:离散、步进、校验。
点质量积分器:三十行算完一条弹道。下面是本册的主角代码——RK4(四阶龙格-库塔)积分的点质量弹道,阻力系数按速度查表插值:
import math def drag_coefficient(mach): """简化阻力表(量级参考 G7 类弹形,实际工程用完整表)""" table = [(0.0, 0.12), (0.8, 0.13), (1.0, 0.30), (1.2, 0.34), (2.0, 0.30), (3.0, 0.26), (5.0, 0.22)] for (m1, c1), (m2, c2) in zip(table, table[1:]): if m1 <= mach <= m2: t = (mach - m1) / (m2 - m1) return c1 + t * (c2 - c1) return table[-1][1] if mach > table[-1][0] else table[0][1] def derivatives(state, m, d, rho0=1.225, g=9.8, a_scale=110.0): """状态 = [x, y, vx, vy];温度分层按海平面梯度折算声速""" x, y, vx, vy = state v = math.hypot(vx, vy) mach = v / (340.0 - 0.004 * y) # 声速随高度缓降 rho = rho0 * max(1.0 - y/11000.0, 0.30) # 指数分层的粗化版 Cd = drag_coefficient(mach) A = math.pi * (d/2)**2 Fd = 0.5 * rho * v*v * Cd * A return [vx, vy, -Fd/m * vx/v, -Fd/m * vy/v - g * a_scale/a_scale] def rk4_trajectory(v0=850.0, theta=45.0, m=45.0, d=0.155, dt=0.002): state = [0.0, 0.0, v0*math.cos(math.radians(theta)), v0*math.sin(math.radians(theta))] t = 0.0 while state[1] >= 0: k1 = derivatives(state, m, d) k2 = derivatives([s + 0.5*dt*k for s, k in zip(state, k1)], m, d) k3 = derivatives([s + 0.5*dt*k for s, k in zip(state, k2)], m, d) k4 = derivatives([s + dt*k for s, k in zip(state, k3)], m, d) state = [s + dt/6*(a + 2*b + 2*c + e) for s, a, b, c, e in zip(state, k1, k2, k3, k4)] t += dt return state[0], t R, T = rk4_trajectory() print(f"RK4 弹道:射程 {R/1000:.1f} km,飞行 {T:.0f} s")
RK4 每步要算四次导数(比欧拉法贵四倍),换来远高于欧拉法的精度阶——对弹道这类平滑问题,同样的步长下 RK4 误差小几个数量级。工程提示藏在代码里:步长折半测试是把关手段——dt 减半后结果变化小于千分之一,说明步长已够小;变化仍然明显,就继续减。这条测试比任何"理论最优步长"公式都可靠。
六自由度:补上转动。点质量不回答"弹丸姿势如何",六自由度模型在三个平动方程外加三个转动方程:俯仰、偏航、滚转——4.3 节的进动与章动、5.2 节提到的终点姿态,都由这组方程描述。代价是气动参数从 1 个(Cd)膨胀到几十个(各阶力矩系数、阻尼导数),每个都要风洞或自由飞行试验标定。选型口诀:只关心落点用点质量,关心姿态与散布才上六自由度。
有限元与两相流:显微镜档。侵彻问题(第 5 章)用显式有限元求解:靶板与弹体剖成数万到百万级网格,材料模型(本构、损伤、状态方程)描述每个单元在高压高应变率下的行为,时间步被 CFL 条件锁死——声波在一个时间步内不得穿越最小的网格单元,对金属靶这通常意味着亚微秒级步长、万步级循环。膛内燃烧(第 2 章)则由两相流程序处理:固相药粒床与气相燃气的耦合流动,燃烧面退缩与颗粒应力都在方程里。这两档计算的共同点是参数饥渴:材料本构参数差两成,穿深结果就能差三成——没有配套试验数据的仿真只是漂亮的动画。

有限元的结果依赖网格粗细——网格越细越接近真解,但成本越高。网格收敛性检验的标准动作:同一问题用粗、中、细三套网格各算一遍,关键量(如穿深)随网格加密收敛到稳定值,才说明结果可信;三套网格给出三个答案,说明结果还是网格的函数,不是物理的答案。这条纪律与 8.3 节的验证三段配套,构成仿真的完整质检:先确认算的是物理(收敛),再确认物理对不对(试验对照)。
💡 关键直觉:数值仿真的信任是分层建立的——算法对(真空标尺)、网格够(收敛检验)、参数准(试验标定)、验证域明(条件许可)。四层全过才算"结果",缺任何一层都叫"探索"。
工具就绪、标尺就位,还差最后一问:输入的误差会把输出污染成什么样——下一节的敏感性分析给出量化答案。