数学实验报告实验题目:赛车车道路况分析问题小组成员:填写日期 2012 年 4 月 20 日一.问题概述赛车道路况分析问题现要举行一场山地自行车赛,为了了解环行赛道的路况,现对一选手比赛情况进行监测,该选手从A地出发向东到B,再经C、D回到A地(如下图)。
现从选手出发开始计时,每隔15min观测其位置,所得相应各点坐标如下表(假设其体力是均衡分配的):由D→C→B各点的位置坐标(单位:km)假设:1. 车道几乎是在平原上,但有三种路况(根据平均速度(km/h)大致区分):平整沙土路(v>30)、坑洼碎石路(10<v<30)、松软泥泞路(v<10);2. 车道是一条连续的可以用光滑曲线来近似的闭合路线;3.选手的速度是连续变化的.求解:1. 模拟比赛车道曲线和选手速度曲线;2.估计车道的长度和所围区域的面积;3.分析车道上相关路段的路面状况(用不同颜色或不同线型标记出来);4.对参加比赛选手提出合理建议.二.问题分析1.模拟比赛车道的曲线:因为赛道散点分布不规则,我们需要用光滑曲线来近似模拟赛道。
由于数据点较多,为了避免龙格现象,应采用三次样条插值法来对曲线进行模拟(spline命令)。
全程曲线为环路,我们需要对上下两部分分别模拟,设模拟出的曲线为P:。
2.把A到B点的曲线分成若干小段:赛道的路程L:取dL=,对模拟出的整条曲线求线积分,即所围区域的面积:用上下部分曲线的差值对求定积分,即3.用样条插值法模拟出比赛车道曲线后,根据曲线分别计算出原数据中每两点()间的路程,即求线积分由于每两点间时间间隔相同且已知(15min),故可求出每段路程的平均速度易知即为的积分中值将此速度近似作为两点间中点时刻的速度,然后再次采用样条插值法,模拟出全过程的图像。
而根据求出的与之间的关系,再次采用样条插值法,即可模拟出全过程的图像4. 由赛道曲线可求出赛道上任一点到点的路程同时图像也可以求出赛道上任一点到点的路程因此,我们可以通过来将曲线建立联系,得到一个新的函数。
从而对赛道曲线上任一点都有一个与之对应,根据已知路况:平整沙土路()、坑洼碎石路()、松软泥泞路(),我们便可得知点处的路况,进而对整个赛道进行标记颜色。
三.建立模型求解:1.赛道拟合及长度和面积的求解:数据点已知,根据MATLAB中的spline函数模拟比赛车道的曲线P: :。
图1:赛道拟合曲线求得:S=733.08 , L=175.90。
由图像可以看出,曲线的上下两部分交接除不光滑,这不是我们希望得到的结果。
因为曲线本身只是一种模拟,我们不妨在赛道上建立几个虚拟点对曲线进行优化。
在点和B点附近,我们加上几个虚拟点,这两点附近的几个原始点与这几个虚拟点满足一个二阶导数连续的曲线方程,再利用spline命令对整条曲线进行模拟,就可以发现曲线在交接处变得光滑了。
图2:优化过的赛道拟合曲线(蓝色点为虚拟点)求得:S=739.24 , L=174.12。
2.速度-时间曲线的求解:根据曲线计算原数据中每两点间的路程。
因为所以有将MATLAB求出的列于下表:1 2 3 4 5 6 7 85.9038 1.7057 3.3283 4.8179 5.6478 2.7528 4.8655 5.54699 10 11 12 13 14 15 163.9853 1.9534 1.0139 3.1977 1.3278 1.2829 1.5078 1.426217 18 19 20 21 22 23 240.9698 6.1892 4.4495 3.1377 4.2824 2.5103 1.8058 3.374825 26 27 28 29 30 31 324.41545.2078 5.6441 5.02056.9857 10.3737 11.8446 5.150333 34 35 36 374.8886 7.7646 10.42595.9861 13.4251表1:的计算值1 2 3 4 5 6 7 80.125 0.375 0.625 0.875 1.125 1.375 1.625 1.87523.6151 6.8230 13.3131 19.2717 22.5913 11.0113 19.4618 22.18769 10 11 12 13 14 15 162.125 2.375 2.625 2.8753.125 3.375 3.625 3.87515.9412 7.8135 4.0554 12.7908 5.3114 5.1314 6.0314 5.704917 18 19 20 21 22 23 244.125 4.375 4.625 4.8755.125 5.375 5.625 5.8753.8793 24.7568 17.7979 12.5509 17.1298 10.0413 7.2233 13.499025 26 27 28 29 30 31 326.125 6.375 6.625 6.8757.125 7.375 7.625 7.87517.6615 20.8312 22.5763 20.0821 27.9428 41.4947 47.3785 20.601133 34 35 36 378.125 8.375 8.625 8.875 9.12519.5546 31.0584 41.7035 23.9444 53.7005表2 :的计算值然后用样条插值法,模拟出全过程的图像(由于两端速度无法求出,所以我们假定v(0)=0,v(末端)=66:图3:v-t图像黑色点表示原始数据点对应的函数点,红色点为每段的中点时刻时的函数点。
紫红色线下部区域:;绿色线上部区域:;两线之间区域:。
3.路程-时间曲线的求解:由上一部分我们已知路程与时间的关系,再次使用样条插值法即可得到全过程的s-t 曲线S:图4:s-t图像4.现在可以根据已知情况(赛道拟合曲线和v-t图像)和路况(平整沙土路()、坑洼碎石路()、松软泥泞路()对整个赛道进行标记颜色:图4:标记过的赛道曲线黑色区域,紫红色区域,绿色区域四.合理建议:1.由v-t图像可知,选手在前一段路程中平均速度较慢,而在最后一小段路程中速度达极大。
从总体来看,这种速度分配方式不利于选手快速到达终点,选手应在前面大部分路程中将速度尽量维持在一个较为合适的围,在最后一段再进行一下冲刺,才能取得较好成绩。
2.由v-t图像和标记过的赛道曲线可知,路况对于选手的速度影响很大,而在赛道上坑洼碎石路和平整沙土路占的比例又较大,故选手的成绩与正常水平相比会下降很多。
因此,选手平时训练时可适当增强坑洼碎石路、平整沙土路上的训练,争取适应这两种路况,这样在比赛中即可在大块区域上领先,进而增大获胜的概率。
3.从赛道形状来看,整个赛道中唯一一段较直的路段是一段平整沙土路,选手应以最大速度穿过此路段,抓住比赛的主动权。
该选手没有以最佳状态通过此路段,从体力和时间的角度讲,这是不合算的。
合理的跑法应为:当经过平整沙土路时,尽量增大速度,一方面在该路段节省时间,另一方面为经过较坑洼的路面时节省体力;在经过坑洼碎石路时,尽量维持恒定速度;在经过松软泥泞路时,因为松软泥泞路路程较短,应在最后加速来获得较大速度冲出该路段。
五.总结与讨论:此次实验的题目看上去十分简单,当开始做的时候就感到十分棘手,一连做了好长时间才最终完成,期间数次和其他同学进行过讨论,甚至曾去向认识的学长学姐求教,才终于勉强将所有问题解决,尤其是速度-时间曲线和对路况的分析几处,着实花费了我们好多时间和精力,虽然程序中还有一些问题,但还好不影响结果的得出,也可以算是我们投机取巧了吧。
通过这次实验作业,我们深刻认识到自己在这方面还有很大的欠缺,说句难听的我们也只能算是略懂皮毛而已,需要学习的还有很多。
不过这次我们也有很大的收获,最大的收获应该算是这次真的勾起了我们对数学建模的兴趣。
虽然这个学期已经没有数学实验课了,但我们仍然会找一些题尝试去做的,而且下个学期如果有时间我想我们或许真的会去参加数学建模大赛的。
六.MATLAB代码:1.赛道拟合曲线:clc;clf;x1=[0.2,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,30.92,31.67,33 .03,34.35,35.01,37.5];x2=[0.2,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.92,31. 67,33.31,34.23,35.81,37.5];y1=[6.66,5.28,4.68,5.19, 2.34 , 6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68, 2.38, 2.06,2.58, 2.16,1.45,6];y2=[6.66,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18.28,15.06,13.42,11.86,7.68,9.45,6];plot(x1,y1,'k.',x2,y2,'k.','markersize',32);axis([-5 40 0 45]);f1=spline(x1,y1,t1);f2=spline(x2,y2,t1);hold onplot(t1,f1,'r-','linewidth',4)plot(t1,f2,'r-','linewidth',4)gridtitle('赛道拟合曲线');xlabel('x/km');ylabel('y/km');%拟合曲线t1=0.2:0.01:37.5;%把曲线分成若干小段S1=trapz(t1,f1);S2=trapz(t1,f2);dx=diff(t1);dy1=diff(f1);dy2=diff(f2);L1=sqrt(dx.^2+dy1.^2);L1=sum(L1);L2=sqrt(dx.^2+dy2.^2);L2=sum(L2);fprintf('S=%.2f , L=%.2f\n',S2-S1,L1+L2)%S、L2.赛道拟合曲线(加点):clc;clear;epsX=0.01;epsT=0.01;%下半部分原始点x1=[0.2,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,30.92,31.67,33 .03,34.35,35.01,37.5];y1=[6.66,5.28,4.68,5.19, 2.34 , 6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68, 2.38, 2.06,2.58, 2.16,1.45,6];%下半部分虚拟点xa1=[0.2,0.5,1.5,3.0,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,3 0.92,31.67,33.03,34.35,35.01,37,37.4,37.5];ya1=[6.66,5.7,4.9,5.0,5.28,4.68,5.19,2.34,6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68,2.38,2. 06,2.58,2.16,1.45,3,5,6];%上半部分原始点x2=[0.2,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.92,31. 67,33.31,34.23,35.81,37.5];y2=[6.66,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18.28,15.06,13.42,11.86,7.68,9.45,6];%上半部分虚拟点xa2=[0.2,0.4,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.9 2,31.67,33.31,34.23,35.81,36.8,37.4,37.5];ya2=[6.66,10.5,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18. 28,15.06,13.42,11.86,7.68,9.45,9.1,7,6];hold on;plot(xa1,ya1,'b.','markersize',15)plot(xa2,ya2,'b.','markersize',15)plot(x1,y1,'k.','markersize',15)plot(x2,y2,'k.','markersize',15)axis([-5 40 0 45]);gridtx1=xa1(1):epsX:xa1(numel(xa1));tx2=xa2(1):epsX:xa2(numel(xa2));f1=spline(xa1,ya1,tx1);f2=spline(xa2,ya2,tx2);plot(t1,f1,'r-','linewidth',2)plot(t2,f2,'r-','linewidth',2)title('赛道拟合曲线');xlabel('x/km');ylabel('y/km'); %拟合曲线k1=0.2:0.01:37.5; %把曲线分成若干小段S1=trapz(k1,f1);S2=trapz(k1,f2);dx=diff(k1);dy1=diff(f1);dy2=diff(f2);L1=sqrt(dx.^2+dy1.^2);L1=sum(L1);L2=sqrt(dx.^2+dy2.^2);L2=sum(L2);fprintf('S=%.2f , L=%.2f\n',S2-S1,L1+L2) %求S、L3.v-t曲线:clc;clear;epsX=0.01;epsT=0.01;%下半部分原始点x1=[0.2,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,30.92,31.67,33 .03,34.35,35.01,37.5];y1=[6.66,5.28,4.68,5.19, 2.34 , 6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68, 2.38, 2.06,2.58, 2.16,1.45,6];%下半部分虚拟点xa1=[0.2,0.5,1.5,3.0,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,3 0.92,31.67,33.03,34.35,35.01,37,37.4,37.5];ya1=[6.66,5.7,4.9,5.0,5.28,4.68,5.19,2.34,6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68,2.38,2. 06,2.58,2.16,1.45,3,5,6];%上半部分原始点x2=[0.2,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.92,31. 67,33.31,34.23,35.81,37.5];y2=[6.66,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18.28,15.06,13.42,11.86,7.68,9.45,6];%上半部分虚拟点xa2=[0.2,0.4,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.9 2,31.67,33.31,34.23,35.81,36.8,37.4,37.5];ya2=[6.66,10.5,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18. 28,15.06,13.42,11.86,7.68,9.45,9.1,7,6];tx1=xa1(1):epsX:xa1(numel(xa1));tx2=xa2(1):epsX:xa2(numel(xa2));f1=spline(xa1,ya1,tx1);f2=spline(xa2,ya2,tx2);Ds1=[];Ds2=[];s1=[0];s2=[0];dS1=sqrt(diff(tx1).^2+diff(f1).^2);dS2=sqrt(diff(tx2).^2+diff(f2).^2);k=0;k1=0;ii=2;for i=tx1if(i>=x1(ii))k2=k;ii=ii+1;DdS1=dS1(k1+1:k2);Ds1=[Ds1 sum(DdS1)];k1=k2;endif k>0s1=[s1 dS1(k)+s1(k)];endk=k+1;endk=0;k1=0;ii=2;for i=tx2if(i>=x2(ii))k2=k;ii=ii+1;DdS2=dS2(k1+1:k2);Ds2=[Ds2 sum(DdS2)];k1=k2;endif k>0s2=[s2 dS2(k)+s2(k)];endk=k+1;endL1=sum(Ds1);L2=sum(Ds2);DsABCD=[Ds1 Ds2(numel(x2)-1:-1:1)];sABCD=[s1(1:numel(tx1)-1) s2+L1];vMax=66; %设速度的最大值vABCD=DsABCD*4; %·分段速度tABCD=0.125:0.25:0.125+(numel(x1)+numel(x2)-3)*0.25; ttABCD=0:epsT:(numel(x1)+numel(x2)-2)*0.25;fvABCD=spline(tABCD,vABCD,ttABCD); %Ë速度拟合vABCD=[0 vABCD vMax];tABCD=[0 tABCD (numel(x1)+numel(x2)-2)*0.25]; fvABCD=spline(tABCD,vABCD,ttABCD);hold on;plot(ttABCD,fvABCD,'y-','linewidth',4)plot(tABCD,vABCD,'r*','markersize',10)tABCD2=0:0.25:(numel(x1)+numel(x2)-2)*0.25;k=1;ii=1;for i=ttABCDif(i==tABCD2(k))plot(ttABCD(ii),fvABCD(ii),'k.','markersize',32)k=k+1;endii=ii+1;endx1230=[0 10];y12=[12 12];y30=[30 30];plot(x1230,y12,'m-','linewidth',1)plot(x1230,y30,'g-','linewidth',1)title('速度-时间曲线');ylabel('v/(km/h)');xlabel('t/h');axis([0 10 0 80]);grid;vABCD4.s-t曲线:clc;x1=[0.2 0.5 1.5 4.96 6.55 9.71 13.17 16.23 18.36 20.53 23.15 26.49 28.23 29.1 30.65 30.92 31.67 33.03 34.35 35.01 37.5];y1=[6.66 5.7 4.95 5.28 4.68 5.19 2.34 6.94 5.55 9.86 5.28 3.87 3.04 2.88 3.68 2.38 2.06 2.58 2.16 1.45 6];x2=[ 0.2 0.4 1.8 4.90 6.51 9.73 13.18 16.20 18.92 20.50 23.23 25.56 28.31 29.45 30.00 30.92 31.67 33.31 34.23 35.81 37.5];y2=[6.66 10.5 19.89 24.52 34.82 40.54 37.67 41.38 30.00 19.68 14.56 18.86 18.55 22.66 18.28 15.06 13.42 11.86 7.68 9.45 6];xlabel('x')ylabel('y')T=0:0.25:9.25;s=[0,5.9038,7.6095,10.9378,15.7557,21.4035,24.1563,29.0218,34.5687,38.554,40.5074,41.5213, 44.719,46.0468,47.3297,48.8375,50.2637,51.2335,57.4227,61.8722,65.0099,69.2923,71.8026,73. 6084,76.9832,81.3986,86.6064,92.2505,97.271,104.2567,114.6304,126.475,131.6253,136.5139,14 4.2785,154.7044,160.6905,174.12];plot(T,s,'k.','markersize',32)axis([0 10 0 180])grid;hold onT0=0:0.01:9.25;s0=spline(T,s,T0);xlabel('t')ylabel('s')plot(T0,s0,'b-','linewidth',4)title('路程-时间曲线');xlabel('t/h');ylabel('s/km');5.路况曲线:clc;clear;epsX=0.01;epsT=0.01;x1=[0.2,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,30.92,31.67,33 .03,34.35,35.01,37.5];y1=[6.66,5.28,4.68,5.19, 2.34 , 6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68, 2.38, 2.06,2.58, 2.16,1.45,6];xa1=[0.2,0.5,1.5,3.0,4.96,6.55,9.71,13.17,16.23,18.36,20.53,23.15,26.49,28.23,29.1,30.65,3 0.92,31.67,33.03,34.35,35.01,37,37.4,37.5];ya1=[6.66,5.7,4.9,5.0,5.28,4.68,5.19,2.34,6.94,5.55 ,9.86,5.28,3.87,3.04,2.88,3.68,2.38,2. 06,2.58,2.16,1.45,3,5,6];x2=[0.2,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.92,31. 67,33.31,34.23,35.81,37.5];y2=[6.66,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18.28,15.06,13.42,11.86,7.68,9.45,6];xa2=[0.2,0.4,1.8,4.90,6.51,9.73,13.18,16.20,18.92,20.50,23.23,25.56,28.31,29.45,30.00,30.9 2,31.67,33.31,34.23,35.81,36.8,37.4,37.5];ya2=[6.66,10.5,19.89,24.52,34.82,40.54,37.67,41.38,30.00,19.68,14.56,18.86,18.55,22.66,18. 28,15.06,13.42,11.86,7.68,9.45,9.1,7,6];tx1=xa1(1):epsX:xa1(numel(xa1));tx2=xa2(1):epsX:xa2(numel(xa2));f1=spline(xa1,ya1,tx1);f2=spline(xa2,ya2,tx2);Ds1=[];Ds2=[];s1=[0];s2=[0];dS1=sqrt(diff(tx1).^2+diff(f1).^2);dS2=sqrt(diff(tx2).^2+diff(f2).^2);k=0;k1=0;ii=2;for i=tx1if(i>=x1(ii))k2=k;ii=ii+1;DdS1=dS1(k1+1:k2);Ds1=[Ds1 sum(DdS1)];k1=k2;endif k>0s1=[s1 dS1(k)+s1(k)];endk=k+1;endk=0;k1=0;ii=2;for i=tx2if(i>=x2(ii))k2=k;ii=ii+1;DdS2=dS2(k1+1:k2);Ds2=[Ds2 sum(DdS2)];k1=k2;endif k>0s2=[s2 dS2(k)+s2(k)];endk=k+1;endL1=sum(Ds1);L2=sum(Ds2);DsABCD=[Ds1 Ds2(numel(x2)-1:-1:1)];sABCD=[s1(1:numel(tx1)-1) s2+L1];vMax=66;vABCD=DsABCD*4;tABCD=0.125:0.25:0.125+(numel(x1)+numel(x2)-3)*0.25;ttABCD=0:epsT:(numel(x1)+numel(x2)-2)*0.25;fvABCD=spline(tABCD,vABCD,ttABCD);vABCD=[0 vABCD vMax];tABCD=[0 tABCD (numel(x1)+numel(x2)-2)*0.25];fvABCD=spline(tABCD,vABCD,ttABCD)tSABCD=[];ttxABCD=[];ttyABCD=[];txABCD=[tx1 tx2(numel(tx2)-1:-1:1)];fABCD=[f1 f2(numel(tx2)-1:-1:1)];hold on;title('路面状况');xlabel('x/km');ylabel('y/km');axis([-5 40 0 45]);grid; %计算三种路段的值swi=1;triSABCD=[0 0 0];triTABCD=[0 0 0];iSTemp=1;iTTemp=1; %分析速度k=1;ii=1;sS=0;for i=ttABCDsS=sS+fvABCD(k)*epsT;while sS>sABCD(ii) && sABCD(ii)<=174.12if fvABCD(k)>=30plot(txABCD(ii),fABCD(ii),'g.','markersize',20) if(swi~=1)triSABCD(swi)=triSABCD(swi)+sABCD(ii)-sABCD(iSTemp); triTABCD(swi)=triTABCD(swi)+i-ttABCD(iTTemp);swi=1;iSTemp=ii;iTTemp=k;endelseif fvABCD(k)<30 && fvABCD(k)>=12plot(txABCD(ii),fABCD(ii),'m.','markersize',20)if(swi~=2)triSABCD(swi)=triSABCD(swi)+sABCD(ii)-sABCD(iSTemp);triTABCD(swi)=triTABCD(swi)+i-ttABCD(iTTemp);swi=2;iSTemp=ii;iTTemp=k;endelseplot(txABCD(ii),fABCD(ii),'k.','markersize',20)if(swi~=3)triSABCD(swi)=triSABCD(swi)+sABCD(ii)-sABCD(iSTemp);triTABCD(swi)=triTABCD(swi)+i-ttABCD(iTTemp);swi=3;iSTemp=ii;iTTemp=k;endendii=ii+1;endtSABCD=[tSABCD sABCD(ii)];ttxABCD=[ttxABCD txABCD(ii)];ttyABCD=[ttyABCD fABCD(ii)];k=k+1;endplot(x1,y1,'k.','markersize',32)plot(x2,y2,'k.','markersize',32)triSABCD(swi)=triSABCD(swi)+174.12-sABCD(iSTemp)triTABCD(swi)=triTABCD(swi)+(numel(x1)+numel(x2)-2)*0.25-ttABCD(iTTemp) trivABCD=triSABCD./triTABCD。