您的点赞收藏是我继续更新的最大动力!
一定要点击如下的卡片,那是获取资料的入口!
【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」👋👋 👋👋 更新前四问保奖matlab代码+手写文稿+代码讲解视频等(后续会更新https://mbd.pub/o/bread/ZpqblJpw
2.1问题一的分析
本文建立了基于参数方程的运动学模型:假设龙头沿着一个由螺线形成的路径运动。用极坐标公式表示螺线。龙头的速度是已知的常数值 v,根据螺线公式和速度的关系,可以推导出龙头位置随时间的变化。之后分析龙身关节运动,每个关节的位置可以通过沿着龙头的运动方向延伸得到。假设每个关节之间的距离是常数,这样可以通过偏移角度来计算每个关节的位置。
2.2问题二的分析
第二问要求我们找出板凳龙盘入过程中各个关节的位置和速度,并确定其在碰撞发生时刻的位置和速度。首先根据题干提供的板凳龙的尺寸参数,科学设置碰撞阈值,之后计算龙头和各个关节在不同时间步的位置信息,检测关节之间的碰撞情况,并在碰撞发生时记录各个关节的位置和速度,然后将这些数据可视化。
2.3问题三的分析
首先进行参数初始化:确定调头空间的直径和半径。确定盘入角度变化范围(如θmax=4π) 。 确定龙头、龙身和龙尾的尺寸和数量。之后定义优化目标:目标函数为最小化螺距a。使用线性规划方法来求解最小螺距。构建三个约束条件:最大半径约束,即确保螺旋线的最大半径不超过调头空间的半径。龙头长度约束,即确保螺旋线的初始部分能够容纳龙头。龙身长度约束,即确保螺旋线的总长度能够容纳整个龙身。之后采用线性规划模型求解,使用Python的scipy.optimize.linprog来求解最小螺距a。
分享部分代码:
clc;close all
warning off
luoju=55e-2; % 螺距
k=luoju/2/pi; % 螺线方程的系数 r=k theta
L1=341e-2;
D1=L1-27.5e-2*2; % 龙头把手两个孔之间的距离
L2=220e-2;
D2=L2-27.5e-2*2; % 其他凳子把手两个孔之间的距离
%% 先画出部分螺线
theta=16*2*pi:-0.01:0*pi;
r=k*theta;
x=r.*cos(theta);
y=r.*sin(theta);
figure(1)
set(gcf,'Position',[200 200 600 600]);
plot(x,y,'--')
axis equal
grid on
xlabel('x')
ylabel('y')
hold on
% 第一步,先确定300s内,龙头第一个把手的位置演化
mydtheta=@(t,theta)-1./(k*sqrt(1+theta.^2));
theta0=2*pi*16; % 初始位置时候的角度
dt=0.1; % 时间步长
tspan=0:dt:300; % 求解时间点
[tt,theta]=ode45(mydtheta,tspan,theta0); % 龙格库塔法求解
X1=k*theta.*cos(theta);
Y1=k*theta.*sin(theta);
for i=1:10:length(theta)
title({['t=',num2str(tt(i))],'小哭包老师出品','头部第一个把手中心的轨迹'})
plot(X1(i),Y1(i),'r.','MarkerSize',10)
drawnow
end
hwait=waitbar(0,'计算开始...')
%% 第二步,确定每个时间点下,头部凳子的后面一个孔(也要在螺线上),以及龙身和龙尾凳子各个孔所在位置(都要在螺线上)
N=223; % 龙头+龙身+龙尾总的个数
X=nan*zeros(N+1,length(X1));
Y=nan*zeros(N+1,length(X1)); % 每一行代表每个凳子的前把手孔的位置在各个时间点处的值,因为尾部还有一个孔,所以一共223+1个,所以X和Y对应223+1行
Theta=nan*zeros(N+1,length(X1)); % 记录每个孔在各个时刻处的位置对应的角度theta(这为了求速度的)
X(1,:)=X1;
Y(1,:)=Y1;% 第一行已知了,上面求得的头部第一个把手位置数据
Theta(1,:)=theta; % 第一行已知了,第一个把手的角度数据,上面求了
for j=1:length(tt)
for i=2:N+1 % 在每一个时间点下,对每一行循环计算,意思是求出此时各个把手孔的位置信息
d=D1*(i<=2)+D2*(i>2); % 分辨下是第一个凳子还是其他凳子,孔之间的距离不一样!