简介:第八届MathorCup数学建模竞赛优秀论文C3289.pdf,面向备战数模竞赛的本科生、研究生及指导教师,聚焦陆基导弹打击航母的建模与算法设计。论文按赛题展开:将导弹飞行划分为发射段、两个中段过程与末段,建立静态分段轨道模型并用MATLAB绘制轨迹;针对移动航母引入三维坐标,形成动态参数方程,借助Excel与SPSS生成三维散点图;最后分析系统误差、随机误差及指令延迟下的命中率。压缩包仅含1个PDF文件,约511KB,内容紧凑,便于按问题梳理解题框架、学习分段建模与结果可视化。已有109人学习,可作为优秀论文范本对照复现,也为军事运筹、轨迹建模练习提供参考。
1. 先看交接条件:第八届数学建模竞赛优秀论文里的分段轨迹题怎么拿分
这道分段轨迹题,很多人一上来就急着列运动学公式,结果中间段一接就翻车。第八届数学建模竞赛优秀论文里这类三问结构,真正拉开分差的不是谁算得快,而是谁先把“交接条件”说清楚:每一段在什么时刻结束、位置是否连续、速度是否连续、受力方向切换后加速度怎么变。阅卷人扫一眼你的分段表,就能判断模型是不是闭环。
它考的是三件事:把实际运动拆成可计算的阶段,把阶段之间的边界写成方程,再用误差和命中率证明模型不是纸上谈兵。拿分顺序也很明确:第一问拿“分段清楚”,第二问拿“动态目标进方程”,第三问拿“误差有量级、命中率有区间”。适合正在准备数学建模竞赛、答辩陈述,或者被问“你为什么这样分段”的人。下面按考点、真题演练、易错点和答题套路往下拆。
2. 高频考点:三阶段分段轨迹模型怎么建、怎么验
2.1 发射段:类斜抛参数化与两个隐藏条件
发射段最容易被写成一句“导弹做斜抛运动”,然后直接套抛物线。阅卷人想看的不是这句话,而是你凭什么能套。题面给的是初速度竖直向上、牵引力大小恒定方向可变、发射段轨迹通常为抛物线。物体轨迹为抛物线的前提是合力大小方向恒定,且不与初速度同向;空气阻力处处与速度反向,大小还随速度变,一旦把它放进来,轨迹就不是标准抛物线。所以“忽略空气阻力”不是偷懒,而是让模型和题面假设对齐。
发射段可以拆成两个方向写。竖直方向受重力,初速度向上,写成:
y(t) = v0*t - 0.5*g*t^2 vy(t) = v0 - g*t水平方向受恒定牵引力,初速度为零,写成:
x(t) = 0.5*ax*t^2 vx(t) = ax*t消去时间 t,得到 y 关于 x 的表达式。这个表达式里有两个隐藏条件:第一,发射段在竖直速度减为零时结束,所以 t1 = v0/g,最大高度 h1 = v0^2/(2g);第二,水平牵引力 ax 不是随便给的,它要由中段需要的水平位移反推。答辩时被问“牵引力怎么定”,不要答“题目给的”,要答“先由总水平距离减去中段、末段水平位移,反推出所需的 ax,再用发射段结束时的水平速度作为中段初速度”。
面试官最想听的是:你为什么把发射段终点定在最高点,而不是定在某个固定时间?因为最高点处竖直速度为 0,中段第一过程正好可以从“竖直速度为零、水平速度已知”接上,交接条件最干净。
2.2 中段:两段受力的符号推导与连续光滑约束
中段是整道题的核心。题面说中段可设计为不同飞行轨道,论文里把它拆成两个过程:第一过程合力竖直向下,第二过程合力竖直向上,竖直速度逐渐减到 0,水平速度保持不变。这里最容易错的是符号。先规定向上为正,第一过程合力向下,竖直速度从 0 开始向下增加;第二过程合力向上,竖直速度从某个向下值减到 0。位置要连续,速度也要连续,否则轨迹会出现折角。
设第一过程竖直下落高度 h上,第二过程竖直下降高度 h下,中段总高度变化为 h上 + h下。第一过程结束时的竖直速度大小为 v中,则:
v中^2 = 2*(g + aF)*h上 0 - v中^2 = -2*(aF - g)*h下其中 aF 是牵引力产生的加速度大小。第二式写成这样,是因为第二过程合力向上,加速度方向与向下速度相反,速度平方在减小。两式联立,再加上 h上 + h下 等于中段总高度变化,就能解出 aF、v中、h上、h下。中段水平方向不受牵引力,水平速度始终等于发射段结束时的水平速度,所以中段水平位移等于水平速度乘以中段总时间。
连续光滑怎么验?列一张交接表:发射段终点 t1 的位置和速度,中段第一过程终点 t2 的位置和速度,中段第二过程终点 t3 的位置和速度,末段起点 t3 的位置和速度。每个交接点检查三件事:x 相等、y 相等、速度分量相等。只检查位置不检查速度,就是典型的“连续但不光滑”,轨迹图上会出现肉眼可见的折角。
提示:中段两个过程的受力方向相反,写方程前先画一条竖直方向的正方向箭头,所有速度和加速度都按同一正方向取符号,后面就不会反复改。
2.3 末段:平抛收尾与速度/时间窗口反推
末段题面通常给两个约束:末段飞行时间不超过某个上限,末段最大速度可达到某个值。这两个条件不是摆设,它们用来反推末段水平速度。末段只受重力,水平方向匀速,竖直方向自由落体,所以:
x(t) = vh*t y(t) = 0.5*g*t^2 v末^2 = vh^2 + (g*t)^2如果题面给末段时间上限 tmax 和最大速度 vmax,可以先令 t = tmax,由速度关系反解 vh;再用水平位移 L = vh*tmax 去核对总水平距离。如果总水平距离对不上,说明前面中段水平速度或发射段牵引力需要调整。答题时不要一上来就把 tmax 和 vmax 同时取到,要先判断这两个条件是“上限”还是“等号成立”。论文里把末段时间取到上限、最大速度取到给定值,是为了让水平速度可反推,但你要在假设里写清楚“按最保守时间窗口计算”。
面试追问“为什么末段水平速度等于中段水平速度”,答题思路是:末段撤去牵引力,水平方向不再受力,水平速度保持中段结束时的值;中段第二过程水平速度保持不变,所以末段水平初速度就是中段水平速度。这个链条要在论文里用一句话点明,不要让阅卷人自己猜。
2.4 真题演练:给定分段受力,写出总轨迹方程并验证
模拟题:某飞行器分三段飞行。发射段初速度竖直向上,大小 v0,水平牵引力产生恒定加速度 ax,竖直只受重力 g;中段第一过程合力向下,加速度大小为 g + aF,第二过程合力向上,加速度大小为 aF - g,水平速度保持不变;末段只受重力,水平初速度等于中段水平速度。给定各段结束时间 t1、t2、t3,要求写出总轨迹 y(x) 的分段表达式,并验证交接点连续光滑。
答题思路分四步。第一步,列时间节点表:0 到 t1 发射段,t1 到 t2 中段第一过程,t2 到 t3 中段第二过程,t3 之后末段。第二步,每段先写参数方程 x(t)、y(t),不要急着消 t;参数方程能直接看出交接点位置和速度。第三步,逐段消去 t,得到 y(x),每段注明定义域。第四步,把 t1、t2、t3 代入相邻两段,检查 y 值和 dy/dx 是否相等。dy/dx 可以用 (dy/dt)/(dx/dt) 算,比直接对消元后的式子求导更稳。
下面用一段 Python 代码演示“交接点位置和速度检查”的做法。代码只做数值检查,不替代推导。
import math # 模拟参数,单位统一为米、秒 v0 = 500.0 g = 9.8 ax = 6.0 aF = 9.96 t1 = v0 / g h1 = v0 * t1 - 0.5 * g * t1**2 # 发射段终点状态 x1 = 0.5 * ax * t1**2 y1 = h1 vx1 = ax * t1 vy1 = 0.0 # 中段第一过程:假设持续时间 dt1,竖直向下加速 dt1 = 3.0 t2 = t1 + dt1 x2 = x1 + vx1 * dt1 y2 = y1 - 0.5 * (g + aF) * dt1**2 vx2 = vx1 vy2 = -(g + aF) * dt1 # 中段第二过程:竖直减速到 0,反推所需时间 dt2 = abs(vy2) / (aF - g) t3 = t2 + dt2 x3 = x2 + vx2 * dt2 y3 = y2 + vy2 * dt2 + 0.5 * (aF - g) * dt2**2 vx3 = vx2 vy3 = vy2 + (aF - g) * dt2 # 检查交接点:位置差和速度差应接近 0 print("t1 交接位置差:", x1 - (0.5 * ax * t1**2), y1 - h1) print("t2 前后位置差:", x2 - (x1 + vx1 * dt1), y2 - (y1 - 0.5 * (g + aF) * dt1**2)) print("t3 竖直末速度:", vy3)代码里v0、g、ax、aF是题面参数或由题面反推的参数,t1是发射段结束时间,dt1、dt2是中段两个过程的持续时间。x1, y1和vx1, vy1是发射段终点状态;中段第一过程用向下加速公式更新位置和速度;第二过程用向上合力减速,反推出竖直速度降到 0 的时间。最后打印交接点差值,差值接近 0 才说明位置连续,vy3接近 0 才说明中段收尾干净。答辩时把这张检查表放上去,比只放一张轨迹图更有说服力。
注意:代码里的参数只是演示,正式答题要用题面给定值或由题面反推的值,并在论文里写清楚每个符号的单位。
3. 三维动态轨迹:移动目标下的参数方程与工具链
3.1 从二维到三维:坐标轴怎么选,目标运动怎么进方程
第一问目标静止,第二问目标运动,很多人第一反应是“把终点改成目标运动后的位置”。这个思路在论文里被明确舍弃,原因很简单:实际中你很难提前知道目标经过一段时间后到底在哪,预判终点只适合目标运动脚本完全已知的情况。更合理的做法是把目标运动写进约束,用三维参数方程描述飞行器位置,再让飞行器位置在命中时刻与目标位置重合。
坐标轴怎么选?以飞行器初始位置为原点,初始位置与目标初始位置连线方向为 Y 轴,水平面内从 Y 轴顺时针旋转 90 度为 X 轴,垂直水平面方向为 Z 轴,建立右手坐标系。目标沿某个已知方向匀速运动,就把目标速度分解到 X、Y 两个方向。发射段初始速度也要分解:Z 方向是竖直初速度,Y 方向有目标运动方向上的分速度,X 方向有横向分速度。这样每一段都能写成 x(t)、y(t)、z(t) 三个参数方程,而不是硬套二维 y(x)。
面试官最想听的是:你为什么增加第三维?因为目标运动不在原二维平面内,飞行器需要横向修正;只改终点不改进方程,模型仍然是“打固定点”,动态目标没有真正进模型。
3.2 参数方程写法:x(t), y(t), z(t) 的逐段平移
三维模型最容易乱在“平移”。每一段参数方程如果都以自己的起点为原点,图像上就接不起来;必须把上一段终点的坐标加到下一段方程里。以发射段为例,Z 方向受重力减速,Y 方向受牵引力加速,X 方向匀速:
x(t) = vx0*t y(t) = vy0*t + 0.5*ay*t^2 z(t) = vz0*t - 0.5*g*t^2到了中段第一过程,起点不再是原点,而是发射段终点 (x1, y1, z1),时间也要从 t1 开始算:
x(t) = x1 + vx1*(t - t1) y(t) = y1 + vy1*(t - t1) + 0.5*ay2*(t - t1)^2 z(t) = z1 + vz1*(t - t1) - 0.5*(g + aF)*(t - t1)^2这样写的好处是交接点自动连续:当 t = t1 时,后一段回到 (x1, y1, z1)。光滑性还要看速度:后一段在 t1 处的速度分量要等于前一段末速度。把这两个条件写进论文,阅卷人就知道你不是随手拼曲线。
下面用 Python 标准库生成三维散点数据,保存成 CSV,方便导入表格或统计绘图工具。代码只负责造点,不依赖额外绘图库。
import csv import math # 模拟三段参数方程,单位:米、秒 vx0, vy0, vz0 = 13.77, 4.06, 500.0 g = 9.8 ay = 4.98 aF = 9.96 t1, t2, t3 = 51.02, 54.11, 57.20 def stage1(t): return vx0*t, vy0*t + 0.5*ay*t*t, vz0*t - 0.5*g*t*t def stage2(t): x1, y1, z1 = stage1(t1) dt = t - t1 return x1 + vx0*dt, y1 + (vy0 + ay*t1)*dt, z1 - 0.5*(g + aF)*dt*dt def stage3(t): x2, y2, z2 = stage2(t2) dt = t - t2 # 中段第二过程竖直减速,这里用简化形式演示平移 return x2 + vx0*dt, y2 + (vy0 + ay*t1)*dt, z2 - 0.5*(aF - g)*dt*dt rows = [] for i in range(0, 121): t = t3 * i / 120.0 if t <= t1: x, y, z = stage1(t) elif t <= t2: x, y, z = stage2(t) else: x, y, z = stage3(t) rows.append([round(t, 4), round(x, 3), round(y, 3), round(z, 3)]) with open("trajectory_points.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["t", "x", "y", "z"]) writer.writerows(rows) print("生成点数:", len(rows)) print("起点:", rows[0]) print("终点:", rows[-1])代码里stage1、stage2、stage3分别对应三段参数方程,t1、t2、t3是交接时间,rows按等时间步长采样。stage2和stage3里都先把上一段终点坐标取出来,再加相对时间dt的位移,这就是“逐段平移”。x1, y1, z1和x2, y2, z2是平移基准,没有它们,三段曲线会各画各的。最后输出起点和终点,方便回代检查。
3.3 工具链考点:用表格造点、统计绘图看三维散点
论文里用表格软件生成密度合适的三维散点,再导入统计绘图工具看三维散点图。这个做法不是炫技,而是因为分段参数方程直接画连续三维曲线容易在交接处断掉,先离散成点再观察,能一眼看出轨迹有没有折线、有没有穿过目标、起点终点是否合理。答辩时被问“为什么不用直接画曲线”,答题思路是:分段函数在交接点需要验证,离散点能放大交接区域;散点密度按时间步长控制,交接点附近加密,既能看整体形状,也能检查局部连续。
步长怎么选?总时间除以步数,步数至少让每段有几十个点;交接点单独插入。检查三件事:起点是不是原点,终点是不是命中时刻目标位置,交接点前后坐标差是不是接近 0。只放一张三维散点截图,不写步长、不写回代结果,就是“工具截图当验证”,容易被追问到答不上来。
3.4 真题演练:目标匀速运动时,如何列“追上”条件
模拟题:目标从初始位置出发,沿与 Y 轴成 θ 角的方向匀速运动,速度 vt;飞行器三段参数方程已知,末段允许时间窗口为 [t3, tmax]。要求建立命中方程,并说明求解顺序。
答题思路:设命中时刻为 T。目标位置写成:
xT(T) = xT0 + vt*sin(theta)*T yT(T) = yT0 + vt*cos(theta)*T zT(T) = zT0飞行器位置用分段参数方程,根据 T 落在哪一段选对应表达式。命中条件是同一时刻位置重合:
x(T) = xT(T) y(T) = yT(T) z(T) = zT(T)三个方程里通常有一个用来定 T,另外两个用来校核。求解顺序是先假设 T 落在末段,用末段方程与目标方程联立,解出 T 后再检查 T 是否在 [t3, tmax];如果不在,回到中段或发射段重新假设。多解时取最早命中时刻,因为晚解可能对应“绕了一圈再命中”,不符合题面时间窗口。
下面用二分法演示一维命中时刻搜索,只用一个坐标方程定 T,再用另一个坐标回代检查。
import math def aircraft_y(t): # 简化演示:末段 y 方向匀速 y3 = 16217.65 vy = 984.66 return y3 + vy * (t - 54.11) def target_y(t): y0 = 15500.0 vt = 16.46 return y0 + vt * t def gap(t): return aircraft_y(t) - target_y(t) lo, hi = 54.11, 80.0 for _ in range(60): mid = (lo + hi) / 2 if gap(lo) * gap(mid) <= 0: hi = mid else: lo = mid T = (lo + hi) / 2 print("命中时刻约:", round(T, 4)) print("y 方向偏差:", round(gap(T), 6))代码里aircraft_y和target_y分别是飞行器末段 y 坐标和目标 y 坐标,gap是两者之差。二分法要求区间两端异号,所以先选一个包含命中的时间区间。T求出后还要代回 x、z 方程检查,不能只看 y 方向对上就宣布命中。答辩时把“同一时刻位置重合”和“时间落在末段窗口”两句话说出来,比只写“求交点”更清楚。
4. 误差与命中率:阅卷人看的是“误差怎么进来的”
4.1 假设逐条反推:空气阻力、控制延迟、地球自转
误差分析不要写成“存在误差,需要改进”这种空话。正确姿势是拿模型假设逐条反推:每条假设去掉后,误差从哪进来、影响哪个方向、大概什么量级、能不能修正。空气阻力被忽略,真实飞行中阻力与速度反向,会使水平射程偏小或竖直速度衰减加快;控制延迟被忽略,指令发出到执行有时间差,飞行器在这段时间里继续按原状态运动,产生位移偏差;地球自转被忽略,长射程飞行中科里奥利力会让轨迹产生横向偏移。三条假设对应三类误差,表格一列就清楚。
| 误差源 | 对应假设 | 影响方向 | 量级估计 | 修正方式 |
|---|---|---|---|---|
| 空气阻力 | 忽略阻力 | 射程偏大、速度偏大 | 与速度平方相关 | 加阻力项或数值积分 |
| 控制延迟 | 理想控制系统 | 命中点滞后 | 速度乘延迟时间 | 把延迟写进末段方程 |
| 地球自转 | 忽略自转 | 横向偏移 | 随射程和时间增大 | 加科里奥利项 |
面试追问“哪个误差最大”,不要拍脑袋。先看题面参数:如果末段时间窗口很短,控制延迟影响可能更直接;如果射程很长,自转和阻力不能忽略。答题时给比较依据,不给绝对结论。
4.2 命中率不是拍脑袋:把延迟转成位移偏差
论文里命中率分析抓住一个具体因素:控制系统发出指令到飞行器接收、作出调整之间存在延迟。这个延迟直接变成位移偏差。设飞行器末段水平速度为 v,延迟时间为 τ,则延迟造成的位移偏差为:
d = v * τ设目标在命中方向上的有效半宽为 a,简化认为偏差落在 [0, a] 内算命中,延迟在 [0, τmax] 内均匀分布,则命中概率为:
P = a / (v * τmax) (当 a < v*τmax) P = 1 (当 a >= v*τmax)如果考虑偏差可正可负,命中区间变成 [-a, a],概率分母变成 2vτmax,分子变成 2a,结果仍是 a/(v*τmax)。关键不是公式多漂亮,而是你把“延迟分布”和“命中域”说清楚。答辩时被问“为什么用均匀分布”,答“题面没有给延迟分布,均匀分布是最保守的可计算假设;如果有实测数据,可以换成正态或截尾分布,方法是同样的积分”。
4.3 真题演练:给一个延迟参数,算命中概率区间
模拟题:末段水平速度 v = 300 m/s,目标有效半宽 a = 20 m,控制延迟 τ 在 [0, 0.2] s 内均匀分布。求命中概率,并说明如果延迟上限翻倍,概率怎么变。
先算最大偏差:vτmax = 3000.2 = 60 m。因为 a = 20 m < 60 m,所以 P = 20/60 = 1/3。如果 τmax 翻到 0.4 s,最大偏差变成 120 m,P = 20/120 = 1/6。代码可以做成参数化计算:
def hit_probability(v, a, tau_max): max_dev = v * tau_max if max_dev <= a: return 1.0 return a / max_dev for tau in [0.2, 0.4]: p = hit_probability(300.0, 20.0, tau) print(f"tau_max={tau}s, 命中概率={p:.4f}")代码里v是末段水平速度,a是目标有效半宽,tau_max是延迟上限。max_dev是最大位移偏差,如果它小于等于目标半宽,说明最坏情况也能命中,概率取 1;否则按比例算。这个模型很粗,但量纲清楚、假设可查,比写“命中率较高”强得多。论文里再把“只考虑控制延迟、未叠加阻力与自转”写进局限性,阅卷人就知道你有边界意识。
4.4 论文写法:误差分析表怎么列
误差分析表至少四列:误差源、对应假设、影响方向、量级估计。能加第五列“修正方式”更好。量级估计不要写“较大”“较小”,要写“速度量级的百分之几”“时间量级的零点几秒”“距离量级的几十米”。如果不会精确算,就用题面参数做保守估计,并注明“按最不利情况估计”。命中率部分先写偏差来源,再写偏差分布,再写命中域,最后给概率区间。顺序乱了,阅卷人会认为你是先有结论再补公式。
提示:误差分析和命中率分析要共用同一套符号,不要前文用 τ 表示延迟,后文又用 Δt 表示同一个量。
5. 易错点:分段轨迹题最常丢分的四类答法
5.1 错把“连续”当“光滑”:交接点只对位置不对速度
错在哪:很多答案在交接点只写“两段轨迹在 t1 时刻位置相同”,然后就宣布模型连续,轨迹图上却出现折角。为什么错:位置连续只保证曲线不断开,速度连续才保证曲线光滑;题面明确要求轨道曲线连续且光滑,速度不连续意味着加速度出现冲激,物理上不合理,数学上导数不存在。怎么答对:每个交接点列两张检查表,一张位置表,一张速度表;速度用参数方程对时间求导,分别检查 x、y、z 三个分量;如果某一分量不连续,回到受力分析,看是不是漏了冲量或时间平移写错。
答辩时被问“为什么速度必须连续”,答题思路是:飞行器运动状态不能瞬间跳变,受力可以切换,但速度是状态量,切换时刻前后速度应一致;如果题面允许瞬间改变牵引力方向,那改变的是加速度,不是速度。把这句话写进模型假设,后面检查就有依据。
5.2 错把预判终点当动态模型:目标运动不是换个终点
错在哪:第二问直接把第一问的终点改成“目标运动一段时间后的位置”,然后仍用二维静态模型算。为什么错:目标运动后位置只是命中点变了,飞行器在中段、末段的横向修正没有进方程;实际中你也无法提前知道目标最终位置,预判终点相当于开了上帝视角。怎么答对:把目标位置写成时间的函数,把飞行器位置也写成时间的函数,用同一时刻位置重合列命中方程;增加第三维坐标,让横向速度、横向位移有地方放;在论文里明确写“舍弃预判终点模型,因为它把动态目标退化成固定点”。
面试官最想听的是:动态模型和静态模型的区别不在终点坐标,而在方程里有没有目标运动项。你把目标速度分解到 X、Y 轴,写进命中条件,才叫动态。
5.3 错把误差分析写成文字题:没有量纲和数量级
错在哪:误差分析写“空气阻力会影响轨迹,控制延迟会造成偏差,地球自转不能忽略”,三句话没有公式、没有单位、没有数量级。为什么错:阅卷人无法判断这些误差到底多大,也无法比较哪个该优先修正;数学建模竞赛的误差分析要能落到模型参数上。怎么答对:每条误差写“误差源 → 影响哪个方程 → 偏差表达式 → 代入题面参数的量级”。比如控制延迟写成 d = v*τ,代入速度和延迟上限,给出米级偏差;空气阻力写成与速度平方相关的项,说明在哪个阶段影响最大;地球自转写成科里奥利加速度,说明随射程和时间增大。
注意:量级估计可以用题面参数做保守上限,但要注明“按最不利情况估计”,不要把估计值写成实测值。
5.4 错把工具截图当验证:没有残差/回代/边界检查
错在哪:论文里放一张三维散点图,图下写“轨迹合理”,但没有起点、终点、交接点回代,也没有残差。为什么错:图好看不代表方程对,分段参数方程最容易在平移和符号上出错,截图看不出来。怎么答对:至少做三项回代:起点代入是否等于原点,终点代入是否等于命中时刻目标位置,交接点代入相邻两段是否相等;再做一项边界检查:末段时间是否落在允许窗口,竖直速度在中段结束时是否接近 0。把回代结果列成小表,比十张图都管用。
答辩时被问“你怎么证明模型对”,不要只说“图像吻合”,要说“我在三个交接点做了位置和速度回代,最大偏差小于某个量级;末端命中时刻在时间窗口内;三条假设对应的误差量级已列在表中”。
6. 答题技巧:拿到分段轨迹题,先走这五步
拿到题先别写公式,先做一张五步检查表。第一步,划阶段:题面说几段就分几段,每段写清起止条件和受力方向。第二步,列交接表:每个交接点写位置、速度、时间,先不代入数值。第三步,写参数方程:每段先写 x(t)、y(t)、z(t),再考虑消元。第四步,回代验证:起点、终点、交接点各查一次,速度分量也要查。第五步,补误差和命中率:每条假设对应一个误差源,每个误差源给一个量级,命中率给区间不给单点。
| 步骤 | 动作 | 检查点 |
|---|---|---|
| 1 | 划阶段 | 每段受力方向是否唯一 |
| 2 | 列交接表 | 位置、速度、时间是否齐全 |
| 3 | 写参数方程 | 时间平移是否加上一段终点 |
| 4 | 回代验证 | 起点、终点、交接点是否闭合 |
| 5 | 误差与命中率 | 量纲、数量级、分布假设是否写清 |
代码检查可以写成一个小函数,每次改参数先跑一遍:
def check_handover(pos_before, pos_after, vel_before, vel_after, tol=1e-6): pos_gap = max(abs(a - b) for a, b in zip(pos_before, pos_after)) vel_gap = max(abs(a - b) for a, b in zip(vel_before, vel_after)) return {"位置最大差": pos_gap, "速度最大差": vel_gap, "位置通过": pos_gap < tol, "速度通过": vel_gap < tol} result = check_handover((702.775, 13170.363, 12755.102), (702.775, 13170.363, 12755.102), (13.7745, 984.66158, 0.0), (13.7745, 984.66158, 0.0)) print(result)这个函数只做一件事:比较交接点前后位置和速度的最大分量差,tol是容差。位置差和速度差都小于容差才通过。每次改完分段方程,先跑它,再画图。从那以后我每次做分段轨迹题,都强制先列交接表、再写方程、最后回代,不让自己被一张好看的轨迹图骗过去。希望帮到你。
本文还有配套的精品资源,点击获取