欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2025/2/22 22:00:21 来源:https://blog.csdn.net/weixin_43292788/article/details/145744176  浏览:    关键词:2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模

A题 板凳龙闹元宵

原题再现

  “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头,龙身和龙尾相随盘旋,整体呈圆盘状。一般来说,在舞龙队能够自如地盘入和盘出的前提下,盘龙所需要的面积越小、行进速度越快,则观赏性越好。
  某板凳龙由223节板凳组成,其中第1节为龙头,后面221节为龙身,最后1节为龙尾。龙头的板长为341 cm,龙身和龙尾的板长均为220 cm,所有板凳的板宽均为30 cm。每节板凳上均有两个孔,孔径(孔的直径)为5.5 cm,孔的中心距离最近的板头27.5 cm(见图1和图2)。相邻两条板凳通过把手连接(见图3)。
在这里插入图片描述
  请建立数学模型,解决以下问题:
  问题1 舞龙队沿螺距为55 cm的等距螺线顺时针盘入,各把手中心均位于螺线上。龙头前把手的行进速度始终保持1 m/s。初始时,龙头位于螺线第16圈A点处(见图4)。请给出从初始时刻到300 s为止,每秒整个舞龙队的位置和速度(指龙头、龙身和龙尾各前把手及龙尾后把手中心的位置和速度,下同),将结果保存到文件result1.xlsx中(模板文件见附件,其中“龙尾(后)”表示龙尾后把手,其余的均是前把手,结果保留6位小数,下同)。同时在论文中给出0 s、60 s、120 s、180 s、240 s、300 s时,龙头前把手、龙头后面第1、51、101、151、201节龙身前把手和龙尾后把手的位置和速度(格式见表1和表2)。
在这里插入图片描述
在这里插入图片描述
  问题2 舞龙队沿问题1设定的螺线盘入,请确定舞龙队盘入的终止时刻,使得板凳之间不发生碰撞(即舞龙队不能再继续盘入的时间),并给出此时舞龙队的位置和速度,将结果存放到文件result2.xlsx中(模板文件见附件)。同时在论文中给出此时龙头前把手、龙头后面第1、51、101、151、201条龙身前把手和龙尾后把手的位置和速度。
  问题3 从盘入到盘出,舞龙队将由顺时针盘入调头切换为逆时针盘出,这需要一定的调头空间。若调头空间是以螺线中心为圆心、直径为9 m的圆形区域(见图5),请确定最小螺距,使得龙头前把手能够沿着相应的螺线盘入到调头空间的边界。
在这里插入图片描述
  问题4 盘入螺线的螺距为1.7 m,盘出螺线与盘入螺线关于螺线中心呈中心对称,舞龙队在问题3设定的调头空间内完成调头,调头路径是由两段圆弧相切连接而成的S形曲线,前一段圆弧的半径是后一段的2倍,它与盘入、盘出螺线均相切。能否调整圆弧,仍保持各部分相切,使得调头曲线变短? 龙头前把手的行进速度始终保持1 m/s。以调头开始时间为零时刻,给出从−100 s开始到100 s为止,每秒舞龙队的位置和速度,将结果存放到文件result4.xlsx中(模板文件见附件)。同时在论文中给出−100 s、−50 s、0 s、50 s、100 s时,龙头前把手、龙头后面第1、51、101、151、201节龙身前把手和龙尾后把手的位置和速度。
  问题5 舞龙队沿问题4设定的路径行进,龙头行进速度保持不变,请确定龙头的最大行进速度,使得舞龙队各把手的速度均不超过2 m/s。

整体求解过程概述(摘要)

  本文以中国传统舞龙表演中的“板凳龙”为研究对象,分析并优化了舞龙队在复杂路径下的运动过程,旨在确定板凳龙的运动轨迹和速度限制。研究重点在于确保板凳龙各个部分在特定几何约束下能够顺利运行。
  针对问题一,利用极坐标下的阿基米德螺旋线方程,设定龙头速度为1 m/s,建立舞龙队沿等距螺线行进的数学模型。通过螺旋线模型,计算出从初始时刻至300秒时龙头及各板凳的位置信息与速度分布,并通过微分方法求解速度,确保各把手间的距离保持一致。模型得出了各时间点下龙身与龙尾的运动轨迹,并对关键节点进行了速度分析。
  针对问题二,本文通过建立碰撞检测模型,计算舞龙队在螺旋线盘入时的终止时刻。在此过程中,实时监测相邻板凳间的距离变化,确定在螺距设定条件下,约440秒时板凳将发生碰撞,达到无法继续盘入的终止时刻。
  针对问题三,本文分析了舞龙队在9米直径的圆形调头空间内的最小螺距问题。通过优化螺旋线螺距,确保舞龙队顺利从顺时针盘入到逆时针盘出,并避免碰撞。结果显示,最小螺距为0.179米。
  针对问题四,本文设计并优化了板凳龙在调头空间内的S形调头路径。路径由两段圆弧组成,最小化路径长度,并确保调头过程中位置、速度、加速度的连续性。通过数值求解,得出了从-100秒至100秒期间各板凳的运动轨迹,并对调头路径进行了可视化。仿真结果显示,优化后的S形曲线有效缩短了调头路径,保证了调头过程的平滑性与连续性。
  针对问题五,本文构建了动态速度约束优化模型,确定了在不超过2 m/s速度限制下龙头的最大行进速度。利用二分搜索法,最终确定龙头的最大允许速度约为1.6 m/s,在此速度下,舞龙队各板凳的速度均不超过2 m/s,符合题目要求。

模型假设:

  1.假设舞龙队在运动过程中不受除自身运动外的其他外力作用。
  2.假设忽略板凳和连接部件的弹性变形,在整个运动过程中保持形状不变。
  3.假设舞龙队的运动简化为二维平面上的运动,忽略垂直方向上的运动。

问题分析:

  问题一的分析
  针对问题一,舞龙队沿等距螺旋线运动的问题涉及到计算龙头、龙身和龙尾在300秒内的位置和速度。龙头以1米/秒的速度沿螺旋线前进,龙身和龙尾的位置则根据它们与龙头的相对角度确定。通过数学建模,我们可以计算出每个时间点舞龙队各部分的具体位置和速度。
  问题二的分析
  针对问题2,舞龙队沿问题一设定的螺线盘入的过程中,确定一个终止时刻,该时刻标志着舞龙队无法再继续盘入而板凳之间不发生碰撞。意味着舞龙队盘入到某个程度时,其占用的空间或形状达到了螺线所能容纳的极限。 为了找到这个终止时刻,考虑舞龙队的整体长度、螺线的螺距以及每节板凳之间的连接方式和空间需求。由于板凳龙由多节板凳首尾相连组成,随着盘入过程的进行,板凳之间的相对位置会不断变化,直至达到一个临界点,此时再进一步盘入就会导致板凳间的碰撞。
  问题三的分析
  针对问题3,从顺时针盘入到逆时针盘出的过程中,为确保龙头前把手能够沿着螺线顺利盘入到指定的调头空间边界,需确定一个最小的螺距,该调头空间是以螺线中心为圆心、直径为9米的圆形区域。考虑螺距对螺线形状和间距的影响,螺距决定了螺线每旋转一周时径向增加的距离,从而影响到螺线的紧密程度和所占用的空间范围。在舞龙队盘入的过程中,如果螺距过大,会导致调头空间的浪费;如果螺距过小,则可能使得舞龙队内部发生碰撞。通过计算和优化来确定一个最小的螺距值,使得龙头前把手在盘入过程中能够恰好达到或接近调头空间的边界,同时保证舞龙队内部不会发生碰撞。
  问题四的分析
  针对问题4,在给定螺距和调头空间内,舞龙队通过调整S形调头曲线的圆弧来缩短路径长度,同时保持与两段螺线的相切关系。模拟舞龙队从-100秒到100秒内的运动,包括螺线盘入、S形调头及盘出过程,保持龙头前把手速度恒定。计算每秒舞龙队各关键部分的位置和速度,并将其记录。
  问题五的分析
  针对问题5,沿问题4中,龙头的最大行进速度保持不变。将龙头的行进速度将作为控制变量,目标是确保舞龙队中每一个把手在运动过程中的速度都不超过2 m/s。 龙头速度变化时,龙身各部分如何随之移动,监测所有把手的速度是否保持在安全限制以内。通过逐步调整龙头速度并观察结果,可以确定一个最大的龙头行进速度,使得舞龙队在运动过程中所有把手的速度均不超过2 m/s。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.colors import ListedColormap# 设置中文字体为SimHei(黑体)
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题# 参数设定
a = 55 / (2 * np.pi)  # 螺距与圆周率的比例
v = 1  # m/s 龙头速度
time_end = 300  # s 终止时间
dt = 1  # 时间步长
n_segments = 221  # 龙身节数
dragon_head_length = 3.41  # 龙头长度(米)
segment_length = 2.2  # 每节龙身长度(米)
colors = plt.cm.cool(np.linspace(0, 1, n_segments + 3))  # 颜色渐变# 初始角度和半径
theta_0 = 16 * 2 * np.pi# 时间序列
times = np.arange(0, time_end + dt, dt)# 计算龙头位置
theta = theta_0 + (v / a) * times
r = a * theta
x_head = r * np.cos(theta)
y_head = r * np.sin(theta)# 初始化位置和速度存储
positions = np.zeros((2 * (n_segments + 3), len(times)))  # 位置
speeds = np.zeros((n_segments + 3, len(times)))  # 速度# 计算龙头位置和速度
positions[0, :] = x_head
positions[1, :] = y_head
speeds[0, :] = v# 计算龙身和龙尾位置及速度,考虑龙头与龙身长度不同
for i in range(1, n_segments + 3):if i == 1:  # 龙头与第一节龙身之间长度不同theta_i = theta - (dragon_head_length / a)else:theta_i = theta - (segment_length * i / a)r_i = a * theta_ix_i = r_i * np.cos(theta_i)y_i = r_i * np.sin(theta_i)positions[2 * i, :] = x_ipositions[2 * i + 1, :] = y_ispeeds[i, 1:] = np.sqrt((x_i[1:] - x_i[:-1]) ** 2 + (y_i[1:] - y_i[:-1]) ** 2) / dt# 创建螺线
theta_spiral = np.linspace(0, theta_0, 1000)
r_spiral = a * theta_spiral
x_spiral = r_spiral * np.cos(theta_spiral)
y_spiral = r_spiral * np.sin(theta_spiral)# 可视化图像
fig, ax = plt.subplots(figsize=(14, 10))
cmap = ListedColormap(plt.cm.cool(np.linspace(0.1, 0.9, n_segments + 3)))# 绘制螺旋线
ax.plot(x_spiral, y_spiral, 'k--', lw=1, label='初始螺线')# 绘制龙身轨迹
for i in range(n_segments + 3):ax.plot(positions[2 * i], positions[2 * i + 1], color=cmap(i), lw=2,label=f'第{i}节' if i > 0 else '龙头')# 龙头和龙尾用特殊标记表示
ax.plot(positions[0], positions[1], 'o', color='red', markersize=6, label='龙头')
ax.plot(positions[-2], positions[-1], 'o', color='blue', markersize=6, label='龙尾')# 中文标注
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.1), fontsize=10, ncol=5)
ax.set_title('板凳龙盘旋轨迹', fontsize=18)
ax.set_xlabel('X 位置 (米)', fontsize=14)
ax.set_ylabel('Y 位置 (米)', fontsize=14)
ax.grid(True)# 高分辨率保存图像
plt.savefig('dragon_trajectory_with_spiral_cn.png', dpi=300, bbox_inches='tight')
plt.show()# 保存位置和速度数据到Excel文件
df_positions = pd.DataFrame(positions, columns=[f"{t}秒" for t in times])
df_speeds = pd.DataFrame(speeds, columns=[f"{t}秒" for t in times])with pd.ExcelWriter('result1_optimized_cn.xlsx') as writer:df_positions.to_excel(writer, sheet_name='位置')df_speeds.to_excel(writer, sheet_name='速度')
clc; clear all; close all;% 参数设定
pitch = 55;  % 螺距
v = 1;  % m/s
time_end = 300;  % s
dt = 1;  % 时间步长
n_segments = 221;  % 龙身节数
dragon_head_length = 3.41;  % 龙头长度(米)
segment_length = 2.2;  % 每节龙身长度(米)% 初始参数
theta_0 = 16 * 2 * pi;
a = pitch / (2 * pi);  % 螺距/2pitimes = 0:dt:time_end;  % 时间序列% 计算龙头位置
theta = theta_0 + (v / a) * times;
r = a * theta;
x_head = r .* cos(theta);
y_head = r .* sin(theta);% 初始化位置与速度数组
positions = zeros(2 * (n_segments + 3), length(times));
speeds = zeros(n_segments + 3, length(times) - 1);% 计算每一节的龙身与龙尾位置(x和y)
positions(1, :) = x_head;  % x 位置
positions(2, :) = y_head;  % y 位置for i = 1:n_segments+2theta_i = theta - (segment_length * i / a);r_i = a * theta_i;positions(2 * i + 1, :) = r_i .* cos(theta_i);  % xpositions(2 * i + 2, :) = r_i .* sin(theta_i);  % y
end% 计算速度
for i = 1:n_segments+3dx = diff(positions(2*i-1, :));dy = diff(positions(2*i, :));speeds(i, :) = sqrt(dx.^2 + dy.^2) / dt;
end% 数据平滑处理(使用移动平均)
smooth_window = 5;
smooth_speeds = movmean(speeds, smooth_window, 2);% 绘制速度随时间的变化图
figure;
hold on;% 龙头速度
plot(times(1:end-1), smooth_speeds(1, :), 'r-', 'LineWidth', 2, 'DisplayName', '龙头');
plot(times(1:end-1), smooth_speeds(ceil(n_segments/2), :), 'g--', 'LineWidth', 2, 'DisplayName', '中间龙身');
plot(times(1:end-1), smooth_speeds(end, :), 'b-.', 'LineWidth', 2, 'DisplayName', '龙尾');% 标记点
plot(times(1:end-1), smooth_speeds(1, :), 'ro', 'MarkerFaceColor', 'r');
plot(times(1:end-1), smooth_speeds(ceil(n_segments/2), :), 'go', 'MarkerFaceColor', 'g');
plot(times(1:end-1), smooth_speeds(end, :), 'bo', 'MarkerFaceColor', 'b');% 添加中文标签和标题
xlabel('时间 (秒)', 'FontSize', 14);
ylabel('速度 (m/s)', 'FontSize', 14);
title('龙头、龙身和龙尾的速度随时间变化', 'FontSize', 16);% 设置网格和图例
grid on;
legend('show', 'Location', 'northeast');% 调整图像显示范围
xlim([0 time_end]);
ylim([0 max(smooth_speeds(:)) * 1.2]);  % 适当扩大y轴范围% 保存为高分辨率图片
saveas(gcf, 'speed_vs_time_optimized.png');
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词