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)

python 复制代码
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_i
    x_i = r_i * np.cos(theta_i)
    y_i = r_i * np.sin(theta_i)
    positions[2 * i, :] = x_i
    positions[2 * i + 1, :] = y_i
    speeds[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='速度')
bash 复制代码
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);  % 螺距/2pi

times = 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+2
    theta_i = theta - (segment_length * i / a);
    r_i = a * theta_i;
    positions(2 * i + 1, :) = r_i .* cos(theta_i);  % x
    positions(2 * i + 2, :) = r_i .* sin(theta_i);  % y
end

% 计算速度
for i = 1:n_segments+3
    dx = 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名片即可
相关推荐
数模竞赛Paid answer14 小时前
2021年深圳杯数学建模C题配电网可靠性和故障软自愈研究解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
数模竞赛Paid answer2 天前
2026年华数杯数学建模A题微构体中填充导电介质的仿真优化解题全过程及程序
数学建模·数据分析·华数杯
数模竞赛Paid answer2 天前
2021年深圳杯数学建模B题背向瑞利散射光纤激光传感器设计解题全过程论文及程序
数学建模·数据分析·深圳杯
数模竞赛Paid answer2 天前
2026年五一杯数学建模B题多工序协同作业问题求解全过程文档及程序
数学建模·数据分析·五一杯
数模竞赛Paid answer2 天前
2026年五一杯数学建模A题煤矿巷道支护问题求解全过程文档及程序
数学建模·数据分析·五一杯
数模竞赛Paid answer2 天前
2026年五一杯数学建模C题边坡预警问题求解全过程文档及程序
算法·数学建模·五一杯
数模竞赛Paid answer2 天前
2021年深圳杯数学建模A题火星探测器着陆控制方案解题全过程论文及程序
算法·数学建模·深圳杯
smppbzyc3 天前
2026华数杯数学建模A题原创论文分享
数学建模·数学建模竞赛·华数杯·全国大学生数学建模竞赛·华数杯数学建模·2026华数杯
数模竞赛Paid answer3 天前
2024年五一杯数学建模A题钢板最优切割路径问题求解全过程论文及程序
数学建模·数据分析·五一杯
茜茜数模3 天前
2026华数杯A题完整思路+论文+代码:微构体中填充导电介质的仿真优化
数学建模·华数杯