简介:本资源为2022年全国大学生数学建模竞赛本科组B题的完整论文PDF,聚焦无人机纯方位无源定位问题,适合备战数模竞赛的本科生及指导教师参考。论文围绕圆形与锥形编队,建立被动接收信号无人机的定位模型与位置调整模型,运用二维直角坐标系、余弦定理与“三圆共点”原理,推导发射信号无人机数量需求,并给出步长0.01米的遍历调整方案,全部求解过程使用MATLAB编程实现。压缩包内仅含1个PDF文件,约2.63MB,内容涵盖摘要、问题重述、模型假设、符号说明及模型建立与求解等完整章节,结构规范,便于按模块研读。该论文曾获河北省一等奖,目前已有8039人学习下载,读者可从中获取赛题分析思路、建模推导细节与MATLAB实现方法,适合作为赛前模拟与论文写作的参考范例。
1. 这道题到底考什么:从“三圆共点”看命题人的出题逻辑
很多人拿到2022年全国大学生数学建模竞赛本科组B题,第一反应是“无人机定位跟我有什么关系”。但如果你把题目拆开看,命题人真正想考的不是无人机,而是几何建模能力和多源信息融合下的位置反解。这道题的核心就一句话:已知几个固定点,通过接收到的方位角信息,反推出一个动点的位置。听起来简单,但命题人埋了三层递进——第一层是“三个方位信息确定一个点”,第二层是“方位信息不够时怎么办”,第三层是“位置有偏差时怎么调回去”。每一层都在考你同一个东西:能不能把几何关系翻译成方程,再用数值方法解出来。
这道题适合谁?适合正在准备数学建模竞赛、尤其是想拿赛区一等奖以上的队伍。它不考高深的算法,不考机器学习,考的是你对余弦定理、坐标系变换、枚举搜索这些基本功的掌握程度。拿分的关键不在于模型多花哨,而在于逻辑链条完整、每一步都有数学依据、结果可复现。阅卷人最怕看到的是“我觉得应该这样”,最想看到的是“由余弦定理可得,代入已知量,解得”。
2. 高频考点拆解:余弦定理与坐标系建立的四种考法
2.1 第一小问:三个方位信息如何唯一确定一个点
这是整道题的地基。题目设定是:圆心一架无人机(0号)、圆周上两架无人机(1号和另一架)发射信号,位置无偏差;另一架圆周上的无人机接收信号,位置有偏差。你要建立模型,根据接收到的三个方位角,算出这架接收信号无人机的实际位置。
命题人在这里考的是余弦定理的连环使用。具体来说,你把0号固定在原点,1号固定在x轴上,圆周半径记为r。接收信号无人机与三架发射信号无人机之间的连线夹角就是三个方位信息。这三个角是已知的,三架发射信号无人机的位置也是已知的,那么接收信号无人机的位置就是唯一确定的。
答题思路是这样的:先建立二维直角坐标系,把0号放在原点,1号放在(r, 0)。然后利用余弦定理,在三个三角形中分别建立方程。注意,这里有一个容易翻车的地方——你要求的是接收信号无人机的坐标,而不是它到发射信号无人机的距离。很多队伍在这里绕了弯路,先求距离再求坐标,其实可以直接用角度和已知边长列方程。
具体操作:设接收信号无人机坐标为(x, y),它与0号、1号、另一架发射信号无人机的距离分别为d0、d1、d2。由余弦定理,d0和d1之间的夹角已知,d0和d2之间的夹角已知,d1和d2之间的夹角已知。三个方程三个未知数,解出来就完事。但要注意,余弦定理给出的是距离之间的关系,你还需要把距离转换成坐标。这里建议直接用坐标表示距离,然后解非线性方程组。
提示:如果手工推导太复杂,可以用MATLAB的符号计算工具箱先推导出解析解,再用数值计算验证。阅卷人看重的是你的推导过程,不是最后那个数字。
2.2 第二小问:为什么只需要额外增加一架无人机
这一问是整道题最容易被低估的地方。题目问:0号和1号已经发射信号了,还需要额外增加几架发射信号无人机,才能实现其他接收信号无人机的准确定位?答案是一架。但关键不在于答案,而在于你怎么证明“一架就够了”。
命题人考的是轨迹相交的思想。当只有两个发射信号源时,接收信号无人机只能得到一个方位信息。一个动点到两个定点的夹角是定值,这个动点的轨迹是什么?是两段对称的圆弧,合起来像一个“眼睛”或者“葫芦”。具体形状取决于夹角是锐角还是钝角。这个结论需要你证明,不能直接说“显然”。
证明思路:设两个定点为A和B,动点P满足∠APB = α(定值)。以AB为弦,作圆周角为α的圆弧。这样的圆弧有两条,上下对称。所以P的轨迹就是这两段圆弧组成的封闭曲线。当α为钝角时,圆弧向外凸,形状像“眼睛”;当α为锐角时,圆弧向内凹,形状像“葫芦”。
那么,当你有三个发射信号源时,接收信号无人机就能得到三个方位信息。每个方位信息对应一条轨迹(两条圆弧),三条轨迹相交于一点,这个点就是接收信号无人机的准确位置。所以,额外增加一架发射信号无人机,就能让接收信号无人机获得三个方位信息,从而实现定位。
但这里有一个坑:三个方位信息必须来自三个不同的发射信号源,而且这三个源不能共线。如果三个源共线,轨迹可能不相交于唯一一点。题目中0号在圆心,1号在圆周上,额外增加的那架也在圆周上,三者不共线,所以没问题。
答题时,你需要用枚举法算出所有情况下三个方位信息的准确值,然后对于某架接收信号无人机,遍历所有可能的额外发射信号无人机,找到使“准确值与偏差值之差的平方和”最小的那一架。这个平方和最小化就是你的目标函数。
% 枚举所有可能的额外发射信号无人机 FY00 = 0; FY0i = 1; r = input('圆形编队半径:'); for FY0j = 2:9 for FY0k = 2:9 if FY0k == FY0j continue; end % 计算三个方位角的准确值 a1 = sqrt(2*r^2 - cosd((FY0j-FY0i)*40)*2*r^2); a3 = sqrt(2*r^2 - cosd((FY0k-FY0i)*40)*2*r^2); a2 = sqrt(2*r^2 - cosd((FY0k-FY0j)*40)*2*r^2); alpha1(FY0j,FY0k) = acosd((r^2+a3^2-r^2)/(2*r*a3)); alpha2(FY0j,FY0k) = acosd((a3^2+a2^2-a1^2)/(2*a3*a2)); alpha3(FY0j,FY0k) = acosd((r^2+a2^2-r^2)/(2*r*a2)); end end % 反解:找到使平方和最小的额外发射信号无人机 beta1 = input('第一个角度:'); beta2 = input('第二个角度:'); beta3 = input('第三个角度:'); FY0k = input('接收信号的无人机编号:'); min_val = 1000; mini = 0; for i = 2:9 if i == FY0k continue; end m = (beta1-alpha1(i,FY0k))^2 + (beta2-alpha2(i,FY0k))^2 + (beta3-alpha3(i,FY0k))^2; if m <= min_val min_val = m; mini = i; end end disp(['额外增加的发射信号无人机编号:', num2str(mini)]);这段代码的逻辑是:先枚举所有可能的额外发射信号无人机组合,算出每种组合下三个方位角的准确值。然后对于给定的接收信号无人机和它实际接收到的三个方位角(有偏差),遍历所有可能的额外发射信号无人机,找到使平方和最小的那一架。这个平方和最小化就是你的判据。
参数说明:FY0i和FY0j是两架已知的发射信号无人机,FY0k是接收信号无人机。alpha1、alpha2、alpha3是三个方位角的准确值。beta1、beta2、beta3是实际接收到的有偏差的方位角。min_val初始化为一个很大的数,mini记录使平方和最小的额外发射信号无人机编号。
2.3 第三小问:位置调整的步长搜索策略
这一问考的是数值搜索。题目给了所有无人机的初始位置(有偏差),要求你给出调整方案,让它们回到理想位置。理想位置是:0号在圆心,其他9架均匀分布在半径为100米的圆周上。
答题思路:0号和1号已经处于理想位置,保持不动。2号无人机根据0号和1号的方位信息进行位置调整。具体怎么调?设定步长为0.01米,向四周全方位遍历。每移动一个步长,就重新计算接收到的方位信息,与理想位置对应的方位信息比较。当偏差小于0.01米时,认为到达理想位置。
这里的关键是极坐标下的位置更新。你把无人机的位置用极坐标(r, θ)表示,每次移动一个微小步长,更新r和θ。具体来说,向北移动意味着r增加,向南移动意味着r减小。但无人机不知道应该往哪个方向调,所以需要全方位遍历。
% 圆形编队无人机位置调整 FY00 = 0; FY01 = 1; njl = 0.01; % 最小距离阈值 r = 100; % 圆形编队半径 bzrow = 100; % 准确位置的极径 bztheta = [0 40 80 120 160 200 240 280 320]; % 准确位置的极角 FY0irow(2) = input('FY02的初始极径:'); FY0itheta(2) = input('FY02的初始极角:'); jl = 100; while jl > njl mjl = 10000; for j = 0:359 % 尝试每个方向 new_row = FY0irow(2) + njl * cosd(j); new_theta = FY0itheta(2) + njl * sind(j); % 计算新位置与理想位置的距离 dist = sqrt(new_row^2 + bzrow^2 - 2*new_row*bzrow*cosd(new_theta-bztheta(2))); if dist < mjl mjl = dist; best_row = new_row; best_theta = new_theta; end end FY0irow(2) = best_row; FY0itheta(2) = best_theta; jl = mjl; end disp(['调整后的极径:', num2str(FY0irow(2))]); disp(['调整后的极角:', num2str(FY0itheta(2))]);这段代码的逻辑是:对于2号无人机,从初始位置开始,每次尝试360个方向,每个方向移动0.01米,找到使新位置与理想位置距离最小的方向。然后更新位置,重复这个过程,直到距离小于0.01米。
参数说明:njl是步长,r是圆周半径,bzrow和bztheta是理想位置的极径和极角。FY0irow和FY0itheta是无人机的当前极径和极角。jl是当前距离与理想位置的距离,初始化为100,保证进入循环。
注意:这里有一个容易忽略的点——调整时间不计。题目假设无人机知道自己需要调整位置的瞬间就已经调整到理想位置。所以你的算法不需要考虑调整过程中的时间消耗,只需要给出最终位置。
2.4 问题二:锥形编队的定位与调整
问题二把圆形编队换成了锥形编队。锥形编队的特点是:直线上相邻两架无人机的间距相等,相邻三架无人机构成等边三角形。这意味着无人机之间的相对位置关系更复杂,但核心方法不变。
答题思路:假设1号和5号无人机位置无偏差,它们之间的距离保持不变。先定位2号无人机:将1号和2号作为发射信号,5号接收信号,得到一个方位信息;将2号和5号作为发射信号,1号接收信号,得到另一个方位信息。在三角形1-2-5中,两个角已知,第三个角也能确定,于是2号的位置就确定了。然后像问题一第三小问那样,向四周遍历搜索,直到2号到达理想位置。
但这里有一个坑:当某架无人机位于1、2、5号构成的三角形的边的延长线上时,只能传送一个方向信息,无法准确定位。所以第二轮定位时,4、7、9、11、13、14号无人机依然无法定位。第三轮选取2、6、8号作为发射信号无人机,剩下的未定位无人机都能定位。
% 锥形编队无人机位置调整 % 假设1号和5号位置无偏差 % 先定位2号 % 利用三角形1-2-5,已知两个角,求第三个角 % 然后向四周遍历搜索,直到到达理想位置 % 具体代码与圆形编队类似,只是理想位置不同这段代码的逻辑与圆形编队类似,只是理想位置的坐标不同。锥形编队的理想位置需要根据题目给出的几何关系计算。注意,锥形编队的调整方向可能不是简单的径向移动,而是沿锥面调整。这需要对锥面的几何特性有深入理解。
3. 真题演练:三道高频题的标准答题模板
3.1 题目一:证明“一个动点到两定点的夹角为定值,其轨迹为两段圆弧”
这是问题一第二小问的核心证明。很多队伍在这里直接引用结论,没有证明,导致失分。
标准答题模板:
设两定点为A和B,动点P满足∠APB = α(定值)。以AB为弦,作圆周角为α的圆弧。由圆周角定理,同弧所对的圆周角相等,所以P的轨迹就是这两段圆弧。当α为钝角时,圆弧向外凸,形状像“眼睛”;当α为锐角时,圆弧向内凹,形状像“葫芦”。
证明完毕。注意,这里需要说明“上下对称”的原因:因为A和B固定,P可以在AB的上方或下方,所以轨迹有两段,上下对称。
3.2 题目二:为什么“三圆共点”能确定接收信号无人机的位置
这是问题一第二小问的另一个核心证明。
标准答题模板:
当有三个发射信号源时,接收信号无人机得到三个方位信息。每个方位信息对应一条轨迹(两段圆弧)。三条轨迹相交于一点,这个点就是接收信号无人机的准确位置。由“三圆共点”定理,三个圆(或圆弧)如果有公共交点,那么这个交点就是唯一的。所以接收信号无人机的位置可以唯一确定。
注意,这里需要说明“三个发射信号源不共线”的条件。如果三个源共线,轨迹可能不相交于唯一一点。
3.3 题目三:位置调整的步长搜索为什么有效
这是问题一第三小问的核心证明。
标准答题模板:
设定步长为0.01米,向四周全方位遍历。每移动一个步长,就重新计算接收到的方位信息,与理想位置对应的方位信息比较。当偏差小于0.01米时,认为到达理想位置。由于步长足够小,搜索空间足够大,所以一定能找到使偏差最小的方向。重复这个过程,直到偏差小于阈值。
注意,这里需要说明“调整时间不计”的假设。因为题目假设无人机知道自己需要调整位置的瞬间就已经调整到理想位置,所以不需要考虑调整过程中的时间消耗。
4. 易错点与失分点:阅卷人最想扣分的五个地方
4.1 坐标系建立不规范
错在哪:很多队伍直接说“建立直角坐标系”,但没有说明原点在哪、x轴方向如何、单位长度是多少。
为什么错:坐标系是后续所有推导的基础。如果坐标系不明确,阅卷人无法验证你的推导是否正确。
怎么答对:明确写出“以0号无人机为原点,1号无人机所在方向为x轴正方向,圆周半径为单位长度”。这样后续所有坐标和角度都有明确的参照。
4.2 余弦定理使用错误
错在哪:在三角形中使用余弦定理时,把角度和边的对应关系搞混。
为什么错:余弦定理是a² = b² + c² - 2bc·cosA,其中A是边a的对角。很多队伍把A搞成了边b或边c的对角。
怎么答对:每次使用余弦定理前,先画出三角形,标出已知边和已知角,确认对应关系。如果不确定,可以用符号计算工具验证。
4.3 枚举法遗漏情况
错在哪:在问题一第二小问中,枚举所有可能的额外发射信号无人机时,遗漏了某些组合。
为什么错:题目中0号和1号已经发射信号,额外增加的无人机可以从2号到9号中选择。但有些队伍只考虑了部分组合,导致结果不完整。
怎么答对:用双重循环遍历所有可能的组合,确保不遗漏。注意,额外增加的无人机不能是接收信号无人机本身。
4.4 位置调整方向搞反
错在哪:在问题一第三小问中,把“向北移动”和“向南移动”的方向搞反。
为什么错:极坐标中,r增加意味着远离圆心,r减小意味着靠近圆心。但“向北”和“向南”是直角坐标系中的概念,需要转换。
怎么答对:明确“向北”对应r增加,“向南”对应r减小。如果不确定,可以画图验证。
4.5 锥形编队延长线问题忽略
错在哪:在问题二中,没有考虑无人机位于三角形边的延长线上的情况。
为什么错:当无人机位于延长线上时,只能接收到一个方向信息,无法准确定位。如果忽略这一点,会导致定位失败。
怎么答对:在第二轮定位时,明确列出无法定位的无人机编号(4、7、9、11、13、14),然后在第三轮中选取合适的发射信号无人机(2、6、8),确保剩下的无人机都能定位。
5. 答题技巧:从审题到交卷的完整流程
5.1 审题阶段:先画图,再列方程
拿到题目后,不要急着写代码。先用纸笔画出编队示意图,标出已知量和未知量。对于圆形编队,画出圆心和圆周上的无人机,标出半径和角度。对于锥形编队,画出等边三角形的结构。画图的过程就是理解题目的过程。
然后,把题目中的文字描述翻译成数学语言。比如“纯方位无源定位”翻译成“已知几个固定点的位置和接收到的方位角,反推动点位置”。“位置调整”翻译成“通过迭代搜索,使动点位置逼近理想位置”。
5.2 建模阶段:先特殊,再一般
不要一上来就建最复杂的模型。先从最简单的情况入手,比如问题一第一小问,三个发射信号源位置无偏差,接收信号无人机位置有偏差。建立模型后,再推广到更复杂的情况。
建模时,注意符号说明。把每个变量的含义写清楚,比如r是圆周半径,α1、α2、α3是三个方位角,d0、d1、d2是距离。这样后续推导才不会乱。
5.3 求解阶段:先解析,再数值
如果方程比较简单,先尝试解析求解。比如问题一第一小问,可以用余弦定理直接推导出解析解。如果方程太复杂,再用数值方法。MATLAB的符号计算工具箱可以帮助你推导解析解,数值计算工具箱可以帮助你求解非线性方程组。
求解时,注意验证结果。比如,把求出的坐标代入原方程,看是否满足。如果不满足,说明推导或计算有误。
5.4 写作阶段:先逻辑,再细节
论文的写作顺序应该是:先写问题重述和问题分析,再写模型建立和求解,最后写模型评价和推广。每一部分都要有明确的逻辑链条,不能跳跃。
写作时,注意公式编号。每个公式都要编号,方便引用。比如“由公式(1)和公式(2)可得...”。这样阅卷人能快速定位你的推导过程。
5.5 检查阶段:先结果,再过程
交卷前,先检查结果是否合理。比如,圆形编队的半径是100米,那么无人机的坐标应该在-100到100之间。如果算出来是1000,说明有误。
然后检查过程是否完整。每个假设都要有依据,每个公式都要有推导,每个结果都要有验证。如果时间允许,可以用不同的方法验证同一个结果。
提示:阅卷人最看重的是逻辑链条的完整性,而不是结果的精确性。即使最后结果有微小偏差,只要推导过程正确,依然能拿高分。
从那以后我每次拿到建模题,都强制走一遍“画图→列方程→验证→写作”的流程,不跳过任何一步。希望帮到你。
本文还有配套的精品资源,点击获取