目录
摘要
本文研究的是小孩拉玩具问题。通过建立合理的数学模型,列出对应常微分方程,利用matlab软件求出常微分方程的解,通过matlab编程绘图得到玩具运动的轨迹。
首先我们建立平面直角坐标系,因为小孩的运动轨迹影响玩具的运动轨迹,这里通过几个特殊的小孩轨迹来讨论玩具的运动。
一 问题重述
一个小孩借助长度为a的硬棒,拉或推某玩具。此小孩沿某曲线行走,计算并画出玩具的轨迹。
二 模型假设
- 小孩与玩具的运动始终在一个水平的平面。
- 小孩拉硬棒的方式在运动过程中始终没发生变化,即硬棒与地面的夹角始终没有变化。
- 小孩和玩具在平面上的投影均看成物理质点。
- 整个运动过程不受外界影响。
三 分析与建立模型
- 符号说明:
小孩和玩具在平面直角坐标系上的坐标均为关于时间t的函数。
玩具的坐标
小孩的坐标
v 小孩的速度
u 玩具的速度
d 硬棒在地面上的投影长度
硬棒的单位方向向量
1.由于小孩拉硬棒的方式在运动过程中始终没发生变化,即硬棒与地面的夹角始终没有变化。小孩与玩具的距离始终为硬棒在地面上的投影,可得:
2.玩具总是在硬棒的方向上运动,因此,两个位置的相位差是玩具速度方向的倍数,即:
,
3.玩具的速度大小与小孩的速度在硬棒在地面上的投影的投影大小相等,由此可得:
4.联立以上式子,可得:
四 模型求解
使用matlab软件(这里以小孩做圆周运动为例),即:
建立函数文件eq1.m
function dy=eq1(t,y)
dy=zeros(2,1);
dy(1)=((-1)*sin(t)*(cos(t)-y(1))+cos(t)*(sin(t)-y(2)))*(cos(t)-y(1));
dy(2)=((-1)*sin(t)*(cos(t)-y(1))+cos(t)*(sin(t)-y(2)))*(sin(t)-y(2));
End
建立主函数Untitled4.m
[t,y]=ode45('eq1',[0,10],[2,0]);
T=0:0.1:10;
X=cos(T);
Y=sin(T);
plot(X,Y,'-')
hold on
plot(y(:,1),y(:,2),'*')
运行结果:
其中蓝色轨迹为小孩运动轨迹,红色轨迹为玩具运动轨迹。
更改小孩运动的轨迹(玩具在(1,0)处):
建立函数文件eq2.m
function dy=eq2(t,y)
dy=zeros(2,1);
dy(1)=((t-y(1))+(t-y(2)))*(t-y(1));
dy(2)=((t-y(1))+(t-y(2)))*(t-y(2));
end
建立主函数Untitled4.m
[t,y]=ode45('eq2',[0,10],[1,0]);
T=0:0.1:10;
X=T;
Y=T;
plot(X,Y,'-')
hold on
plot(y(:,1),y(:,2),'*')
运行结果:
五 模型检验和模型推广
将以上两种情况以真实的人和玩具去进行,能发现实际轨迹和matlab画出的轨迹近乎相同,这说明假设的数学模型和真实状态十分相符。但本文所讨论的问题也很有局限性,首先是假设了整个运动过程发生在了一个水平面上,而实际地面凹凸不平,应该是一个三维的环境。其次,本文只讨论了两种比较特殊的小孩运动轨迹,对问题的研究有一定的特殊性。综上,这个模型只能反应一个大致的小孩拉玩具的过程,更多更复杂的细节问题还有待完善。
六 参考文献
[1] 赵静等 数学建模与数学实验 (第三版)