1. 项目概述从一道赛题看数学建模的实战思维又到了一年一度的全国大学生数学建模竞赛季后台和社群里关于国赛B题的讨论热度明显高了起来。很多同学尤其是第一次参赛或者之前成绩不太理想的队伍拿到题目后最头疼的就是“如何分析”。这感觉就像面对一个复杂的工程问题知道它很重要但不知道从哪里下第一铲子。2022年的国赛B题“无人机遂行编队飞行中的纯方位无源定位”就是一个非常经典的案例它完美地融合了物理背景、数学模型和算法实现对参赛者的综合能力提出了很高的要求。今天我就以这道题为例拆解一下拿到一个数学建模赛题后系统性的分析思路到底应该是怎样的。无论你是正在备赛还是对解决复杂问题感兴趣这套方法都能帮你理清头绪避免在开局阶段就陷入混乱。这道题的核心场景是多架无人机组成编队其中一架发射信号其余只能接收信号方向即方位角并且不知道自身位置。我们需要通过纯方位信息来定位这些接收无人机的位置并调整它们形成特定队形。这听起来像是一个纯粹的几何或优化问题但深入下去你会发现它涉及坐标系建立、观测模型、优化算法设计、误差分析等多个层面。适合分析的不仅仅是数学基础好的同学更是那些愿意把问题一层层剥开、乐于构建并求解模型的实践者。接下来我们就一步步拆解这个分析过程。2. 问题拆解与核心思路形成面对一个建模赛题切忌一上来就埋头推导公式或编写代码。第一步也是最重要的一步是进行彻底的问题拆解形成清晰的解决路线图。这决定了你后续所有工作的效率和方向。2.1 题目信息的深度咀嚼与转化首先必须逐字逐句地精读题目将自然语言描述转化为可操作的数学或逻辑语言。对于2022年B题我们需要提取出以下关键信息点实体与角色有若干架无人机。其中一架FY00是“发射信号”且“位置已知”的基准点。其余无人机FY01, FY02, ...是“仅接收方位信号”且“位置未知”的待定位点。可用信息对于每一架待定位无人机在多个时刻它能测量到FY00基准点和另外两架特定无人机的方向角方位角。注意题目给出的是“方向”是一个角度值而非距离。核心任务第一问在仅有方向角、无距离信息的条件下确定这些无人机的初始位置。第二问在初始定位的基础上设计调整策略使所有无人机包括FY00形成一个半径为100米的圆形编队。隐含条件无人机的移动需要满足速度、加速度等物理约束通常题目会给出如最大速度、最大加速度。约束与目标定位要准队形要圆调整过程要平稳即控制量不能突变。读完题目后我习惯用一张简单的实体关系图在草稿纸上画出来。对于本题就是画一个FY00在中心周围一堆点代表FY01-FY09然后在点之间标上“可观测方向”的箭头。这个可视化过程能立刻让你看清信息的流动路径所有位置信息都源于FY00这个已知点并通过方向角观测网络传递开来。这直接引出了我们的核心思路这是一个基于角度观测的网络定位问题并且由于缺少距离信息本质上是非线性估计问题。2.2 核心难点识别与破局点选择识别难点能帮助我们合理分配时间和精力。这道题的难点非常典型“纯方位”带来的模糊性只知道方向不知道距离这意味着一个观测角度对应着一条从观测点出发的射线目标可能在这条射线的任何位置。单点单次观测无法定位必须依靠多点观测交汇或单点移动观测。观测网络的稀疏性与依赖性题目给出的观测关系是特定的例如FY01只能看FY00、FY02、FY06并非所有无人机两两之间都能互相看见。这形成了一个特定的观测图。定位必须依赖于这个图结构信息可能无法直接传递到所有节点需要间接推算。从定位到控制的衔接第一问是静态估计问题第二问是动态控制问题。如何将定位的坐标结果平滑、高效地转化为无人机的控制指令如速度指令并满足物理约束是另一个挑战。破局点在于利用“多源信息融合”。虽然单次观测是模糊的但当一架无人机如FY01同时获得了来自三个不同参考点FY00 FY02 FY06的方向角时这三条射线理论上会交汇于一点——那就是FY01的真实位置。这就是三角交汇定位的基本思想。因此第一问的模型核心就是构建一个方程组对于每一架待定位无人机其位置坐标应使得其到每个观测参考点的连线方向与题目给出的测量方位角一致。注意这里存在一个巨大的陷阱题目给出的方位角是基于接收无人机自身机体坐标系的。例如FY01测量到FY00的方向角是某个值这个值是相对于FY01自己的“头”朝向而言的。而我们在建立全局数学模型时通常是在一个固定的全局坐标系例如以FY00为原点中进行的。因此必须进行坐标变换将机体坐标系的方位角转换到全局坐标系下。很多队伍忽略了这一点导致建立的方程根本无解或解的意义错误。这是审题和建模阶段必须厘清的关键。3. 数学模型构建与求解路径设计思路清晰后就要用数学语言精确描述问题。这一步是将现实问题“翻译”成计算机或数学工具能处理的形式。3.1 坐标系建立与观测方程建模首先建立全局直角坐标系。最方便的做法是以FY00为原点(0,0)。设第i架无人机的位置为(x_i, y_i)其中i0,1,2,...,9且(x_0, y_0) (0,0)。接下来是核心方位角观测模型。假设FY01观测FY00测得方位角为α_{01}题目给出。这里的α_{01}是指在FY01的机体坐标系中从FY01指向FY00的向量与FY01机体轴向比如机头方向的夹角。但题目通常为了简化可能隐含假设所有无人机的机体轴向在初始时刻是对齐的例如都指向东或者直接给出的是全局坐标系下的方位角。我们必须仔细阅读题目对角度定义的解释。如果题目给出的是全局方位角即与全局坐标系北向或东向的夹角那么建模就相对直接。从FY01(x_1, y_1)指向 FY00(0,0)的向量是(-x_1, -y_1)。该向量与正东轴或你定义的基准轴的夹角应等于α_{01}。用反正切函数表示就有arctan2(-y_1, -x_1) α_{01} 2kπarctan2是四象限反正切函数k为整数。然而由于周期性和噪声我们通常不直接解这个反三角函数方程而是利用正切函数的性质构建线性或非线性的等式约束。例如由方向角相等意味着向量(-x_1, -y_1)与单位方向向量(cos α_{01}, sin α_{01})是共线的即它们的叉积为零在二维中表现为斜率相等-y_1 / -x_1 sin α_{01} / cos α_{01}y_1 cos α_{01} - x_1 sin α_{01} 0。 这个方程漂亮地避免了反三角函数的周期性问题成为了一个关于x_1, y_1的线性方程这是一个非常重要的建模技巧。对于FY01它还能观测FY02和FY06。同理可以建立另外两个方程 从FY01指向FY02(x_2 - x_1, y_2 - y_1)与(cos α_{12}, sin α_{12})共线 (y_2 - y_1) cos α_{12} - (x_2 - x_1) sin α_{12} 0。 从FY01指向FY06(x_6 - x_1, y_6 - y_1)与(cos α_{16}, sin α_{16})共线 (y_6 - y_1) cos α_{16} - (x_6 - x_1) sin α_{16} 0。这样仅FY01一个节点我们就得到了三个方程。但方程中包含了FY01、FY02、FY06三个未知节点的坐标每个节点有x,y两个未知数。推广到整个网络我们会得到一个庞大的方程组每个方程都是关于坐标的线性或非线性约束。3.2 模型求解策略最小二乘法与优化算法我们得到的方程组其方程数量可能多于也可能少于未知数数量并且由于测量必然存在误差即使题目给的是精确值我们也应考虑模型的鲁棒性这些方程很可能无法同时严格成立。因此我们的目标从“求解方程”转变为“寻找一组坐标使得所有观测方程尽可能被满足”即最小化误差。定义误差函数对于每一个方位角观测例如FY01观测FY00其误差可以定义为e (y_1 cos α_{01} - x_1 sin α_{01})^2如果使用上述线性化形式。 将所有观测对应的误差平方求和就得到了总误差函数F(X) Σ e^2其中X是所有无人机坐标组成的向量。那么定位问题就转化为了一个无约束非线性最小二乘优化问题寻找X使得F(X)最小。为什么选择最小二乘数学性质好平方误差函数是光滑的便于求导可以使用梯度下降、高斯-牛顿法、Levenberg-Marquardt等高效算法。抗噪能力强相比直接解方程最小二乘能在有测量误差时给出一个统计意义上最优最大似然的估计前提是噪声服从高斯分布。框架灵活可以轻松融入额外的约束或惩罚项。例如如果我们知道某些无人机之间的大致距离范围可以将其作为惩罚项加入目标函数。求解算法选择 对于这种规模10架无人机20个变量的优化问题使用MATLAB的lsqnonlin函数、Python SciPy的least_squares函数或scipy.optimize.minimize都非常合适。这些函数内部实现了强大的优化算法如LM算法你只需要提供误差函数F(X)的计算方式即可。实操心得在编程实现时初始值的选取非常关键。由于问题非凸糟糕的初始值可能导致算法收敛到局部最优解甚至发散。一个实用的策略是利用FY00为原点根据第一个观测角度和一个合理的猜测距离比如所有无人机大概在几百米范围内为其他无人机生成一个粗略的初始位置。这个猜测距离不需要很准但必须保证所有无人机的大致相对位置关系正确。例如可以假设所有无人机到FY00的距离都是一个相同的合理值R然后根据方位角算出初始坐标。这个R的选择会影响收敛速度但一个好的优化算法通常能从一个不太差的初始点找到全局最优。4. 编队控制模型的设计与实现解决了静态定位问题我们就得到了无人机群的“快照”。第二问要求我们将这个松散的集群调整成一个半径为100米的完美圆形编队并且FY00位于圆心。这是一个典型的多智能体编队控制问题。4.1 从几何目标到控制律首先明确控制目标最终状态9架无人机FY01-FY09均匀分布在以FY00为圆心、半径为100米的圆周上。设目标位置为P_i^d (100 * cos(θ_i), 100 * sin(θ_i))其中θ_i是均分的角度例如FY01对应0度FY02对应40度...FY09对应320度。我们需要为每架无人机设计一个控制律生成速度指令v_i(t)使其从当前位置P_i(t)平滑地运动到目标位置P_i^d。最直观的方法是使用比例导航或PD控制的思想让速度指令与位置误差成正比。一种简单有效的控制律是v_i(t) k_p * (P_i^d - P_i(t))其中k_p 0是一个比例系数。这个控制律的物理意义很清晰距离目标越远速度指令越大方向直指目标。但是直接这样用有问题可能超速如果初始距离很远k_p乘以误差会得到一个很大的速度可能超过无人机最大速度v_max。机动性限制无人机加速度有限速度不能突变。直接给速度指令忽略了动力学模型。因此我们需要一个更实际的模型。通常我们可以将无人机简化为一个一阶或二阶积分器模型。一阶模型假设我们能直接控制速度。那么动力学是dP_i/dt v_i_cmd。我们设计的v_i_cmd就是上面的控制律但需要限幅v_i_cmd saturate( k_p * (P_i^d - P_i(t)), v_max )其中saturate函数将速度向量限制在最大幅值内。二阶模型假设我们能控制加速度或力速度是加速度的积分。动力学是dv_i/dt a_i_cmd, dP_i/dt v_i。这时我们可以设计一个PD控制器来生成加速度指令a_i_cmd k_p * (P_i^d - P_i(t)) k_d * (0 - v_i(t))。这个控制器不仅考虑位置误差还引入了速度阻尼k_d 0使无人机在接近目标时能平滑减速避免振荡。同样加速度指令a_i_cmd也需要限幅在最大加速度a_max内。对于国赛题目采用一阶模型并加上速度限幅通常就能得到一个可接受的解。如果题目明确提到了加速度约束则必须使用二阶模型。4.2 分布式与集中式控制的考量上面的控制律是“集中式”的每架无人机都需要知道全局目标P_i^d和自身的全局位置P_i(t)。在我们的场景中FY00是圆心它的目标位置就是原地不动。其他无人机通过第一问的定位算法可以实时或定期估算出自己的全局位置。因此集中式控制在这里是可行的。然而更高级的思路是考虑分布式控制每架无人机只与其邻居如编队中相邻的无人机通信通过保持与邻居的相对位置关系来最终形成整体队形。例如让每架无人机都试图与FY00保持100米距离同时与前后相邻的无人机保持一定的角度差。这种方法通信负担小鲁棒性更强。但对于这道题集中式方法思路直接易于实现和解释通常是更稳妥的选择。仿真实现步骤初始化载入第一问求解出的无人机初始位置P_i(0)。设置参数设定目标圆半径R100计算各机目标点P_i^d。设定控制器参数k_p,k_d以及物理限制v_max,a_max。循环仿真采用离散时间步进时间步长dt取一个较小值如0.1秒。对于每一架无人机除FY00计算位置误差e P_i^d - P_i(t)。根据控制律计算速度或加速度指令例如v_cmd k_p * e。对指令进行限幅v_cmd min(v_cmd, v_max)或按向量模长限幅。更新状态如果是一阶模型P_i(tdt) P_i(t) v_cmd * dt。如果是二阶模型需先更新速度v_i(tdt) v_i(t) a_cmd * dt限幅后再更新位置P_i(tdt) P_i(t) v_i(t) * dt。终止条件当所有无人机的位置与目标位置的距离都小于某个小阈值如0.1米或达到最大仿真步数时停止循环。可视化将每一帧的无人机位置画出来就能看到它们从初始散点逐渐汇聚成圆形的动态过程。这个动画是论文中非常有力的展示。5. 误差分析、灵敏度与模型优化一个完整的数学建模论文绝不能止步于“模型跑通了”。必须深入分析模型的可靠性、稳定性和局限性。这部分是拉开论文档次的关键。5.1 观测误差的传播分析第一问的定位模型严重依赖于方位角观测的精度。在实际中测量必然存在误差。我们需要分析如果方位角测量有一个小的偏差比如0.5度会导致定位结果产生多大的误差这属于灵敏度分析。我们可以进行蒙特卡洛模拟假设真实的无人机位置是某个值可以用第一问算出的结果作为“真实值”。在这些真实位置的基础上根据观测关系计算出“理论无噪”的方位角。在这些理论方位角上叠加一个符合一定分布如均值为0标准差为σ的高斯噪声的随机误差生成“带噪观测值”。将带噪观测值代入我们的定位模型最小二乘优化中重新求解无人机位置。比较重新求解的位置与“真实位置”的差距计算平均定位误差。重复上述过程成百上千次统计定位误差的分布情况均值、标准差。通过改变噪声水平σ我们可以绘制出“定位误差随观测噪声变化”的曲线。这个分析能有力地说明我们模型的鲁棒性即使观测有误差定位结果依然在可接受的范围内。如果发现模型对噪声极其敏感即很小的观测误差导致巨大的定位误差那就需要反思模型是否过于脆弱是否需要引入滤波算法如卡尔曼滤波或更稳健的估计方法。5.2 编队控制性能评估对于第二问的控制模型也需要进行全面的性能评估收敛性从不同的初始位置开始控制器是否都能稳定收敛到目标队形仿真时可以尝试几组不同的初始位置来测试。收敛速度与超调调整控制器参数k_p和k_d观察它们如何影响系统响应。k_p越大收敛越快但可能引起超调和振荡k_d提供阻尼能抑制振荡但过大又会使系统响应迟钝。可以展示不同参数下的无人机轨迹和距离误差随时间变化的曲线。约束满足度在整个调整过程中无人机的速度和加速度是否始终未超过题目给出的最大值需要在仿真中实时监控这些量并确保约束被满足。可以在论文中附上速度、加速度随时间变化的曲线图并标注出最大值限制线直观展示约束未被违反。队形精度最终形成的圆形有多“圆”可以计算最终所有无人机到FY00距离的标准差这个值越小说明圆形越均匀。也可以计算相邻无人机之间夹角的均匀度。5.3 模型的可能改进方向在基本模型完成后思考改进方向能体现思维的深度定位阶段的改进引入滤波如果考虑无人机在定位过程中是移动的可以将定位问题建模为动态系统状态估计问题使用扩展卡尔曼滤波EKF来融合多时刻的观测数据得到更平滑、更准确的轨迹估计。这比独立的静态定位更符合实际。考虑通信延迟观测数据的传输可能存在微小延迟在建立观测方程时引入时间戳对齐模型会更精确。控制阶段的改进避撞约束在向目标点移动的过程中无人机之间应避免碰撞。可以在控制律中增加一项“排斥势场”当两机距离小于安全阈值时产生一个相互排斥的力。这样控制律就变成了u_i 吸引力(指向目标) 排斥力(远离邻居)。最优控制可以将编队调整过程表述为一个最优控制问题在满足速度、加速度约束下最小化调整时间或总能耗。然后使用庞特里亚金最小值原理或数值优化如直接法来求解这能得到理论上性能更好的控制轨迹。分布式一致性控制如前所述设计仅基于邻居信息的分布式控制律并分析其收敛性。这能大大提升系统的可扩展性和鲁棒性。6. 论文写作与常见问题实录模型做完分析透彻最后一步是如何在论文中清晰、有力、规范地呈现你的工作。这部分往往决定了评委的第一印象。6.1 论文结构骨架与表达要点一篇完整的数学建模论文通常包含以下部分每一部分都有其写作要点摘要重中之重需用一段话概括整个工作针对什么问题建立了什么模型定位用最小二乘控制用PD采用了什么方法求解优化算法、数值仿真得到了什么结果定位精度、编队收敛时间有何特色进行了误差分析、参数调优。摘要要独立成篇避免出现图表和公式编号。问题重述与分析不要照抄题目。要用自己的语言提炼问题背景、条件和目标。重点展示你的分析过程可以画出信息流图、系统框图明确列出已知、未知和待求量。模型假设清晰合理的假设是模型的基石。例如“假设方位角测量噪声为零均值高斯白噪声”、“假设无人机可简化为质点模型”、“假设通信无延迟且无丢包”。假设要具体并简要说明其合理性。符号说明将文中用到的主要变量、符号列成表格写明含义和单位。这能极大提升论文的可读性。模型的建立与求解这是论文的核心。对应我们上面的分析应分为两大部分5.1 纯方位无源定位模型详细推导观测方程从方位角到线性约束的转化过程给出最小二乘目标函数说明求解算法如LM算法及初始值选取策略。5.2 编队形成控制模型给出无人机动力学模型一阶/二阶推导控制律说明参数整定方法和约束处理限幅。每一部分最后都应展示求解结果如定位坐标表格、定位误差、编队收敛过程动画截图。模型的分析与检验展示误差分析蒙特卡洛仿真结果图、灵敏度分析曲线、控制器参数影响分析图、约束满足情况图等。用数据和图表说话证明模型的可靠性和鲁棒性。模型的评价与推广客观评价模型的优点原理清晰、易于实现、鲁棒性好和缺点未考虑通信延迟、避撞等。提出可行的改进方向如引入EKF、增加避撞策略。参考文献规范引用。附录可以放置核心的程序代码关键函数而非全部。6.2 实操中踩过的“坑”与应对技巧结合多年经验和评审视角以下是同学们在解决此类问题时最容易出错的地方坐标系统一与角度定义混淆这是最高发的错误。务必在论文中明确画出全局坐标系并清晰定义题目中给出的方位角是相对于哪个坐标系、哪个基准方向如正北、正东的。在模型推导部分第一步就应该是坐标变换公式。忽略模型假设的陈述很多论文直接开始建模评委不知道你的模型建立在什么基础上。明确的假设能让你的模型边界清晰当结果有偏差时也知道可能是假设不成立导致的。求解算法描述过于笼统写“我们使用了最小二乘法”是远远不够的。要写明是“非线性最小二乘”使用了什么工具MATLAB的lsqnonlin或算法Levenberg-Marquardt以及如何设置初始值、迭代终止条件等关键参数。结果展示只有干巴巴的数字表格数据不直观。一定要有图定位结果可以画一张所有无人机位置的散点图用不同颜色和形状区分。编队控制过程必须做出动态轨迹图或至少几个关键时刻的“快照”图。误差分析、灵敏度分析更是要用曲线图来呈现。参数凭空而来控制器的k_p1.0是怎么来的要通过仿真实验展示不同参数下的系统响应说明你选择的参数是经过比较和权衡的。可以做一个简单的参数扫描画出“超调量/调节时间”随参数变化的曲线。缺乏定量分析定位误差有多大只说“误差很小”不行要给出均方根误差RMSE的具体数值。编队形成有多快要给出收敛时间。圆形有多圆要给出半径标准差。代码与模型脱节附录里的代码应该是你模型最直接的实现。确保代码结构清晰关键步骤有注释并且与论文中描述的算法流程一致。评委有时会快速浏览代码来验证你的工作是否扎实。最后关于时间管理一个实用的建议是用一天时间彻底吃透题目、完成建模和核心算法设计用一天时间编程实现、调试和产生主要结果用最后一天进行深入分析、绘制精美图表和撰写论文。论文写作要贯穿始终想到一点写一点不要全部堆到最后。保持论文的整洁、图表的美观和逻辑的连贯这些细节上的用心都能在评审时为你赢得宝贵的印象分。数学建模竞赛比拼的不仅是数学能力更是将复杂问题条理化、模型化、可视化和文档化的综合实践能力。