数学建模之计算机仿真-PPT.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数学建模之计算机仿真-PPT.ppt》由会员分享,可在线阅读,更多相关《数学建模之计算机仿真-PPT.ppt(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数学建模之China Undergraduate Mathematical Contest in Modeling 一个问题l我们做一个实验:把一个硬币掷一万次,统计两个面出现的次数。这样做很简单但却需要大师时间,有没有一咱较快的办法把这个实验完成呢?掷硬币仿真流程图概述l 计算机科学技术的迅猛发展,给许多学科带来了巨大的影响计算机不但使问题的求解变得更加方便、快捷和精确,而且使得解决实际问题的领域更加广泛计算机适合于解决那些规模大、难以解析化以及不确定的数学模型例如对于一些带随机因素的复杂系统,用分析方法建模常常需要作许多简化假设,与面临的实际问题可能相差甚远,以致解答根本无法应用,这时仿真
2、几乎成为人们的唯一选择在历届的美国和中国大学生的数学建模竞赛(MCM)中,学生们经常用到计算机仿真方法去求解、检验等计算机仿真(computer simulation)是建模过程中较为重要的一类方法 计算机仿真可以解决以下5类问题:l(1)难以用数学公式表示的系统,或者没有建立和求解的有效方法.l(2)虽然可以用解析的方法解决问题,但数学的分析与计算过于复杂,这时计算机仿真可能提供简单可行的求解方法.l(3)希望能在较短的时间内观察到系统发展的全过程,以估计某些参数对系统行为的影响.l(4)难以在实际环境中进行试验和观察时,计算机仿真是唯一可行的方法,如太空飞行的研究.l(5)需要对系统或过程
3、进行长期运行比较,从大量方案中寻找最优方案.计算机仿真案例1模型建立:由于本题要求使从搅拌中心到各个工地运输混凝土的总的吨公里数最少,所以,该问题的目标函数是 求解方法:1、高数中的方法2、数值计算方法3、计算机仿真:离散化,遍历!计算机仿真案例2n 例2(赶火车过程仿真)一列火车从A站经过B站开往C站,某人每天赶往B站乘这趟火车。已知火车从A站到B站的运行时间是均值为30min、标准差为2min的正态随机变量。火车大约在下午1点离开站。火车离开时刻的频率分布和这个人到达站时刻的频率分布如下表所示。问他能赶上火车的概率有多大?出发时刻1:00 1:05 1:10到达时刻1:28 1:30 1:
4、32 1:34频率0.7 0.2 0.1频率0.3 0.4 0.2 0.1u仿真过程:u1、生成火车的发车时间、运行时间,从而达得到其到达B站的时间。u2、生成此人达到B站的时间。u3、如果此人到达站的时间早于火车到达时间,则算赶上火车一次。u4、将上述过程重复一万次,统计赶上火车的频率作为所求概率。分析:这个问题用概率论的方法求解十分困难,它涉及此人到达时刻、火车离开A站的时刻、火车运行时间几个随机变量。我们可以用计算机仿真的方法来解决。概述l 计算机仿真在计算机中运行实现,不怕破坏,易修改,可重用,安全经济,不受外界条件和场地空间的限制.l 仿真分为静态仿真(static simulati
5、on)和动态仿真(dynamic simulation).数值积分中的蒙特卡洛方法是典型的静态仿真动态仿真又分为连续系统仿真和离散系统仿真连续系统是指状态变量随着时间连续变化的系统,例如传染病的检测与预报系统.离散系统是指系统状态变量只在有限的时间点或可数的时间点上发生变化的系统,例如排队系统.概述l 仿真系统,必须设置一个仿真时钟(simulate clock),它能将时间从一个时刻向另一个时刻进行推进,并且能随时反映系统时间的当前值其中,模拟时间推进方式有两种:时间步长法(均匀间隔时间推进法,连续系统常用)和事件步长法(下次事件推进法,离散系统常用)主要内容l 一:准备知识:随机数的产生l
6、 二:随机变量的模拟l 三:连续系统的模拟-时间步长法l 四:离散系统的模拟-事件步长法l 五:蒙特卡洛方法一:准备知识:随机数的产生l 由于仿真研究的实际系统要受到多种随机因素的作用和影响,在仿真过程中必须处理大量的随机因素.要解决此问题的前提是确定随机变量的类型和选择合适的随机数产生的方法.l 对随机现象进行模拟,实质是要给出随机变量的模拟,也就是说要利用计算机随机产生一系列数值,使它们服从一定的概率分布服从一定的概率分布,称这些数值为随机数.l 最基本,最常用的是(0,1)区间内均匀分布的随机数.其他分布的随机数均可利用它来产生.1:产生模拟随机数的计算机命令l 在MATLAB中,可以直
7、接产生满足各种分布的随机数,命令如下:l 常见的分布函数 MATLAB语句 l 均匀分布U0,1 R=rand(m,n)l 均匀分布Ua,b R=unifrnd(a,b,m,n)l 指数分布 E()R=exprnd(,m,n)l 正态分布N(mu,sigma)R=normrnd(mu,sigma,m,n)l 标准正态分布N(0,1)R=randn(m,n)l 二项分布B(n,p)R=binornd(n,p,m,n1)l 泊松分布 P()R=poissrnd(,m,n)l 以上语句均产生m n 的矩阵2:案例分析l 例1:unifrnd(2,3)l unifrnd(1,32,1,4)l norm
8、rnd(1,2)l normrnd(1,2,2,3)l rand(2,3)l randn(2,3)l ans=2.8132l ans=1.3057 5.3056 7.2857 7.1604l ans=0.2527l ans=l 2.7429 0.0219 2.7759l 2.2756 0.0992-0.9560l ans=l 0.6038 0.1988 0.7468l 0.2722 0.0153 0.4451l ans=l-0.0945-1.3089-0.2440l-0.2141 0.8248-0.1778l 2:案例分析l 例2:敌空战部队对我方港口进行空袭,其到达规律服从泊松分布,平均每分
9、钟到达4架飞机.l(1)模拟敌机在3分钟内到达目标区域的数量,以及在第1,2,3分钟内各到达几架飞机;l(2)模拟在3分钟内每架飞机的到达时刻.分析:(1)n1=poissrnd(4),n2=poissrnd(4),n3=poissrnd(4),n=n1+n2+n3(2)由排队论知识,敌机到达规律服从泊松分布等价于敌机到达港口的间隔时间服从参数为1/4的指数分布,故可由指数分布模拟每架飞机的到达时刻.注:如果单位时间发生的次数(如到达的人数)服从参数为r的泊松分布,则任连续发生的两次时间的间隔时间序列服从参数为r的指数分布!泊松分布的期望是,根据到泊松分布和指数分布的关系,可以推出指数分布的期
10、望是1/。2:案例分析l clearl t=0;l j=0;%到达的飞机数 l while t3l j=j+1l t=t+exprnd(1/4)l end二:随机变量的模拟l 在很多实际问题中,我们需要模拟服从一定分布的随机变量,来进行计算和预测。l 利用均匀分布的随机数可以产生具有任意分布的随机变量的样本,从而可以对随机变量的取值情况进行模拟.l 1 连续型随机变量的模拟l 具有给定分布的连续型随机变量可以利用在区间(0,1)上均匀分布的随机数来模拟,最常用的方法是逆变换法.l 结论:若随机变量Y有连续的分布函数F(y),l 则Z与Y有相同的分布.1 连续型随机变量的模拟 一般说来,具有给定
11、分布的连续型随机变量可以利用在区间(0,1)上均匀分布的随机数来模拟最常用的方法是反函数法由概率论的理论可以证明,若随机变量Y有连续的分布函数F(y),而X是区间(0,1)上均匀分布的随机变量,令,则Z与Y有相同的分布由此,若已知Y的概率密度为,由 可得反函数法l 如果给定区间(0,1)上均匀分布的随机数,则具有给定分布Y的随机数 可由方程 l 解出.l 例:模拟服从参数为 的指数分布时,由 可得 注:指数分布的密度函数2 离散型随机变量的模拟l 设随机变量X的分布律为:有相同的发生的概率.因此我们可以用随机变量R落在小区间内的情况来模拟离散的随机变量X的取值情况.因此我们可以用随机变量R落在
12、小区间内的情况来模拟离散的随机变量X的取值情况具体执行的过程是:产生一个(0,1)上均匀分布的随机数 r(简称随机数),若p(n-1)r p(n)则理解为发生事件(X=xn)于是就可以模拟随机变量的取值情况2 离散型随机变量的模拟l 例 3:随机变量 表示每分钟到达银行柜台的顾客数.X的分布列见下表,试模拟10分钟内顾客到达柜台的情况.l 表1 10分钟内顾客到达柜台的情况l Xk 0 1 2l pk 0.4 0.3 0.3l 分析:因为每分钟到达柜台的人数是随机的,所以可用计算机随机生成一组(0,1)的数据,由X的概率分布情况,可认为随机数在(0,0.4)范围内时没有顾客光顾,在0.4,0.
13、7)时,有一个顾客光顾,在0.7,1)时,有两个顾客光顾.l 从而有MATLAB程序:2 离散型随机变量的模拟l r=rand(1,10);l for i=1:10;l if r(i)0.4l n(i)=0;l elseif 0.4=r(i)&r(i)0.7l n(i)=1;l else n(i)=2;l end;l endl rl n三:连续系统的模拟-时间步长法l 对连续系统的计算机模拟是近似地获取系统状态在一些离散时刻点上的数值在一定假设条件下,利用数学运算模拟系统的运行过程连续系统模型一般是微分方程,它在数值模拟中最基本的算法是数值积分算法例如有一系统可用微分方程来描述:已知输出量y的
14、初始条件,现在要求出输出量y随时间变化的过程y(t)。1 理论介绍l 最直观的想法是:首先将时间离散化,令l,称为第k步的计算步距(一般是等间距的),然后按以下算法计算状态变量在各时刻 上的近似值:l 其中初始点 按照这种作法即可求出整个的曲线这种最简单的数值积分算法称为欧拉法除此之外,还有其他一些算法 1 理论介绍l 因此,连续系统模拟方法是:首先确定系统的连续状态变量,然后将它在时间上进行离散化处理,并由此模拟系统的运行状态模拟过程分为许多相等的时间间隔,时间步长的长度可以根据实际问题分别取为秒,分,小时,天等.仿真时钟按时间步长等距推进,每次推进都要扫描系统中所有活动,按预定计划和目标进
15、行分析,计算,记录系统状态的变化,直到满足某个终止条件为止.计算机仿真举例例4:追击问题 我辑私舰雷达发现距cc里处里处有一艘走私船正以匀速度速度aa沿直线行驶,辑私舰立即以最大的速度速度 bb追赶,若用雷达进行跟踪,保持船的瞬时速度方向始终指向走私船,试求辑私舰追逐路线和追上的时间,并且给出缉私舰和走私船的路线图。选取坐标系如图:假设缉私艇初始位置在点(c,0),走私船初始位置在点(0,0),走私船的行驶方向为y方向.Oxy(c,0)D(x,y).R(0,at)设缉私艇为动点D,走私船为动点R.在时刻t,缉私艇的位置是D(x,y),走私船的位置是R(0,at).取时间间隔(步长)为,则在时刻
16、 t+,D的位置是,追赶方向(D的运动方向)为DR.用方向余弦表示为:(*)计算机仿真举例算法:赋初值:初始时刻 t0,时间步长,速度a,b,初始位置c循 环:由公式(*)计算动点D 在各时刻的坐标 D 计算动点R在各时刻的坐标R.终 止:当D,R 的距离小于给定值 时终止仿真算法:第二步:计算动点缉私艇D在时刻 时的坐标 计算走私船R在时刻 时的坐标 第一步:设置时间步长,速度a,b及初始位置第三步:计算缉私艇与走私船这两个动点之间的距离:根据事先给定的距离,判断缉私艇是否已经追上了走私船,从而判断退出循环还是让时间产生一个步长,返回到第二步继续进入下一次循环;第四步:当从上述循环退出后,由
17、点列 和可分别绘制成两条曲线即为缉私艇和走私船走过的轨迹曲线。l试求缉私舰追逐路线和追上的时间。l取c=3千米,a=0.4千米/分钟,b=0.8千米/分钟计算机仿真举例将上述算法中求出的点D用直线段连接起来,就得到追赶曲线。循环终止时的即为追赶时间。可以看出,步长选取得越小,所求的曲线越精确。例5:追逐问题 1问题提出 假设正方形ABCD的四个顶点处各站一人在某一时刻,四人同时以匀速v沿顺时针方向追逐下一个人,并且在任意时刻他们始终保持追逐的方向是对准追逐目标,例如,A追逐B,任意时刻A始终向着B追可以证明四人的运动轨迹将按螺旋曲线状汇合于中心O 怎样证明呢?有两种证明方法一是分别求出四人的运
18、动轨迹曲线解析式,求证四条曲线在某时刻相交于一点另一方法则是用计算机模拟将四人的运动轨迹直观地表示在图形上.2 应用举例2建立模型及模拟方法模拟步骤:1)建立平面直角坐标系l 2)以时间间隔t进行采样,在每一时t计算每个人在下一时t+t时的坐标l 3)不妨设甲的追逐对象是乙,在时间t时,甲2建立模型及模拟方法l 4)选取足够小的,模拟到 时为止(即已追到)5)连接四人在各时刻的位置,就得到所求的轨迹l 根据以上模拟步骤,编出MATLAB程序如下:l%取v=1,t=12,A,B,C,D点的坐标分另为(0,10),(10,10),(10,0),(0,0)l v=1;l dt=0.05;l d=20
19、;l x=0 0 0 10 10 10 10 0;%DABC点x,y坐标l x(9)=x(1);l x(10)=x(2);%D点l holdl axis(equal)%各坐标轴刻度增量相同l axis(0 10 0 10);%坐标轴范围3 MATLAB实现l for k=1:2:7l plot(x(k),x(k+1),.)l endl while(d0.1)l for i=1:2:7%循环求每个点的下一个时间点的坐标l d=sqrt(x(i)-x(i+2)2+(x(i+1)-x(i+3)2);%与追击点的距离l x(i)=x(i)+v*dt*(x(i+2)-x(i)/d;%下一个时间点的x坐标
20、l x(i+1)=x(i+1)+v*dt*(x(i+3)-x(i+1)/d;%下一个时间点的y坐标l plot(x(i),x(i+1),.)l endl x(9)=x(1);x(10)=x(2);l endl hold3 MATLAB实现3 MATLAB实现例6 水池含盐量问题l 某水池有2000m3水,其中含盐2kg,以6m3/min的速率向水池内注入含盐为0.5kg/m3的盐水,同时又以4m3/min的速率从水池流出搅拌均匀的盐水.试用计算机仿真该水池内盐水的变化过程,并每隔10min计算水池中水的体积,含盐量,含盐率.欲使池中盐水含盐率达到0.2kg/m3,需经过多长时间?l 分析:这是
21、一个连续系统,首先要将系统离散化,在一些离散点上进行考察,这些离散点的间隔就是时间步长.可取步长为1min,即隔1min考察一次系统的状态,并相应地记录和分析.在注入和流出的作用下,池中水的体积与含盐量,含盐率均随时间变化,初始时刻含盐率为0.001kg/m3,以后每分钟注入含盐率为0.5kg/m3的水6m3,流出混合均匀的盐水为4m3,当池中水的含盐率达到0.2kg/m3时,仿真过程结束.例6 水池含盐量问题l 记T时刻的体积为w(m3),水的含盐量为s(kg),水的含盐率为r=s/w(kg/m3),每隔1min池水的动态变化过程如下:每分钟水的体积增加6-4=2(m3);每分钟向池内注入盐
22、60.5=3(kg);每分钟向池外流出盐4r(kg);每分钟池内增加盐3-4r(kg).l 本例还可以用微分方程建立数学模型,并求出它的解析解,这个解析解就是问题的精确解,有兴趣的读者可以按照这个思路求出该问题的精确解,考察相应时刻精确解与仿真解的差异,还可以进一步调整仿真过程的时间步长,通过与精确解的比较来研究时间步长的大小对仿真度的影响。MATLAB实现l clearl h=1;%时间步长为1l s0=2;%初始含盐2kgl w0=2000;%初始水池有水2000m3l r0=s0/w0;%初始浓度l s(1)=s0+0.5*6*h-4*h*r0;%一分钟后的含盐量l w(1)=w0+2*
23、h;%一分钟后水池中的盐水体积l r(1)=s(1)/w(1);%一分钟后的浓度 l t(1)=h;l y(1)=(2000000+3000000*h+3000*h2+h3)/(1000+h)2;l for i=2:200l t(i)=i*h;l s(i)=s(i-1)+0.5*6*h-4*h*r(i-1);%第i步后的含盐量l w(i)=w(i-1)+2*h;%第i步后的盐水体积l r(i)=s(i)/w(i);%第i步后的盐水浓度l y(i)=(2000000+3000000*t(i)+3000*t(i)2+t(i)3)/(1000+t(i)2;l m=floor(i/10);MATLAB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 建模 计算机仿真 PPT
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内