西农建模实验三_第1页
西农建模实验三_第2页
西农建模实验三_第3页
西农建模实验三_第4页
西农建模实验三_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西北农林科技大学实验报告1、 继续研究十字路口红绿灯问题一、 实验题目继续研究十字路口红绿灯问题二、题目重述十字路口绿灯亮30秒,最多可以通过多少辆汽车?继续研究问题:十字路口绿灯亮t秒,最多可以通过多少辆汽车n=n(t)?三、实验目的数学建模是一种数学的思考方法,用数学的语言和方法,通过抽象、简化建立能近似刻画并“解决”实际问题的路径。因此,建模一般具有明确的应用背景,针对性较强。为了使所研究的模型有相当的普适性,能解决一类问题,就需要在模型确立之后,进一步分析推广,挖掘出模型更多的理论和实用价值。四、 实验内容问题要求很明确。求解的关键是绿灯亮后,汽车才启动,极速驶过路口。要确定在给定的时

2、间内通过多少辆汽车,就要考虑汽车的加速度,从停车位置到路口的路程,以及城市行车的最高限速要求。记住在t时刻第n辆汽车的位置为Sn(t),用数轴表示车辆行驶道路,数轴的正向为汽车行驶方向,数轴原点为红绿灯位置。于是,当Sn(30)>0时,表明在第30秒的n辆车已通过红绿灯,否则,结论相反。于是,只要确定限速行驶模型Sn(t),就可以确定30秒内通过的汽车数量n。在单向、单车道、直行、限速等假设下,得到以下模型:其中Sn(0)=-(n-1)(L-D)表示第n辆车在绿灯亮前的位置,tn=n表示第n辆车的启动时间,tn*=v*/a+tn表示第n辆车达到最大限速的时间。参数取车长L=5cm,车距D

3、=2cm,加速度a=2m/s2,最大限速v*=11m/s.可以得到结果,绿灯亮30秒,该路口单向,单车道可以通过17辆车。确定十字路口绿灯亮多长时间是城市交通管理中最基本的一个问题。直接利用限速行驶模型计算每辆车到达路口的时间,由数值结果可见,绿灯亮后汽车才开始以最高限速穿过路口的时在11秒以后,从第六辆车开始,以后的车都以最高限速穿过路口。绿灯亮30秒通过路口的17辆车中有11辆汽车以最高限速穿过路口,如果绿灯只亮15秒,则在通过的7辆车中只有2辆车以最高的限速穿过路口。显然,这样的交通灯控制策略对于路口的利用率是不高的。如果利用限速行驶模型得到通过的车辆数对绿灯亮的时间长度的依赖关系n=n

4、(t),即得到当绿灯亮t秒时,单向、单车道通过的车辆数,对进一步的研究更方便。要写出这个分段函数,推导并不困难,虽然有些繁琐,但是在实际问题研究中找到显示表达函数的机会非常少。借助计算机编程,利用输入输出表达函数关系常常是唯一可取的办法。一个基本的想法是,在有限时间内只能通过有限车辆,只要计算出n辆车通过路口的时间,在用规定的红绿灯的时间长度作为卡尺,就可以确定通过的车辆数。算法:(1) 计算每辆汽车达到最大限速时间t0,以加速度通过路口的时间t1和以最大限速通过路口时间t2。(2) 比较t0和t1就可以确定这辆车实际通过路口的时间。(3) 将充分多辆车通过路口的时间列出来,确定通过路口时间小

5、于绿灯亮的时间长度T的所有车号,其中最大的就是能够通过的车辆数。五、实验结果分析与讨论只要输入T就会由pass(T)得到通过的车辆数。确定十字路口绿灯亮多长时间是城市交通管理中最基本的一个问题。直接利用限速行驶模型计算每辆车到达路口的时间,由数值结果可见,绿灯亮后汽车才开始以最高限速穿过路口的时在11秒以后,从第六辆车开始,以后的车都以最高限速穿过路口。绿灯亮30秒通过路口的17辆车中有11辆汽车以最高限速穿过路口,如果绿灯只亮15秒,则在通过的7辆车中只有2辆车以最高的限速穿过路口。显然,这样的交通灯控制策略对于路口的利用率是不高的。如果利用限速行驶模型得到通过的车辆数对绿灯亮的时间长度的依

6、赖关系n=n(t),即得到当绿灯亮t秒时,单向、单车道通过的车辆数,对进一步的研究更方便。要写出这个分段函数,推导并不困难,虽然有些繁琐,但是在实际问题研究中找到显示表达函数的机会非常少。借助计算机编程,利用输入输出表达函数关系常常是唯一可取的办法。一个基本的想法是,在有限时间内只能通过有限车辆,只要计算出n辆车通过路口的时间,在用规定的红绿灯的时间长度作为卡尺,就可以确定通过的车辆数。6、 实验程序(Matlab或者其它软件语言陈述)M文件:function m=pass(T)k=50;t=zeros(1,k);tt=solve('-(n-1)*7+(t-n)2');tt1=

7、tt(1);ttt=solve('-(n-1)*7+5.52+11*(t-n-5.5)');for n=1:k; t0=5.5+n;x=subs(tt1,n); if x>t0 t(n)=subs(ttt,n); else t(n)=x; end endm=max(find(t<T);二、图形做旧问题一、 实验题目图形做旧:二、题目重述图像做旧是一种图像融合的方法,通过两个矩阵的加权求和来实现将图形做旧。三、实验目的数学建模是一种数学的思考方法,用数学的语言和方法,通过抽象、简化建立能近似刻画并“解决”实际问题的路径。因此,建模一般具有明确的应用背景,针对性较强。为

8、了使所研究的模型有相当的普适性,能解决一类问题,就需要在模型确立之后,进一步分析推广,挖掘出模型更多的理论和实用价值。四、 实验内容数值图像是一个函数,f:Rd,确切的说,是定义在矩形区域的离散网格点(xi,yi)上的函数,称(xi,yi)为像素点,zij=f(xi,yi)为像素值。当d=1时,f为灰度图像,当d=3时,f为彩色图像。五、实验结果分析与讨论灰色图像就是一个矩阵Z=(zij)。彩色图像就是3个矩阵,分别表示三个颜色(红、绿、蓝RGB),即三维数组表达。为解决问题编写程序不仅需要熟悉应用软件的编译特点,而且要密切结合问题的背景,利用其数学特征,才有可能编写出有效程序。六、实验程序(

9、Matlab或者其它软件语言陈述)>> load mask;>> mm=X;>> load face_mos;>> nn=X;>> mn1=0.5*mm+0.5*double(nn);>> mn2=0.8*mm+0.2*double(nn);>> subplot(2,2,1),imshow(mm,);subplot(2,2,2),imshow(nn,);subplot(2,2,3),imshow(mn1,);subplot(2,2,4),imshow(mn2,);三、画分形树一、实验题目 画分形树二、实验问题陈

10、述 数学的分形树是按一定规律构造的的具有自相似特征的集合图案,我们从一个线段生成一个分形树图案开始,学习几何最基本的元素点和直线的矩阵代数表达方式,教计算机绘图。 利用MATLAB指令画双分支树杈,对任意给定一节树段,在其三分之一点处长出一个树杈,向左偏离原树段300角,在其三分之二点处长出一个分叉,向右偏离原树段300角,树杈长度等于原树段的三分之一。三、 实验目的 数学建模是一种数学的思考方法,用数学的语言和方法,通过抽象、简化建立能近似刻画并“解决”实际问题的路径。因此,建模一般具有明确的应用背景,针对性较强。为了使所研究的模型有相当的普适性,能解决一类问题,就需要在模型确立之后,进一步

11、分析推广,挖掘出模型更多的理论和实用价值。4、 实验内容第1步 画一个点P(2.5,3).>> u=2.5 3;>> plot(u(1),u(2),'*')第2步 画两个点P1(2.5,3),P2(6.5,6)>> u=2.5 3;6.5 6;>> plot(u(:,1),u(:,2),'*')>> axis(2,7,2,7)第3步 画两个点P1 ,P2及其连线上的中点。因为任意两点P1(x1,y1)和P2(x2,y2)之间连线上的点P(x,y)可以表示为 ,即其中01.特别的,当=1/2时,P是连线上

12、的中点。所以画两个点连线中点指令为>> u=2.5 3;6.5 6;>> p0=(u(1,:)+u(2,:)/2;>> u=u(1,:);p0;u(2,:);>> plot(u(:,1),u(;,2),'*-'),axis(2,7,2,7)注意:两个同阶矩阵相加等于对应元素相加,矩阵除以某数等于每个元素除以这个数第4步 画一枝树杈。任意给定一节树段,在其中点长出一个分叉,长度为原树段的一半,向左偏离原树段300角,记原树段起点为P1,终点为P2,中点为P0。算法:(1) 将向量P1P2平移到原点,并缩小1/2,得到向量OP,P=(

13、P1-P2)/2;(2) 将OP逆时针旋转/6,再平移到P1与P2连线的中点P0=1/2P1+1/2P2,得到向量P0PL,PL=P0+PA,其中是旋转变换矩阵;(3) 将P1,P0,PL,P0,P2依序连接起来。MATLAB指令为:>>u=2.5 3;6.5 6;>>v=(u(2,:)-u(1,:)/2;>>A=cos(pi/6) sin(pi/6);-sin(pi/6) cos(pi/6);>>lp=p0+v*A;>>u=u(1,:);p0;lp;p0;u(2,:);>>plot(u(:,

14、1),u(:,2),'*-'),axis(2,7,2,7)第5步 画一棵分形树。假设树的生长是有规律的,按分杈点可以将树分成有限个树段,每个阶段每个树段必在且只在中点向一个固定方向,例如,向左偏离300,长出一枝新树杈。新树杈的出现,使得树可以被分成更多的树段,进入下一阶段的生长。在计算机上实现这个过程。上一步已将一个树段变成一个树杈,这树杈由3个新树段构成。为表达清楚,可以将上道例题的输出指令 u=u(1,:);p0;p1;p0;u(2,:)改为u=u(1,:);p0;p0;lp;p0;u(2,:),即将每个树段的起点和终点坐标都分别用矩阵u的奇数行和偶数行记录,3个树段由6

15、个点表示。下一步,在这3个树段的每段上都要长出一个分杈,即在每段上重复上一步的工作。现将画一枝树杈的指令用函数文件branch.m表达,即function u=branch(v,theta)p0=(v(2,:)+v(1,:)/2;v1=(v(2,:)-v(1,:)/2;A=cos(theta)sin(theta);-sin(theta)cos(theta);lp=p0+v1*A;u=v(1,:);p0;p0;lp;p0;v(2,:);只要输入树段端点v和将要长出分杈的偏离角度,就会输出长了一个分杈的树杈。然后,重复执行调用branch.m画出所有树段生成的树杈,这个过程用用函数文件t

16、ree.w表达。function w=tree(u,theta)uuu=;for j=0:(length(u)/2-1)    u0=u(2*j+1):(2*j+2),:);    uu=branch(u0,theta);    uuu=uuu;uu;endw=uuu;只要输入上阶段已有的树u和规定的树杈偏离角,就会输出长了更多树杈的树。注意到,因为u记录了所有树段的起点和终点,所以树段总数是其行数的一半。按这种想法,可以设计生长k0个阶段的分形树的算法。

17、算法(1) k=0:给定初始值u0,一个2行2列矩阵表示一根树干两端点的坐标给定参数表示树杈的生长角度(2) 第k阶段(k1); (a)从上阶段的树uk-1截出树段vl; (b)树段vl上长成一枝树杈,记为uul; (c)依序将uul拼接,构成uk.(3) 如果kk0,则k=k+1,重复(2),否则结束运算。下面指令分别画出了k=0,1,2.8阶段的分形树。>> u=0 0,0 1;subplot(3,3,1),plot(u(:,1),u(:,2),axis(-0.5,0.5,0,1);for k=1:8w=tree(u,pi/6);u=w;

18、subplot(3,3,k+1),plot(u(:,1),u(:,2),axis(-0.5,0.5,0,1)end如图所示,不论k多大,树杈越来越密,但是永远不会充满整个区域,这个特点可以利用MATLAB图形工具栏的放大镜看到。于是,这棵树的树杈长度总和可无限增大,但是树杈占据的面积永远为0,这就是所谓的二维分形。分形的一个重要特征是自相似,即局部是整体的相似形,通过图形放大镜可以展现这个特征。标准的自相似分形数学对现实的抽象,实际分形的形体自相似性大多是统计意义上的。 如果画一棵每阶段在每段树段上长两个分杈的分形树,一个分杈向左,一个分杈向右,就会发现按章上面的思路构造的算法计算速度很慢。可以在程序开始前加上指令tic,在结尾后加上toc,则程序运行完后会显示运行时间。在下面的程序中,运,用矩阵运算替换了tree.m中的循环,可以提高运算速度。>> tic>> u=0 0;0 1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论