
简介这份资源是2022年全国大学生数学建模竞赛本科组B题的完整研究论文聚焦无人机纯方位无源定位问题适合备战数模竞赛的本科生、指导教师及对编队控制建模感兴趣的读者参考。论文围绕圆形与锥形两种编队展开涵盖被动接收信号无人机的定位模型、发射信号无人机数量的确定、初始位置偏差下的逐步调整方案并借助二维直角坐标系、余弦定理与“三圆共点”思想求解配套MATLAB编程实现数值计算与轨迹可视化。资源包共1个PDF文件大小约2.63MB内容完整、排版规范可直接用于赛题复盘与方法迁移。该论文曾获河北省一等奖目前已有8040人学习下载读者可从中获取建模思路、公式推导过程与MATLAB求解框架理解如何将几何关系转化为可计算模型对提升竞赛论文写作与算法实现能力有较高参考价值。1. 从一道国赛B题说起纯方位无源定位到底难在哪2022年全国大学生数学建模竞赛本科组B题题目背景是无人机集群编队飞行。编队要保持队形但飞行中又不能靠主动雷达或电磁波持续通信——信号本身就是暴露源。于是问题落到一个很实际的工程约束上只靠无人机之间互相“看”到的方位角能不能把位置算出来、把队形调回来。这道题当年让不少队伍卡在问题一第二小问因为它考的不是套公式而是“信息够不够”的判断。这篇方案把整道题的建模链路拆开定位模型怎么建、额外发射机数量怎么定、圆形和锥形两种编队的调整方案怎么落地最后给出用 MATLAB 复现和答辩验收的完整路径。适合正在做数模毕设、课程设计或者需要交一份完整建模方案的人直接参考结构。2. 需求拆解与总体建模框架四问对应四层模型2.1 把题目翻译成可计算的四个子问题拿到题先别急着写公式先把四问拆成四个可以独立验证的子任务。问题一第一小问是“已知三架无偏差发射机求一架有偏差接收机的实际位置和理想位置”本质是一个几何反解问题第二小问是“0号和1号已发射还要几架才能唯一确定”本质是信息量判定问题第三小问是“给定初始偏差怎么一步步调回理想位置”本质是迭代搜索问题问题二是“换成锥形编队调整方案怎么改”本质是模型迁移问题。这四层是递进的第一层解决“能不能算”第二层解决“信息够不够”第三层解决“怎么动”第四层解决“换个队形还成不成立”。我一般会建议队伍在论文里就把这个递进关系画成一张框架图答辩时评委一眼就能看出你不是四问各写各的而是共用一套几何内核。从技术选型看整道题的核心工具只有三样二维直角坐标系、余弦定理、枚举加遍历。听起来朴素但难在每一步的坐标系约定要前后一致。题目里九架无人机均匀分布在半径 r 的圆周上相邻夹角 40 度这个 40 度是后面所有角度计算的基准一旦某一步把编号和角度对应错了后面全盘皆输。所以建模第一步不是写方程而是先把编号、角度、坐标三者的对照表钉死。2.2 坐标系与编号约定所有公式的地基圆形编队里 0 号在圆心1 到 9 号均匀分布在圆周上。把 1 号固定在 x 轴正方向那么第 k 号无人机的理想坐标就是 (r·cos((k-1)·40°), r·sin((k-1)·40°))。这个约定看起来是小事但它是后面余弦定理能直接套用的前提。很多队伍翻车就翻在这里正文里说 1 号在 x 轴代码里却按 0 号起算算出来的角度整体偏了 40 度图上一看轨迹是歪的还以为是模型错了。% 圆形编队理想坐标生成1号固定在x轴正方向相邻夹角40度 r 100; % 编队半径单位米 theta 0:40:320; % 1到9号对应的极角 ideal zeros(9, 2); for k 1:9 ideal(k, :) [r*cosd(theta(k)), r*sind(theta(k))]; end % ideal(k,:) 即第k号无人机的理想直角坐标这段代码把“编号到坐标”的映射一次性生成后面所有定位和调整都引用这张表避免手写坐标出错。参数 r 在问题一第三小问里明确是 100 米前两小问可以先用符号 r 推导最后再代入数值。注意 theta 用 0 到 320 而不是 40 到 360是因为 1 号对应 0 度这个偏移量必须在全文统一。2.3 定位模型的两层含义实际位置与理想位置题目里“定位模型”其实有两种读法方案里必须分开写清楚否则评委会觉得你概念混淆。第一种是“根据接收到的方位信息反解自己当前在哪”也就是实际位置第二种是“根据三架已知无偏差发射机算出自己应该在哪”也就是理想位置。这两层在数学上是同一套余弦定理的两次使用但输入输出不同。实际位置的求解思路是设接收机为 P两架发射机为 A、B圆心发射机为 O。已知三条边的部分长度和三个夹角用余弦定理联立方程组解出 P 到各发射机的距离再转成坐标。理想位置的求解思路更巧妙一个动点到两个定点的夹角是定值它的轨迹是上下对称的两段圆弧三架已知发射机给出三条这样的轨迹三圆共点交点就是理想位置。这个“三圆共点”是整道题最漂亮的一步也是答辩时最值得讲的一点。提示实际位置和理想位置在论文里要用不同的符号体系比如实际位置用 (x_p, y_p)理想位置用 (x_p*, y_p*)否则读者分不清你算的是哪一个。3. 定位模型与发射机数量判定从余弦定理到枚举搜索3.1 用余弦定理反解接收机坐标先看实际位置的求解。设三架发射机编号为 i、j、k接收机为 p。已知编队半径 r任意两架圆周上无人机的弦长可以用 2r·sin(Δθ/2) 算其中 Δθ 是编号差乘 40 度。三个方位角 α1、α2、α3 是接收机测到的、分别对应三对发射机的夹角。设接收机到三架发射机的距离为 d_i、d_j、d_k对每个三角形用余弦定理列方程% 已知三架发射机编号与三个方位角反解接收机坐标 syms di dj dk % 发射机之间的弦长编号差转角度差 a_ij 2*r*sind(abs(i-j)*40/2); a_ik 2*r*sind(abs(i-k)*40/2); a_jk 2*r*sind(abs(j-k)*40/2); % 三个余弦定理方程 eq1 (di^2 dk^2 - a_ik^2)/(2*di*dk) - cosd(alpha2); eq2 (di^2 dj^2 - a_ij^2)/(2*di*dj) - cosd(alpha1); eq3 (dj^2 dk^2 - a_jk^2)/(2*dj*dk) - cosd(alpha3); sol solve([eq1, eq2, eq3], [di, dj, dk]);三个未知数三个方程理论上可解。实际编程时要注意 solve 可能返回多组解需要按“距离为正、且落在编队合理范围内”筛掉增根。解出距离后再用一次余弦定理求接收机相对某架发射机的极角转成直角坐标。这一步的坑在于角度象限判断余弦定理只能给出 0 到 180 度的角接收机可能在发射机连线的两侧必须结合方位角的符号或几何位置确定象限否则坐标会镜像翻转。3.2 三圆共点理想位置的几何本质理想位置的求解不依赖接收机自己测到的距离只依赖三架已知无偏差发射机的位置和三个方位角。核心引理是平面上到两个定点张角为定值的点轨迹是过这两点的一段圆弧定角为锐角时是“葫芦”形钝角时是“眼睛”形这是原方案里的形象说法。三架发射机两两组合给出三条轨迹三条轨迹的公共交点就是唯一理想位置。这个引理的证明在论文里值得单独写一小节因为它把“解方程”提升成了“几何构造”答辩时更有说服力。实现上不必真的去画圆弧求交而是回到余弦定理把三个方位角用已知边和未知边表示联立求解。原方案里用多次余弦定理把三条轨迹方程化成关于接收机坐标的方程组本质和三圆共点是一回事只是用代数方式落地。注意三圆共点要求三架发射机不共线。圆形编队里 0 号在圆心、另外两架在圆周上只要不是正好对径就不会共线这个条件在选题号时要检查。3.3 额外发射机数量枚举 56 种组合找最小残差问题一第二小问是整道题的分水岭。0 号和 1 号已经发射接收机只测到一个方位角轨迹是一整条圆弧位置不唯一。再加一架发射机接收机就有三个方位角对应三对发射机理论上可唯一确定。题目问“需要额外增加几架”答案是 1 架但论文不能只写结论必须证明“1 架够、0 架不够”。证明“0 架不够”很直接一个方位角对应一条轨迹轨迹上每一点都满足无法唯一。证明“1 架够”需要枚举除 0、1 号外还有 8 架候选发射机接收机也有 8 种选择组合起来是 8×756 种情况。对每种情况算出三个方位角的准确值再和实测偏差值比较取平方和最小的一组对应的那架就是需要额外加入的发射机。% 枚举额外发射机遍历候选机找方位角残差平方和最小者 best inf; best_j -1; for j 2:9 if j p, continue; end % 接收机自己不能当发射机 % 计算以 0、1、j 为发射机时接收机 p 的三个理论方位角 [a1, a2, a3] theory_angles(0, 1, j, p, r); residual (a1-beta1)^2 (a2-beta2)^2 (a3-beta3)^2; if residual best best residual; best_j j; end end % best_j 即需要额外增加的发射机编号这段枚举的逻辑说明theory_angles 内部用弦长加余弦定理算出三个理论角beta1 到 beta3 是实测值。残差平方和最小意味着这组发射机组合最符合观测也就确定了额外发射机。参数上要注意接收机 p 不能等于候选机 j否则自己给自己发信号没有意义这个 continue 不能漏。原方案里给了两个具体算例验证一个解出 9 号、一个解出 5 号论文里保留这种算例能显著增加可信度。4. 圆形与锥形编队的位置调整步长遍历与分轮定位4.1 圆形编队0.01 米步长全方位搜索问题一第三小问要求给出调整方案。已知 0 号和 1 号已在理想位置飞行中保持相对关系不变所以它们始终无偏差。2 号先根据 0、1 号的方位信息定位然后调整调好后 0、1、2 都无偏差再用它们定位 3 号依次推进。这个“滚雪球”式的顺序是方案的关键不能所有无人机同时调否则没有足够的无偏差参考点。调整的具体做法是步长遍历设定步长 0.01 米从当前位置向四周全方位试探每走一步重新计算方位角与理想位置的方位角比较当位置误差小于 0.01 米时认为到位。原方案里把调整方向分成向北和向南两类用余弦定理算出移动一步后的极坐标再和理想极坐标比对。% 圆形编队单机调整0.01米步长全方位搜索 step 0.01; % 步长米 tol 0.01; % 到位阈值米 while true best_err inf; best_dir [0, 0]; for ang 0:5:355 % 全方位试探5度一个方向 dx step*cosd(ang); dy step*sind(ang); % 试探位置相对理想位置的方位角误差 err angle_error(pos [dx, dy], ideal_pos, emitters); if err best_err best_err err; best_dir [dx, dy]; end end pos pos best_dir; % 走最优的一步 if norm(pos - ideal_pos) tol, break; end end这段代码的设计说明外层 while 控制迭代内层 for 做方向试探每步选方位角误差最小的方向走。参数 step 取 0.01 米是题目精度要求决定的tol 同样取 0.01 米两者一致才能保证“到位即停”。ang 的粒度取 5 度是精度和速度的折中取太细计算量大取太粗可能错过最优方向。实际跑的时候要防止死循环可以加一个最大迭代次数保护。4.2 锥形编队两机无偏差假设与分轮定位问题二换成锥形编队直线上相邻无人机等距相邻三架构成等边三角形。这里有个现实约束如果只有 0 架或 1 架无偏差根本无法启动定位所以方案假设 1 号和 5 号无偏差且距离保持。定位 2 号的思路是先以 1、2 为发射机、5 为接收机得到一个方位角再以 2、5 为发射机、1 为接收机得到另一个方位角三角形 1-2-5 里两个角已知第三个角和 2 号位置就确定了。调好 2 号后1、2、5 都无偏差用它们去定位其他机。但有个几何陷阱当某架无人机正好落在 1、2、5 构成三角形的边的延长线上时它只能收到一个有效方位信息无法定位。原方案里第二轮因此漏掉了 4、7、9、11、13、14 号第三轮改选 2、6、8 为发射机剩下的才全部可定位。% 锥形编队分轮定位检查候选机是否落在发射机三角形延长线上 function ok can_locate(p, emitters) % emitters 为三架无偏差发射机编号 ok true; for m 1:3 for n m1:3 % 若 p 与某两架发射机共线则无法唯一定位 if abs(cross2(pos(p)-pos(emitters(m)), ... pos(emitters(n))-pos(emitters(m)))) 1e-6 ok false; return; end end end end这段判定的逻辑说明cross2 是二维叉积叉积接近零说明三点共线共线时方位角退化定位方程不满秩。参数 1e-6 是数值容差实际坐标量级是百米这个容差足够区分共线和非共线。分轮策略的意义在于每轮尽量多定位一些机把它们加入无偏差集合下一轮可用的发射机就更多整体收敛更快。论文里把每轮定位了哪些机列成表答辩时一目了然。5. 避坑与排查这道题最容易翻车的五个点5.1 编号与角度偏移错位现象是算出来的轨迹整体旋转了一个固定角度或者理想坐标表和图上对不上。原因几乎都是编号到角度的映射没统一有的地方按 0 号起算 40 度有的地方按 1 号起算。解决办法是在论文开头就钉死“1 号在 x 轴、第 k 号极角 (k-1)×40 度”代码里只保留一个生成函数所有模块调用它不手写角度。5.2 余弦定理解出增根未筛除现象是 solve 返回多组距离其中出现负值或明显超出编队范围的值代进去坐标飞到图外。原因是余弦定理的方程是平方形式天然有增根。解决办法是解完后加筛选条件距离必须为正且接收机坐标必须落在以发射机为圆心的合理半径内。这一步不做后面所有图都是错的。5.3 三圆共点前提未检查共线现象是某些发射机组合下方程组无解或解不唯一。原因是选的三架发射机共线三条轨迹退化成两条甚至一条。解决办法是在选题号时先做共线检查圆形编队里避开对径组合锥形编队里用 4.2 节的叉积判定。这个检查写成一个函数每次选发射机前调用一次。5.4 步长遍历陷入局部最优或死循环现象是无人机在理想位置附近来回震荡或者迭代几百次还不收敛。原因是步长固定、方向粒度太粗或者到位阈值和步长不匹配。解决办法是让 tol 不小于 step方向粒度先粗后细再加最大迭代次数保护。我一般会先跑一个小规模算例确认收敛再上全编队。5.5 锥形编队延长线漏判现象是第二轮定位时某些机残差很大却仍被当成已定位导致后续轮次全错。原因是没检查接收机是否落在发射机三角形延长线上。解决办法就是 4.2 节的共线判定把不能定位的机明确标记为“本轮跳过”留到下一轮换发射机再处理而不是硬算。6. 验收与答辩怎么证明这套方案真的能跑验收这套方案我一般分三步走每一步都有可检查的产出。第一步是单元验证拿问题一第一小问的解析解随机生成若干组无偏差发射机和有偏差接收机用定位模型反解看解出的坐标和预设坐标的误差是否在 1e-6 量级。这一步过了说明余弦定理那套方程没写错。第二步是数量判定验证对 56 种组合逐一跑枚举检查每种组合下残差最小的那架是否唯一如果出现两架残差接近说明角度精度不够或组合本身退化要单独说明。第三步是调整过程验证画一张位置误差随迭代次数下降的曲线圆形编队应该单调收敛锥形编队分轮下降每轮结束误差跳一次。答辩时最容易被问的三个问题提前准备好答案。第一个是“为什么额外一架就够”回答要点是信息量一个方位角对应一条轨迹两个方位角对应两条轨迹可能有两个交点三个方位角三条轨迹才唯一所以从一到三至少加一架。第二个是“步长 0.01 米会不会太慢”回答要点是调整时间不计是题目假设实际工程里可以用变步长或梯度法加速方案里给的是满足精度要求的最简实现。第三个是“锥形编队为什么假设两架无偏差”回答要点是启动条件零架或一架无法建立方程组两架是能启动定位的最小假设这个假设在论文的模型假设里要明确写出并说明合理性。下面这张表可以作为答辩时的验收清单逐项打勾验收项检查方法合格标准坐标约定一致性抽查 3 个编号的坐标与理想坐标表误差 1e-6定位模型正确性随机 20 组反解坐标误差 1e-6额外机数量判定56 种组合全跑每种组合残差最小唯一圆形调整收敛误差-迭代曲线单调下降至 0.01 米内锥形分轮完整性每轮定位清单无漏判、无延长线误判最后说个血泪经验这道题我见过太多队伍在论文里把公式写得漂漂亮亮但代码跑出来的图和正文对不上答辩时被要求现场跑一遍就露馅。从那以后我每次交方案前都强制把正文里每一个数值算例用代码重跑一遍图从代码直接导出不手画、不估算。希望帮到你。本文还有配套的精品资源点击获取