数学实验报告.docx
《数学实验报告.docx》由会员分享,可在线阅读,更多相关《数学实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
数学实验报告
数学建模实验报告
学院:
材料科学与工程
班级:
材料91
组员:
樊啸09021011
黄胜09021014
雷子健09021015
一、实验问题
如图所示,有一只猎狗在B点位置发现了一只兔子在正东北方向距离它200米的地方O处,此时兔子开始以8米/秒的速度向正西北方距离为120米的洞口A全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向全速奔跑,按要求完成下面的实验:
⑴问猎狗能追上兔子的最小速度是多少?
⑵选取猎狗的速度分别为15、18米/秒,计算猎狗追上兔子时跑过的路程和时间。
⑶画出猎狗追赶兔子奔跑的曲线图。
二、数学推导
用计算机仿真法对上述问题进行模拟、分析和研究。
⑴设置时间步长为dt,兔子速度为8米/秒,猎狗速度为b(b在程序中输入一设定值,我们先选用了18),兔子的初始位置在坐标原点,猎狗的初始位置在(-100
,-100
)。
⑵
由t1时兔子和猎狗的位置坐标计算兔子和猎狗在t2=t1+dt时的坐标(x1,y1)和(x2,y2):
x1=-4
t
y1=4
t
x2=x2(t1)+bdt
y2=y2(t1)+bdt
⑶计算兔子与猎狗之间的距离
d=
如果d小于事先设定的距离,则退出循环,否则让时间产生一个步长,返回到第二步继续进入下一次循环。
⑷当循环成功退出后,说明点(x1,y1)和(x2,y2)之间的距离小于设定的猎狗追上兔子的距离,循环终止时的时间t即为猎狗追上兔子所用的时间。
说明:
在回答第一小问时,通过多次输入b的值,直至找到使t等于15的b(15=120/8,为兔子跑到洞口所需的时间,此时的b为猎狗的最小速度)。
三、实验程序及结果
b=16.75
D=0.5
dt=0.2
t=0
holdon
ezplot('x',[-100*sqrt
(2),0])
ezplot('-x',[-60*sqrt
(2),0])
axis([-100*sqrt
(2)0-100*sqrt
(2)60*sqrt
(2)])
axisequal
x1=0;y1=0;x2=-100*sqrt
(2);y2=-100*sqrt
(2)
whilesqrt((x1-x2)^2+(y1-y2)^2)>D
t=t+dt
x1=-4*sqrt
(2)*t
y1=4*sqrt
(2)*t
x2=x2+b*dt*(-4*sqrt
(2)*t-x2)/sqrt((-4*sqrt
(2)*t-x2)^2+(4*sqrt
(2)*t-y2)^2)
y2=y2+b*dt*(4*sqrt
(2)*t-y2)/sqrt((-4*sqrt
(2)*t-x2)^2+(4*sqrt
(2)*t-y2)^2)
plot(x1,y1,'r.',x2,y2,'g.')
pause(0.1)
end
b
t
s=t*b
运行结果:
(1)b=
16.7500
D=
2
dt=
0.2000
t=
0
……
t=
15.0000
经试验得,狗的速度为16.75时,追赶上兔子的时间为15s,正好是兔子跑到洞口的时间。
即狗的最小速度为16.75m/s
(2)将b=15带入输入程序计算,则时间为正无穷,即此速度下猎狗追不到兔子
(3)将b=18输入程序计算,结果如下
b=
18
D=
2
dt=
0.2000
t=
0
y2=
-141.4214
t=
0.2000
t=
0.4000
t=
0.6000
t=
0.8000
t=
1
t=
1.2000
t=
1.4000
t=
1.6000
t=
1.8000
t=
2.0000
t=
2.2000
t=
2.4000
t=
2.6000
t=
2.8000
t=
3.0000
t=
3.2000
t=
3.4000
t=
3.6000
t=
3.8000
t=
4.0000
t=
4.2000
t=
4.4000
t=
4.6000
t=
4.8000
t=
5.0000
t=
5.2000
t=
5.4000
t=
5.6000
t=
5.8000
t=
6.0000
t=
6.2000
t=
6.4000
t=
6.6000
t=
6.8000
t=
7.0000
t=
7.2000
t=
7.4000
t=
7.6000
t=
7.8000
t=
8.0000
t=
8.2000
t=
8.4000
t=
8.6000
t=
8.8000
t=
9
t=
9.2000
t=
9.4000
t=
9.6000
t=
9.8000
t=
10.0000
t=
10.2000
t=
10.4000
t=
10.6000
t=
10.8000
t=
11.0000
t=
11.2000
t=
11.4000
t=
11.6000
t=
11.8000
t=
12.0000
t=
12.2000
t=
12.4000
t=
12.6000
t=
12.8000
t=
13.0000
t=
13.2000
t=
13.4000
b=
18
t=
13.4000
s=
241.2000
此时追赶时间为13.4s,猎狗跑过的距离为241.2m
⑷猎狗追赶兔子曲线图如下(b等于18):
二:
现要在一旷野区域举行一场车赛,为了了解环形赛道的路况,现对一选手比赛情况进行监测。
该选手从A地出发向东到B,在经C、D回到A地,(如图)。
现从选手出发开始计时,每隔15min观测其位置,所得相应各点坐标如下表(假设其体力是均匀分配的):
clf;clear
x1=[0.24.966.559.7113.1716.2318.3620.5323.1526.4928.2329.130.6530.9231.6733.0334.3535.0137.5];
y1=[6.665.284.685.192.346.945.559.865.283.873.042.883.682.382.062.582.161.456];
plot(x1,y1,'k.','markersize',15);
axis([-540045])
grid;holdon
t1=0.2:
0.01:
37.5;
u1=spline(x1,y1,t1);
plot(t1,u1)
p1=sqrt(diff(t1).^2+diff(u1).^2);
x2=[0.21.84.906.519.7313.1816.2018.9220.5023.2325.5628.3129.4530.0030.9231.6733.3134.2335.8137.5];
y2=[6.6619.8924.5234.8240.5437.6741.3830.0019.6814.5618.8618.5522.6618.2815.0613.4211.867.689.456];
plot(x2,y2,'k.','markersize',15);
t2=0.2:
0.01:
37.5;
u2=spline(x2,y2,t2);
plot(t2,u2)
p2=sqrt(diff(t2).^2+diff(u2).^2);
L=sum(p1)+sum(p2);
fprintf('L=%.2f\n',L)
以上为模拟路线源代码L=175.90km
z=f(x,y)是位移形状曲线,仅以此是无法求出速度的哦。
但如果已知x,y均为事件t的函数,那就可以求解了。
可以先求出各个速度分量再合成,即:
>>vx=diff(x,t);
>>vy=diff(y,t);
>>vz=diff(f(x,y),t);
>>v=sqrt(vx^2+vy^2+vz^2)
题中数据是每隔15分钟观测所得,对于车道上量不同的点之间的距离的近似:
d1=sum(vx);d2=sum(vy);d=d1-d2
那么,这两点间的平均速度可为:
v=d/0.25=4*d(km/h).
求解:
三次样条插值法
对于n+1个给定点的数据集{xi},我们可以用n段三次多项式在数据点之间构建一个三次样条。
如果
表示对函数f进行插值的样条函数,那么需要:
插值特性,S(xi)=f(xi)
样条相互连接,Si-1(xi)=Si(xi),i=1,...,n-1
两次连续可导,S'i-1(xi)=S'i(xi)以及S''i-1(xi)=S''i(xi),i=1,...,n-1.
由于每个三次多项式需要四个条件才能确定曲线形状,所以对于组成S的n个三次多项式来说,这就意味着需要4n个条件才能确定这些多项式。
但是,插值特性只给出了n+1个条件,内部数据点给出n+1?
2=n?
1个条件,总计是4n?
2个条件。
我们还需要另外两个条件,根据不同的因素我们可以使用不同的条件。
其中一项选择条件可以得到给定u与v的钳位三次样条,
另外,我们可以设
这样就得到自然三次样条。
自然三次样条几乎等同于生成样条设备的曲线。
在这些所有的二次连续可导函数中,钳位与自然三次样条可以得到相对于待插值函数f的最小震荡。
如果选择另外一些条件,
可以得到周期性的三次样条。
如果选择,
可以得到完整三次样条。
样条插值所得曲线能比较好的连接已知道的数据点,既有效地回避了插值中的龙格现象,又是连续光滑的用此曲线近似描述已知数据点的变化规律,应该说能较好的进行数据点之间的预测分析和求值。
在matlab中样条插值命令为:
y=spline(x1,y1,t)。
在本次试验中,所得速度v是利用近似方法求得,并不是在确切的时间点时的速度的精确值,所以当用光滑的曲线近似v-t变化规律时最好不让曲线穿过求得数据点,所以这里描绘v-t曲线时用曲线拟合的方法。
程序源代码和运行结果如下:
clear;clc;clf;
x=[0.24.966.559.7113.1716.2318.3620.5323.1526.4928.2329.130.6530.9231.6733.0334.3535.0137.5];
y=[6.665.284.685.192.346.945.559.865.283.873.042.883.682.382.062.582.161.456];
subplot(1,2,1)
plot(x,y,'k.','markersize',15)
axis([040045]);
grid;holdon
t=0.2:
0.01:
37.5;
u=spline(x,y,t);
s1=trapz(t,u);
p=sqrt(diff(t).^2+diff(u).^2);
l1=sum(p);
v=[];
fori=1:
18
v(i)=4*sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2);
ifv(i)>30
a=find(tt(a)=NaN;
a=find(t>x(i+1));
t(a)=NaN;
plot(t,u,'r-')
elseifv(i)<12
a=find(tt(a)=NaN;
a=find(t>x(i+1));
t(a)=NaN;
plot(t,u,'k-')
else
a=find(tt(a)=NaN;
a=find(t>x(i+1));
t(a)=NaN;
plot(t,u,'b-')
end
t=0.2:
0.01:
37.5;
end
x1=[0.21.84.906.519.7313.1816.2018.9220.5023.2325.5628.3129.4530.0030.9231.6733.3134.2335.8137.5];
y1=[6.6619.8924.5234.8240.5437.6741.3830.0019.6814.5618.8618.5522.6618.2815.0613.4211.867.689.456];
holdon
plot(x1,y1,'k.','markersize',15)
u=spline(x1,y1,t);
s2=trapz(t,u);
p=sqrt(diff(t).^2+diff(u).^2);
l2=sum(p);
fori=19:
37
v(i)=4*sqrt((x1(39-i)-x1(38-i))^2+(y1(39-i)-y1(38-i))^2);
ifv(i)>30
a=find(tt(a)=NaN;
a=find(t>x1(39-i));
t(a)=NaN;
plot(t,u,'r-')
elseifv(i)<12
a=find(tt(a)=NaN;
a=find(t>x1(39-i));
t(a)=NaN;
plot(t,u,'k-')
else
a=find(tt(a)=NaN;
a=find(t>x1(39-i));
t(a)=NaN;
plot(t,u,'b-')
end
t=0.2:
0.01:
37.5;
end
s=s2-s1;
l=l1+l2;
fprintf('s=%.4f,l=%.4f\n',s,l)
t=0.125:
0.25:
9.125;
subplot(1,2,2)
holdon
axis([09.5045])
grid
plot(t,v,'k.','markersize',25)
p=polyfit(t,v,3);
a=0:
0.01:
9;
s=polyval(p,a);
holdon
plot(a,s,'k-','linewidth',2)
车道长度:
l=175.9035;
所围区域面积:
s=733.0783。
图1:
模拟比赛车道的曲线(彩图见附录)
三、对选手的建议:
赛前熟悉一下路况,大致了解在车道上的那些路段的大概情况(是平整沙土路,坑洼碎石路还是松软泥泞路),不同的路况有不同的速度限制以保证选手的人身安全。
在平整沙土路可以保持大于30km/h的时速,在坑洼碎石路保持12-30km/h的时速,在松软泥泞路要保持低于12km/h的时速,这样既能以最快的速度完成比赛,又不会发生安全事故。
clear;clc;clf;
x=[0.24.966.559.7113.1716.2318.3620.5323.1526.4928.2329.130.6530.9231.6733.0334.3535.0137.5];
y=[6.665.284.685.192.346.945.559.865.283.873.042.883.682.382.062.582.161.456];
subplot(1,2,1)
plot(x,y,'k.','markersize',15)
axis([040045]);
grid;holdon
t=0.2:
0.01:
37.5;
u=spline(x,y,t);
s1=trapz(t,u);
p=sqrt(diff(t).^2+diff(u).^2);
l1=sum(p);
v=[];
fori=1:
18
v(i)=4*sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2);
ifv(i)>30
a=find(tt(a)=NaN;
a=find(t>x(i+1));
t(a)=NaN;
plot(t,u,'r-')
elseifv(i)<12
a=find(tt(a)=NaN;
a=find(t>x(i+1));
t(a)=NaN;
plot(t,u,'k-')
else
a=find(tt(a)=NaN;
a=find(t>x(i+1));
t(a)=NaN;
plot(t,u,'b-')
end
t=0.2:
0.01:
37.5;
end
x1=[0.21.84.906.519.7313.1816.2018.9220.5023.2325.5628.3129.4530.0030.9231.6733.3134.2335.8137.5];
y1=[6.6619.8924.5234.8240.5437.6741.3830.0019.6814.5618.8618.5522.6618.2815.0613.4211.867.689.456];
holdon
plot(x1,y1,'k.','markersize',15)
u=spline(x1,y1,t);
s2=trapz(t,u);
p=sqrt(diff(t).^2+diff(u).^2);
l2=sum(p);
fori=19:
37
v(i)=4*sqrt((x1(39-i)-x1(38-i))^2+(y1(39-i)-y1(38-i))^2);
ifv(i)>30
a=find(tt(a)=NaN;
a=find(t>x1(39-i));
t(a)=NaN;
plot(t,u,'r-')
elseifv(i)<12
a=find(tt(a)=NaN;
a=find(t>x1(39-i));
t(a)=NaN;
plot(t,u,'k-')
else
a=find(tt(a)=NaN;
a=find(t>x1(39-i));
t(a)=NaN;
plot(t,u,'b-')
end
t=0.2:
0.01:
37.5;
end
s=s2-s1;
l=l1+l2;
fprintf('s=%.4f,l=%.4f\n',s,l)
t=0.125:
0.25:
9.125;
subplot(1,2,2)
holdon
axis([09.5045])
grid
plot(t,v,'k.','markersize',25)
p=polyfit(t,v,3);
a=0:
0.01:
9;
s=polyval(p,a);
holdon
plot(a,s,'k-','linewidth',2)
二、实验心的
在解决实际问题时首先应该建立合适的数学模型,然后求解。
在解决本次实验问题时,感谢刘老师对我们的亲切指导。
我们首先仿照缉私艇追击走私船的例子建立了数学模型,我们第一次尝试的方法是求解析解,但是发现用这种方法时,建立的二阶微分方程十分复杂,后续的推导和计算都比较困难,所以我们采用了计算机仿真法。
经过多次分析,修改,最终得出结论。
但是结果还有一定的缺陷,希望在以后的学习和复习中能够努力,解决好存在的问题。