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_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='速度')
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名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解同为科技桌面PDU系列产品特点

同为科技的桌面PDU系列产品是依据自身在电气联接领域25年专业积累并精心设计,产品采用模块化结构,实现各种功能、输出插口、输入方式可根据用户需求以模块组合的方式构建定制化产品。 桌面PDU产品特点 工业级材质和结构设计 桌面PDU系列产品采用一体成…

【排版教程】如何在Word/WPS中优雅的插入参考文献

材料展示 随便选取一段综述内容,以及对应的参考文献,如下图所示: 1 参考文献编辑 首先对参考文献部分进行编辑,将其设置自动编号 在段落中,选择悬挂缩进 在编号中,设置自定义编号,然后按照…

STM32 看门狗

目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…

【第二节】C++设计模式(创建型模式)-抽象工厂模式

目录 引言 一、抽象工厂模式概述 二、抽象工厂模式的应用 三、抽象工厂模式的适用场景 四、抽象工厂模式的优缺点 五、总结 引言 抽象工厂设计模式是一种创建型设计模式,旨在解决一系列相互依赖对象的创建问题。它与工厂方法模式密切相关,但在应用…

docker基操

docker基操 首先就是安装docker使用docker:创建容器-制作一个镜像-加载镜像首先就是安装docker 随便找一个教程安装就可以,安装过程中主要是不能访问谷歌,下面这篇文章写了镜像的一些问题: 安装docker的网络问题 使用docker:创建容器-制作一个镜像-加载镜像 主要是参考:这篇…

3D打印注塑件-省模具费90%的解决方案

"开模费用50万,首批订单才200件?" 这是许多制造企业的真实困境。传统注塑工艺动辄数周的开模周期和5-50万元的模具成本,让中小企业的产品迭代举步维艰。 在传统制造流程中,注塑件的生产往往需要高昂的模具开发费用和较…

Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当今社会,随着人们生活水平的不断提高和健康意识的日益增强,健…

美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台

作者:美的楼宇科技事业部 先行研究中心智能技术部 美的楼宇科技 IoT 数据平台建设背景 美的楼宇科技事业部(以下简称楼宇科技)是美的集团旗下五大板块之一,产品覆盖多联机组、大型冷水机组、单元机、机房空调、扶梯、直梯、货梯…

matlab 车辆进出检测算法设计GUI界面-论文

1、内容简介 matlab151-车辆进出检测算法设计GUI界面-论文 可以交流、咨询、答疑 2、内容说明 略 随着科学技术的进步,社会的发展,各行各业都在发生着巨大的变化。近段时间以来,“无人化”智能产业正处于一个风口阶段,似乎我们…

python学习书籍推荐

### Python 学习路线图概述 为了有效地掌握Python这门编程语言并应用于不同领域,构建一个合理的学习路径至关重要。此学习路径不仅涵盖了基础语法,还深入到特定应用方向的关键技术。 #### 基础阶段 在这个初始阶段,重点在于理解Python的基…

基于Spring Boot的农事管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

在 Ansys Motion 中创建链式伸缩臂的分步指南

介绍 链传动在负载和/或运动要远距离传递的机器中非常多产,例如,在两个平行轴之间。链条驱动系统的设计需要了解载荷传递和运动学如何影响链条张力、轴轴承中的悬臂载荷、轴应力和运动质量等。使用 Ansys Motion,可以轻松回答上述所有问题以…

Web Scraper,强大的浏览器爬虫插件!

Web Scraper是一款功能丰富的浏览器扩展爬虫工具,有着直观的图形界面,无需编写代码即可自定义数据抓取规则,高效地从网页中提取结构化数据,而且它支持灵活的数据导出选项,广泛应用于电商监控、内容聚合、市场调研等多元…

数据结构:栈和队列详解(下)

目录 一.如何用队列实现栈 1.思路: 2.具体代码: 二.如何用栈实现队列 1.思路: 2.具体代码: 一.如何用队列实现栈 原题来源:https://leetcode.cn/problems/implement-stack-using-queues/description/ 前言&#xf…

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…

宝塔面板开始ssl后,使用域名访问不了后台管理

宝塔面板后台开启ssl访问后,用的证书是其他第三方颁发的证书 再使用 域名/xxx 的形式:https://域名:xxx/xxx 访问后台,结果出现如下,不管使用 http 还是 https 的路径访问都进不后台管理 这个时候可以使用 https://ip/xxx 的方式来…

机器学习_12 逻辑回归知识点总结

逻辑回归是机器学习中一种重要的分类算法,广泛应用于二分类和多分类问题。它不仅能够预测分类结果,还能提供每个类别的概率估计。今天,我们就来深入探讨逻辑回归的原理、实现和应用。 一、逻辑回归的基本概念 1.1 逻辑回归与线性回归的区别…

AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践

前言 自2022年末ChatGPT的问世,大语言模型(LLM)技术引发全球关注。在大模型技术落地的最佳实践中,智能体(Agent)架构显现出巨大潜力,成为业界的普遍共识,各大公司也纷纷启动Agent技…

【工具篇】【深度解析 DeepAI 工具:开启 AI 应用新体验】

一、DeepAI 基本信息 嘿,咱先来说说 DeepAI 这工具到底是啥。DeepAI 是一个综合性的人工智能平台,就像是一个装满各种 AI 魔法的百宝箱。它把好多先进的人工智能技术整合到一起,让咱们普通人也能轻松用上这些高大上的 AI 功能。 这个平台背后有一群超厉害的技术人员,他们…

C语言之typedef

目录 前言 一、基本数据类型定义 二、作用 自带阅读 封装复杂类型的描述过程 三、指针类型定义 ​ 四、函数类型定义 总结 前言 typedef是C语言中用来为已有数据类型取别名的关键字。通过使用typedef关键字,可以方便地为数据类型定义新的名称,提高代码的…