简介:围绕2022年全国大学生数学建模竞赛本科组B题“无人机纯方位无源定位的问题研究”,这份PDF文档呈现河北省一等奖论文的完整方案,面向备战数模竞赛、学习无源定位建模与MATLAB实现的高校学生及教师。包内仅1个PDF文件,约2.63MB,便于集中通读。论文以圆形和锥形编队为场景,建立被动接收信号无人机的定位模型,借助二维直角坐标系、余弦定理与“三圆共点”分析方位信息,讨论额外发射信号无人机数量的确定,并给出以0.01米为步长的位置遍历调整策略;锥形编队部分进一步说明相对位置更复杂时的定位与调整思路。文中结合MATLAB符号运算、数值求解和图形可视化呈现实现过程,可帮助读者梳理从模型假设、公式推导到方案验证的链条,对照赛题复盘建模细节并补充算法与编程思路。已有8041人学习下载,适合赛前研读与专题练习。
1. 一道题卡住三成人:从“三架发射机”切入
数学建模竞赛本科组 B 题的无人机纯方位无源定位,最容易在一句话上翻车——“再增加几架发射信号的无人机就够”。多数队伍凭直觉写“至少三架”,却没给出为什么两架不行、为什么一架就够的推理链。阅卷人翻到这里,看的不是一个数字,而是一条链条:两架发射机只能给出一个方位信息,动点轨迹是“葫芦”或“眼睛”,位置不唯一;补到三架,三条轨迹共点,位置才被限制住。这道题真正考的是把几何关系翻译成方程、把方程翻译成可执行调整方案的能力,不是算力。适合论文框架已经能写顺、想在几何建模和数值搜索上拿分的队伍,也适合第一次碰定位类赛题、需要一份可照着复现的模板的人。
2. 考点分布:四块能力决定这篇论文的上限
2.1 三小问的难度曲线:定位是地基,后三问都在调用它
问题一拆成三小问,看着是三道题,实际是一条链。第一小问建的是“被动接收信号无人机的定位模型”,后面第二小问要判断需要几架发射机、第三小问要一轮轮调整位置、问题二换成锥形编队继续定位,全都在反复调用第一小问那套反解公式。第一小问写歪,后面三问会连锁崩。
这道题的难度分布很典型:第一小问难在“把题意翻译成两条路”——题目说的“定位模型”其实有两个意思,一是根据收到的方向信息确定自己当前的实际位置,二是确定自己应该到达的准确位置。很多队伍只写了其中一条,模型就少了一半。第二小问难在证明,不是算出一个数字就完事,要说明“为什么零架不行、一架刚好够、两架当然更够”这条单调性。第三小问难在把连续的调整过程写成可执行的离散算法,步长、判据、终止条件三样缺一不可。问题二难在编队形状变了之后,哪些结论还能平移、哪些必须重建。
从阅卷视角看,失分最集中的位置不是公式推错,而是模型复用关系没写清楚。第一小问的解在第三小问里被调用时,符号换了、坐标系换了,读者跟丢了,后面写得再对也拿不到过程分。所以这篇论文的骨架应该是:一套坐标与符号贯穿到底,每一问开头明确写“本问沿用第几问的哪条公式,只改动了哪个量”。
2.2 几何建模:余弦定理是这道题唯一的硬工具
整道题的数学工具非常克制,核心就是余弦定理加坐标变换,没有复杂的微分方程,也没有花哨的优化算法。这一点对备考的人其实是好消息:工具少,意味着考的是用得准不准,不是会不会。
圆形编队的几何设定要先固定下来。0 号机在圆心,1 到 9 号机均匀分布在半径 r 的圆周上,相邻两架夹角 40°。把 1 号机放在 x 轴正方向,九架机的准确坐标就全部确定:
| 编号 | 极角 | x 坐标 | y 坐标 |
|---|---|---|---|
| FY01 | 0° | r | 0 |
| FY02 | 40° | 0.766r | 0.643r |
| FY03 | 80° | 0.174r | 0.985r |
| FY04 | 120° | -0.500r | 0.866r |
| FY05 | 160° | -0.940r | 0.342r |
| FY06 | 200° | -0.940r | -0.342r |
| FY07 | 240° | -0.500r | -0.866r |
| FY08 | 280° | 0.174r | -0.985r |
| FY09 | 320° | 0.766r | -0.643r |
这张表看着平淡,实际是全篇的“黑匣子”:后面所有反解、所有误差比较、所有调整目标,坐标都从这里取。写论文时把它放在模型建立的开头,并明确说明“r 在第三小问取 100 m,在前两小问作为参数保留”,符号说明就不会乱。
余弦定理的用法只有一种形态:已知三角形两边及其夹角求第三边,或已知三边求角。设接收机为 K,两架发射机为 A、B,圆心为 O,则有三组关系同时成立。在 △OKA 中,OA = r,OK 未知,KA 未知,∠OKA 是测得的方位角;在 △OKB 中同理;在 △KAB 中,AB 由两架发射机的编号差直接算出,因为圆周上相邻 40°,编号差为 d 的两点弦长为 2r·sin(20°d)。三个方程、三个未知量(OK、KA、KB),方程组封闭,可以解。
提示:这一步是很多队伍卡住的地方。他们试图只用两个三角形求解,结果发现未知量比方程多一个。第三组关系不是多余的,它负责把三个未知量锁死。
2.3 数值搜索:枚举、平方和最小、步长遍历三件套
第二小问和第三小问的方法论完全不同,但都属于“搜索”这一类,写论文时要分开讲,不要混成一段。
第二小问是离散枚举。0 号和 1 号已经确定发射信号,剩下八架里挑一架当接收机、再挑一架当额外发射机,组合数是 8×7=56 种。每一种组合对应一组理论方位角,把实测的三个方位角与理论值逐组比对,取三个差值的平方和最小那一组,对应的额外发射机就是答案。这个判据的本质是最小二乘,写成式子就是三个方位角残差的平方和取极小。
第三小问是连续搜索。无人机位置有偏差,要一步步挪到理想位置。原文设定步长 0.01 m,向四周全方位遍历,当与准确位置相差 0.01 m 时近似认为到位。这里有个容易被忽略的点:搜索的判据不能只用“距离小于阈值”,还要说明每一步朝哪个方向走、走完之后方位信息怎么更新。否则算法描述是断的,阅卷人看不出这个过程能收敛。
2.4 论文呈现:五条模型假设各自对应一个公式的合法性
模型假设不是凑数,每一条都在给后面的公式发“许可证”。这道题至少需要五条:飞行不受外界干扰;接收到的方向信息准确无误;每次位置调整耗时不计;第一小问第三问中 0 号和 1 号保持相对位置不变;问题二中有两架无人机位置无偏差。
第二条最关键。纯方位定位的全部信息来自角度,角度有噪声,整个反解就不成立。写的时候要明确“本文在无噪声条件下建模,噪声情形在模型推广中讨论”,这句话既保住了模型,又显出了边界意识。第三条的作用是让“调整时间不计”成为“瞬间到位”的依据,第三小问的迭代才能写成离散步骤而不是动力学过程。第四条和第五条是定位能启动的前提:没有无偏差的基准机,后面所有反解都缺参照。
符号说明表要控制在十个符号以内,超过这个数读者就记不住了。建议只保留:r(编队半径)、K(接收机)、A/B(发射机)、α1/α2/α3(三个方位角)、k0(接收机到圆心距离)、a2/a3(接收机到两发射机距离)。其余中间量在正文第一次出现时就地定义,不进表。
3. 高频考点:三个必然被问到的几何模型
3.1 定位模型:三个方位角怎么反解出坐标
这是全篇出现频率最高的考点,也是面试式提问最容易追问的地方:“给你三个角度,你怎么把坐标算出来?”
标准答法是分两步。第一步解距离。设接收机 K、圆心 O、两架发射机 A、B。△OKA 中由余弦定理得 r² = k0² + a3² − 2·k0·a3·cos α2;△OKB 中得 r² = k0² + a2² − 2·k0·a2·cos α1;△KAB 中得 AB² = a3² + a2² − 2·a3·a2·cos α3。三式联立,k0、a2、a3 全部解出。第二步解方位。在 △OKA 中再用一次余弦定理,cos∠AOK = (r² + k0² − a3²)/(2·r·k0),于是 K 的极角等于 A 的极角减去 ∠AOK,直角坐标随之得到。
实际编程时不必硬解非线性方程组,用数值最小化更稳,也更容易扩展到三个以上发射机的情形:
% 三站纯方位定位:由三组张角反解接收机坐标 P = 100 * [1 0; cosd(40) sind(40); cosd(80) sind(80)]; % 三架发射机,半径 100 m pairs = [1 2; 1 3; 2 3]; % 三个张角对应的点对 alpha = deg2rad([52.3 48.1 60.7]); % 接收机实测的三组张角 % 残差:三组张角的余弦值与实测值之差的平方和 fun = @(u) sum(arrayfun(@(k) (cos(alpha(k)) - ... dot(P(pairs(k,1),:) - u, P(pairs(k,2),:) - u) / ... (norm(P(pairs(k,1),:) - u) * norm(P(pairs(k,2),:) - u)))^2, 1:3)); u0 = [50 50]; % 初值取圆心附近,避免落到远端的对称解 K = fminsearch(fun, u0); % 无约束最小化,输出接收机坐标这段代码的逻辑是“不解方程,改求残差最小”。P是三架发射机的坐标矩阵,行是机号、列是 x 与 y;pairs把三组张角映射到具体的点对,因为余弦定理里角度一定是夹在两条边之间的;alpha是实测值,弧度制。fun里用向量点积除以模长乘积得到夹角余弦,与实测余弦作差后平方求和。u0的选择很关键,三个圆弧在平面上通常有两个对称交点,初值放在圆心附近能把解限制在编队内部。fminsearch是无导数优化,对这类二维问题足够,也不需要额外的工具箱。
参数怎么改:发射机数量增加时,pairs相应扩展成所有组合,残差项自动变多,模型从“恰好定解”变成“超定最小二乘”,鲁棒性更好。半径改了只影响P的缩放,不影响求解逻辑。如果实测角带噪声,把fun换成带权残差,权重取测角精度的倒数平方。
3.2 定角轨迹:钝角是“眼睛”,锐角是“葫芦”
第二小问的核心不是枚举,是这条轨迹结论。面试里被问到“为什么两架发射机不够”,答“信息不足”是废话,答“动点对定线段的张角为定值,轨迹是两段圆弧,位置不唯一”才是得分点。
推导不复杂。设两定点为 A、B,动点 K 满足 ∠AKB = θ 为定值。由圆周角定理,K 落在以 AB 为弦的两段圆弧上,两段弧关于 AB 对称,合起来是一条封闭曲线。θ 为钝角时,弧的曲率大,两段弧鼓出去像一只“眼睛”;θ 为锐角时,弧变得扁平,两段弧向外延伸,形状像“葫芦”。这个几何直觉在论文里配一张示意图,比写三行公式更有效。
圆弧的参数可以直接给出:弦长 c = |AB|,张角 θ,则圆弧半径 R = c / (2 sin θ),圆心位于 AB 中垂线上、距离 AB 中点 c / (2 tan θ) 处。这两个式子把“轨迹”从一句定性描述变成了可画、可求交的解析对象。
三架发射机意味着三条这样的曲线,两两求交得到候选点,三个交点重合的位置就是唯一解。这就是原文所说的“三圆共点”。写论文时要把“共点”的几何必然性讲一句:三条曲线都由同一组实测角确定,若角度无误差,三条曲线必然交于真实位置;有误差时用一个最小二乘判据挑最接近的交点。
3.3 最小二乘匹配:56 种组合怎么选出那一架
第二小问的答案“额外增加一架”本身只有两个字,分数全在证明过程。证明链要写成三段。
第一段,零架不行。只有 0 号和 1 号发射时,任意一架接收机只能得到一个方位信息,轨迹是一条“眼睛”或“葫芦”,曲线上每一点都满足观测,位置不唯一,无法定位。
第二段,一架够用。加入第三架发射机后,接收机得到三组方位信息,对应三条轨迹,共点唯一定位。这一步要给出具体的枚举与匹配:把八架候选接收机与七架候选发射机两两组合,共 56 种,逐一算出理论方位角三元组,与实测三元组比对,取残差平方和最小者。
第三段,多于一架当然更够。这是单调性论证,一句话即可:增加发射机只会增加约束,不会破坏已有约束的解,因此一架可行则更多架必然可行。
面试里常追问的一个点是“如果 56 种里有两组残差一样小怎么办”。这考的是对退化情形的敏感度。正确答案是:这说明两组发射机组合在几何上等价,比如三个发射点共线或对称,此时需要引入额外信息(比如接收机到圆心的距离约束)来打破简并,或者直接说明该情形在本题参数下不会出现并给出验证。
4. 真题演练:四问的答题思路逐条拆
4.1 第一小问:把“定位模型”拆成两条互不冲突的路线
题干里“定位模型”四个字是歧义源。稳妥的写法是开头就点明它有两层含义,然后分两小节处理,不要让读者自己去猜。
第一层,定位实际位置。已知三架无偏差发射机的位置和接收机测得的三个方位角,用 3.1 的余弦定理链条反解出接收机的当前坐标。这一层的关键词是“反解”,输入是角度,输出是坐标。
第二层,定位准确位置。三架发射机位置已知且无偏差,接收机应当到达的位置由编队几何唯一确定。这里用轨迹法更漂亮:三组方位角各自确定一条定角圆弧,三条弧共点,交点就是理想位置。这一层的关键词是“共点”,输入是角度,输出是目标坐标。
两条路线结果应当一致,写论文时用一个数值算例互相校验,可信度立刻上一个台阶。校验方法很直接:随便设一组编队参数,人为给接收机加一个小偏差,算出三个方位角,分别走两条路线,看两个坐标是否吻合到小数点后两位。
注意:第二层的“共点”结论依赖三架发射机不共线。若三架发射机恰好在一条直线上,三条弧退化为两条甚至一条,交点不唯一。这个退化条件要在模型假设或模型讨论里写一句,是阅卷人眼里的加分细节。
4.2 第二小问:证明“只加一架”要给出可复算的枚举
这一问的答案是一个整数,但答题过程必须是一段可复算的流程,否则和猜没区别。建议按四步写。
第一步,明确基准。0 号和 1 号位置无偏差,作为固定发射源;接收机位置略有偏差,但偏差量未知。
第二步,构造候选集。接收机从 2 到 9 号中选,共 8 种;额外发射机从除自己和 0、1 之外的 7 架中选。组合数 8×7=56。
第三步,建立判据。对每一种组合,按编队几何算出三个理论方位角,与实测值作差,取平方和。写成式子就是三个残差平方相加,取最小值对应的组合。
第四步,下结论并说明单调性。最小残差对应的那架就是需要额外增加的发射机;由于增加发射机只会增加约束,一架可行即证明“至少一架”,结合第一步“零架不可行”,结论是“恰好一架”。
这一问最常见的失分是只写“经过枚举,需要一架”,没有给判据,也没有给“零架为什么不行”的说明。补上这两段,从 3 分变成满分的差距就在这里。
代码实现上,枚举部分很短,核心是双层循环加残差比较:
% 枚举额外发射机:固定 0、1 号,遍历接收机与第三架发射机 r = 100; % 编队半径 best = inf; bestPair = [0 0]; % 记录最小残差与对应组合 beta = deg2rad([52.3 48.1 60.7]); % 接收机实测的三个方位角 for rx = 2:9 % 候选接收机 for tx = 2:9 % 候选额外发射机 if tx == rx, continue; end % 自己不能给自己发信号 a = [0 rx tx]; % 三架发射机编号:圆心 + 两架圆周机 th = zeros(1,3); % 理论方位角 for k = 1:3 i = a(k); j = a(mod(k,3)+1); th(k) = angleBetween(i, j, rx, r); % 由编号直接算理论张角 end res = sum((th - beta).^2); % 三组残差平方和 if res < best best = res; bestPair = [rx tx]; end end endrx与tx是两层枚举,a把三架发射机的编号凑成三元组,angleBetween是自定义函数,输入三个机号和半径,用余弦定理返回张角。res是判据,越小说明这一组发射机越可能是真实配置。bestPair输出接收机与额外发射机的编号。参数改动点只有r和beta,换一组实测角直接重跑。
4.3 第三小问:0.01 米步长的调整方案要写全三件事
这一问要求给出调整方案,不是给出调整结果。方案必须包含方向、步长、终止条件三件事,缺一件就不完整。
方向怎么定。接收机先用 0 号和 1 号发来的方位信息反解出自己的实际位置,再与编队几何给出的理想位置比较,得到一条从实际指向理想的连线,沿这条连线走。
步长怎么取。原文取 0.01 m,理由是足够小以至于可以近似认为一步到位,又不至于小到计算量爆炸。这个取法要在论文里给出量级论证:编队半径 100 m,0.01 m 相当于半径的万分之一,位置误差在这个量级以下对编队队形的影响可以忽略。
终止条件怎么写。不能只写“误差小于 0.01 m 就停”,要写清楚误差是哪个量。用“反解位置与理想位置的欧氏距离小于步长”最清晰,同时配一句“若迭代次数超过上限仍未收敛,判定为陷入局部极值,回到上一步减小步长重试”。这句话能挡掉“算法不收敛怎么办”的追问。
顺序怎么排。0 号和 1 号保持相对位置不变,作为永久基准;先用它们定位并调整 2 号;2 号到位后加入基准集,用 0、1、2 三架定位 3 号;依次递推,直到九架全部到位。这个“逐架加入”的策略是本题第三小问的核心思想,写出来就是结构化得分点。
调整循环可以写成下面这样:
step = 0.01; tol = 0.01; % 步长与收敛阈值,单位 m cur = [x0 y0]; % 接收机当前坐标(含初始偏差) for iter = 1:10000 est = locate(P, measure(cur)); % 用当前实测方位角反解位置 err = norm(est - ideal); % 与理想位置的偏差 if err < tol, break; end % 满足阈值即停止 dir = (ideal - est) / norm(ideal - est); % 单位方向向量 cur = cur + step * dir; % 沿方向走一个步长 endP是当前可用的无偏差发射机集合,随递推不断加入新成员;measure返回接收机对每对发射机的张角,是位置的函数;locate就是 3.1 里的反解;ideal由编队几何直接给出。iter上限 10000 是保护,防止死循环。这段代码的价值不在于跑出结果,而在于把“方向—步长—终止”三要素显式写成了可读的形式。
4.4 问题二:锥形编队的轮次定位怎么写才不空
锥形编队换了形状,但定位原理没换,换的是“哪几架先当基准”。答题思路可以按三步推。
第一步,确定启动基准。锥形编队里如果没有两架位置无偏差的无人机,后面所有反解都缺参照,所以必须显式假设两架(比如 1 号和 5 号)位置无偏差且间距保持不变。这条假设要写在模型假设里,不能藏在正文。
第二步,定位第三架。1 号和 5 号已知,2 号未知。做法是交换收发角色:先让 1、2 发射、5 接收,得到一个方位角;再让 2、5 发射、1 接收,得到另一个方位角;两个角加上 1、5 的已知距离,三角形被唯一确定,2 号位置解出。这里必须补一条假设——“无人机之间可以共享方位信息”,否则单向测量凑不出两个角。原文用了这条假设,写论文时不能省。
第三步,轮次推进与退化排除。1、2、5 三架到位后,用它们去定位其余各架。但有三架发射机共线时,张角退化,落在延长线上的无人机只能收到一个有效方位信息,无法定位。所以第二轮只能定位一部分,剩下的要换一组发射机(比如 2、6、8)进入第三轮。这个“轮次+换组”的结构是问题二区别于问题一的地方,也是得分点。
面试里可能追问“为什么第二轮不直接全定位”。答:三架发射机围成的三角形有边界,边界延长线上的点对三条边的张角出现退化,几何上不可分辨,只能换基准。这个回答既解释了现象,也点出了方法边界。
5. 易错点:五个最容易翻车的地方
5.1 错在把实际位置和理想位置混成一个模型
错在哪:只建了一个定位模型,既用它算当前坐标,又用它算目标坐标,两者共用一套符号,读者分不清哪个是输入哪个是输出。
为什么错:这两件事的已知量完全不同。算实际位置,已知的是三架发射机坐标和三个方位角;算理想位置,已知的是编队几何和编号。混在一起写,公式看着对,逻辑是断的。
怎么答对:分两小节,标题就写“实际位置的反解”和“理想位置的确定”,各自列已知量、未知量、求解路径。最后加一句“两条路径的结果在无噪声条件下应当重合,本文用数值算例验证”,把两条线重新缝上。
5.2 错在只加一架却说不出为什么不是零架
错在哪:结论写“需要额外增加一架”,论证只有“枚举后发现一架足够”。
为什么错:题目问的是“需要额外增加几架”,暗含“最少几架”。只证充分不证必要,答案不完整。
怎么答对:补一段必要性。零架时接收机只有一个方位信息,轨迹是一条圆弧,弧上每点都满足观测,位置不唯一,因此零架不可行。再补一句单调性:约束增加不会破坏可行解,故一架可行即最少为一架。
5.3 错在角度制和弧度制混用,余弦定理全线崩
错在哪:坐标表用度,余弦定理用弧度,代码里cosd和cos混着写,结果偏差大得离谱却查不出原因。
为什么错:这类错误不会报错,只会让结果错得很“合理”,看起来像模型有问题,实际是单位问题。几何题里这是最高频的翻车点。
怎么答对:论文里所有角度统一用度并在符号说明里注明,代码里统一用cosd、sind、acosd,需要进三角函数前再转弧度。写完做一次量纲自检:把已知答案代回去,看余弦值是否落在 [-1,1],越界立刻回头查单位。
5.4 错在忽略共线与延长线退化,第二轮定位全废
错在哪:问题二里用 1、2、5 定位其余各架,没检查哪些点落在这三点构成三角形的延长线上,结果那几架的解出现两个对称候选,随便取了一个。
为什么错:三架发射机共线时,张角信息退化,两条圆弧变成一条,交点不唯一。这不是数值误差,是几何上的不可分辨。
怎么答对:定位前先做一次共线判定,把落在延长线上的无人机单独列出,本轮跳过,换一组发射机进入下一轮。论文里把这一步写成“退化情形处理”,并给出判定条件(三点共线或夹角接近 0° 或 180°)。
5.5 错在调整方案只写“遍历”不写终止判据
错在哪:第三小问写“以 0.01 m 为步长向四周遍历,直到到达理想位置”,没有说怎么判断“到达”。
为什么错:“理想位置”对无人机自己是未知的,它只能靠反解出来的坐标判断。判据不写清,算法无法终止,也无法验证。
怎么答对:写成“反解位置与理想位置的欧氏距离小于步长即终止;超过迭代上限则减小步长重试”。再补一句收敛性说明:每步沿梯度方向移动固定步长,误差单调下降,步长足够小时必然收敛到阈值内。
6. 押题思路:把这道题压成一张四段式模板
几何定位类赛题年年换皮,骨架高度相似。把这道题拆成四段,下次遇到同类题可以直接套。
| 段落 | 要写的内容 | 本题对应 | 常见替代问法 |
|---|---|---|---|
| 输入段 | 已知点坐标、观测量、编队约束 | 三架发射机坐标、三个方位角、半径 r | 已知基站、已知锚点 |
| 模型段 | 余弦定理方程组或残差最小化 | 三式联立解 k0、a2、a3 | 到达角定位、三角测量 |
| 判据段 | 位置唯一性的条件与退化排除 | 三弧共点,共线时退化 | 可观测性分析 |
| 执行段 | 方向、步长、终止条件 | 0.01 m 步长逐架递推 | 迭代修正、闭环调整 |
这套模板真正值钱的地方是第三段。多数人会把力气花在解方程上,但方程本身并不难,难的是说清“什么时候解不出来”。共线、对称、延长线、张角接近 0° 或 180°,这四种退化情形一旦在论文里被点명并给出处理办法,整篇的完成度就上了一个档。
还有一个考前习惯值得说。拿到题先别急着推公式,花十分钟把“已知量、未知量、退化情形”三行写在草稿纸最上面,再动笔。我以前带过的 A 同学就是跳过这一步,第一小问写了满满两页,到第二小问才发现自己一直把接收机的实际位置当成已知量在用,前面全白写。从那以后我每次拿到几何定位题,都强制先写这三行再开工,写不动的时候就回头看一眼这三行,比反复读题干有用得多。考场上时间紧,能救你的往往不是多算一步,而是少走一段弯路。希望帮到你。
本文还有配套的精品资源,点击获取