1、实验目的实验目的实验内容实验内容学习计算机模拟的基本过程与方法学习计算机模拟的基本过程与方法1模拟的概念模拟的概念3计算机模拟实例计算机模拟实例2产生随机数的计算机命令产生随机数的计算机命令模拟的概念模拟的概念 模拟模拟就是利用物理的、数学的模型来类比、模仿现就是利用物理的、数学的模型来类比、模仿现实系统及其演变过程,以寻求过程规律的一种方法实系统及其演变过程,以寻求过程规律的一种方法 模拟的基本思想模拟的基本思想是建立一个试验的模型,这个模型包是建立一个试验的模型,这个模型包含所研究系统的主要特点通过对这个实验模型的运行,含所研究系统的主要特点通过对这个实验模型的运行,获得所要研究系统的必要
2、信息获得所要研究系统的必要信息.模拟的方法模拟的方法1 1物理模拟:物理模拟:对实际系统及其过程用功能相似的实物系统去模仿对实际系统及其过程用功能相似的实物系统去模仿例如,军事演习、船艇实验、沙盘作业等例如,军事演习、船艇实验、沙盘作业等 物理模拟通常花费较大、周期较长,且在物理模物理模拟通常花费较大、周期较长,且在物理模型上改变系统结构和系数都较困难而且,许多系统型上改变系统结构和系数都较困难而且,许多系统无法进行物理模拟,如社会经济系统、生态系统等无法进行物理模拟,如社会经济系统、生态系统等 在实际问题中,面对一些带随机因素的复杂系统,在实际问题中,面对一些带随机因素的复杂系统,用分析方法
3、建模常常需要作许多简化假设,与面临的实用分析方法建模常常需要作许多简化假设,与面临的实际问题可能相差甚远,以致解答根本无法应用这时,际问题可能相差甚远,以致解答根本无法应用这时,计算机模拟几乎成为唯一的选择计算机模拟几乎成为唯一的选择 在一定的假设条件下,运用数学运算模拟系统的在一定的假设条件下,运用数学运算模拟系统的运行,称为数学模拟现代的数学模拟都是在计算机运行,称为数学模拟现代的数学模拟都是在计算机上进行的,称为计算机模拟上进行的,称为计算机模拟2 2数学模拟数学模拟 计算机模拟可以反复进行,改变系统的结构和系数计算机模拟可以反复进行,改变系统的结构和系数都比较容易都比较容易 蒙特卡罗方
4、法蒙特卡罗方法是一种应用随机数来进行计算机模拟是一种应用随机数来进行计算机模拟的方法此方法对研究的系统进行随机观察抽样,通过的方法此方法对研究的系统进行随机观察抽样,通过对样本值的观察统计,求得所研究系统的某些参数对样本值的观察统计,求得所研究系统的某些参数例例1 1在我方某前沿防守地域,敌人以一个炮排(含两在我方某前沿防守地域,敌人以一个炮排(含两门火炮)为单位对我方进行干扰和破坏为躲避我方门火炮)为单位对我方进行干扰和破坏为躲避我方打击,敌方对其阵地进行了伪装并经常变换射击地打击,敌方对其阵地进行了伪装并经常变换射击地点点 经过长期观察发现,我方指挥所对敌方目标的指示经过长期观察发现,我方
5、指挥所对敌方目标的指示有有5050是准确的,而我方火力单位,在指示正确时,有是准确的,而我方火力单位,在指示正确时,有1/31/3的射击效果能毁伤敌人一门火炮,有的射击效果能毁伤敌人一门火炮,有1/61/6的射击效果的射击效果能全部消灭敌人能全部消灭敌人 现在希望能用某种方式把我方将要对敌人实施的现在希望能用某种方式把我方将要对敌人实施的2020次次打击结果显现出来,确定有效射击的比率及毁伤敌方火炮打击结果显现出来,确定有效射击的比率及毁伤敌方火炮的平均值的平均值分析:分析:这是一个概率问题,可以通过理论计算得到相应的概率和期望这是一个概率问题,可以通过理论计算得到相应的概率和期望值值.但这样
6、只能给出作战行动的最终静态结果,而显示不出作战行动但这样只能给出作战行动的最终静态结果,而显示不出作战行动的动态过程的动态过程.为了能显示我方为了能显示我方2020次射击的过程,现采用模拟的方式次射击的过程,现采用模拟的方式 需要模拟出以下两件事:1.问题分析问题分析2 2 当指示正确时,我方火力单位的射击结果情况当指示正确时,我方火力单位的射击结果情况1 1 观察所对目标的指示正确与否观察所对目标的指示正确与否模拟试验有两种结果,每种结果出现的概率都是1/2 因此,可用投掷可用投掷1 1枚硬币的方式予以确定枚硬币的方式予以确定,当硬币出现正面时为指示正确,反之为不正确 模拟试验有三种结果:毁
7、伤1门火炮的可能性为1/3(即2/6),毁伤两门的可能性为1/6,没能毁伤敌火炮的可能性为1/2(即3/6)这时可用投掷骰子的方法来确定可用投掷骰子的方法来确定:如果出现的是、点:则认为没能击中敌人;如果出现的是、点:则认为毁伤敌人一门火炮;若出现的是点:则认为毁伤敌人两门火炮2.符号假设符号假设i:要模拟的打击次数;k1:没击中敌人火炮的射击总数;k2:击中敌人一门火炮的射击总数;k3:击中敌人两门火炮的射击总数E:有效射击比率;E1:20次射击平均每次毁伤敌人的火炮数3.模拟框图模拟框图初始化:i=0,k1=0,k2=0,k3=0i=i+1骰子点数?k1=k1+1k2=k2+1k3=k3+
8、1k1=k1+1i20?E=E1=0 +1 +2 停止硬币正面?YNNY1,2,34,56120k220k320k23()20kk4.模拟结果模拟结果消灭敌人火炮数消灭敌人火炮数试验试验序号序号投硬币投硬币结果结果指示指示正确正确指示指示不正确不正确掷骰子掷骰子结果结果正正反正正反正正反反消灭敌人火炮数消灭敌人火炮数试验试验序号序号投硬币投硬币结果结果指示指示正确正确指示指示不正确不正确掷骰子掷骰子结果结果正反正反正正正正反正5.理论计算理论计算6.结果比较结果比较 虽然模拟结果与理论计算不完全一致,但它却能更加真实地虽然模拟结果与理论计算不完全一致,但它却能更加真实地表达实际战斗动态过程表达
9、实际战斗动态过程 用蒙特卡罗方法进行计算机模拟的步骤用蒙特卡罗方法进行计算机模拟的步骤:1 1 设计一个逻辑框图,即模拟模型这个框图要正确反映系统各部分运行时的设计一个逻辑框图,即模拟模型这个框图要正确反映系统各部分运行时的逻辑关系逻辑关系2 2 模拟随机现象可通过具有各种概率分布的模拟随机数来模拟随机现象模拟随机现象可通过具有各种概率分布的模拟随机数来模拟随机现象 产生模拟随机数的计算机命令产生模拟随机数的计算机命令 在在MATLAB软件中,可以直接产生满足各种分布的随机数,软件中,可以直接产生满足各种分布的随机数,命令如下:命令如下:2产生产生mn阶,均匀分布的随机数矩阵:阶,均匀分布的随
10、机数矩阵:rand(m,n)产生一个,均匀分布的随机数:产生一个,均匀分布的随机数:rand(1)1产生产生mn阶阶a,b上上均匀分布均匀分布U U(a,b)的随机数矩阵:)的随机数矩阵:unifrnd(a,b,m,n)产生一个产生一个a,b均匀分布的随机数:均匀分布的随机数:unifrnd(a,b)randn(m,n):生成:生成 m n 的随机矩阵,每个元素都在的随机矩阵,每个元素都在(0,1)间,生成方式间,生成方式为正态分布为正态分布 randperm(m):生成一个:生成一个 1到到m 的随机整数排列的随机整数排列perms(1:n):生成生成1到到n的全排列,共的全排列,共n!个!
11、个当研究对象视为大量相互独立的随机变量之和,且其中每一种变量对总和的影响都很小时,可以认为该对象服从正态分布机械加工得到的零件尺寸的偏差、射击命中点与目标的偏差、各种测量误差、人的身高、体重等,都可近似看成服从正态分布若连续型随机变量X的概率密度函数为 其中 0为常数,则称X服从参数为 的指数分布指数分布e0()00txf xx指数分布的期望值为 1排队服务系统中顾客到达率为常数时的到达间隔、故障率为常数时零件的寿命都服从指数分布指数分布在排队论、可靠性分析中有广泛应用注意:注意:MATLAB中,产生参数为 的指数分布的命令为exprnd()1例例 顾客到达某商店的间隔时间服从参数为顾客到达某
12、商店的间隔时间服从参数为0.10.1的指数分布的指数分布 指数分布的均值为指数分布的均值为1/0.1=101/0.1=10 指两个顾客到达商店的平均间隔时间是指两个顾客到达商店的平均间隔时间是1010个单位时间个单位时间.即平均即平均1010个个单位时间到达单位时间到达1 1个顾客个顾客.顾客到达的间隔时间可用顾客到达的间隔时间可用exprnd(10)模模拟拟设离散型随机变量X的所有可能取值为0,1,2,且取各个值的概率为其中 0为常数,则称X服从参数为 的泊松分布泊松分布e(),0,1,2,!kP Xkkk泊松分布在排队系统、产品检验、天文、物理等领域有广泛应用泊松分布的期望值为如相继两个事
13、件出现的间隔时间服从参数为 的指数分布,则在单位时间间隔内事件出现的次数服从参数为 的泊松分布即单位时间内该事件出现k次的概率为:e(),0,1,2,!kP Xkkk反之亦然指数分布与泊松分布的关系:(1)(1)指两个顾客到达商店的平均间隔时间是指两个顾客到达商店的平均间隔时间是1010个单位时间个单位时间.即平均即平均1010个单位时间到达个单位时间到达1 1个顾客个顾客.(2)(2)指一个单位时间内平均到达指一个单位时间内平均到达0.10.1个顾客个顾客例例 (1)(1)顾客到达某商店的间隔时间服从参数为顾客到达某商店的间隔时间服从参数为0.10.1的指数分布的指数分布 (2)(2)该商店
14、在单位时间内到达的顾客数服从参数为该商店在单位时间内到达的顾客数服从参数为0.10.1的泊松分布的泊松分布 例例2 2敌坦克分队对我方阵地实施突袭,其到达规律服从泊松分布,平均每分钟到达辆(1)模拟敌坦克在分钟内到达目标区的数量,以及在第、分钟内各到达几辆坦克(2)模拟在3分钟内每辆敌坦克的到达时刻 (1 1)用)用poissrnd(4)poissrnd(4)进行模拟进行模拟(2 2)坦克到达的间隔时间应服从参数为)坦克到达的间隔时间应服从参数为4 4的负指数分布,的负指数分布,用用exprndexprnd(1/41/4)模拟)模拟n1=poissrnd(4)n2=poissrnd(4)n3=
15、poissrnd(4)n=n1+n2+n3t=0;j=0;while t3 j=j+1 t=t+exprnd(1/4)end离散系统模拟实例离散系统模拟实例:排队问题排队问题 排队论排队论主要研究随机服务系统的工作过程 在排队系统中,服务对象的到达时间和服务时间都是随机的排队论通过对每个个别的随机服务现象的统计研究,找出反映这些随机现象平均特性的规律,从而为设计新的服务系统和改进现有服务系统的工作提供依据 对于排队服务系统,顾客常常注意排队的人是否太多,等候的时间是否长,而服务员则关心他空闲的时间是否太短.于是人们常用排队的长度、等待的时间及服务利用率等指标来衡量系统的性能.1 系统的假设:系
16、统的假设:(1)顾客源是无穷的;顾客源是无穷的;(2)排队的长度没有限制;排队的长度没有限制;(3)到达系统的顾客按先后顺序依次进入服务,到达系统的顾客按先后顺序依次进入服务,即即“先到先服务先到先服务”单服务员的排队模型单服务员的排队模型:在某商店有一个售货员,顾客陆续来到,在某商店有一个售货员,顾客陆续来到,售货员逐个地接待顾客当到来的顾客较多时,一部分顾客便须排队售货员逐个地接待顾客当到来的顾客较多时,一部分顾客便须排队等待,被接待后的顾客便离开商店设:等待,被接待后的顾客便离开商店设:1 1顾客到来间隔时间服从参数为顾客到来间隔时间服从参数为0.10.1的指数分布的指数分布对顾客的服务
17、时间服从,上的均匀分布对顾客的服务时间服从,上的均匀分布排队按先到先服务规则,队长无限制排队按先到先服务规则,队长无限制 假定一个工作日为假定一个工作日为8 8小时,时间以分钟为单位小时,时间以分钟为单位11模拟一个工作日内完成服务的个数及顾客平均等待时间模拟一个工作日内完成服务的个数及顾客平均等待时间t t22模拟模拟100100个工作日,求出平均每日完成服务的个数及每日顾客的平均个工作日,求出平均每日完成服务的个数及每日顾客的平均等待时间等待时间 2 2 符号说明符号说明 w:总等待时间;:总等待时间;ci i:第:第i个顾客的到达时刻;个顾客的到达时刻;bi:第:第i个顾客开始服务时刻;
18、个顾客开始服务时刻;ei i:第:第i个顾客服务结束时刻个顾客服务结束时刻 xi:第第i-1-1个顾客与第个顾客与第i个顾客到达之间的时间间隔个顾客到达之间的时间间隔(需要模拟)(需要模拟)yi:对第对第i个顾客的服务时间个顾客的服务时间(需要模拟)(需要模拟)c1b1c3c4c5c2e1b2e2b3e3b4e4b5ci=ci-1+xiei=bi+yibi=max(ci,ei-1)t顾客到来时刻顾客离开时刻顾客开始服务时刻3 模拟框图模拟框图初始化:令i=1,ei-1=0,w=0产生间隔时间随机数xi服从参数为0.1的指数分布 ci=xi,bi=xi 产生服务时间随机数yi服从4,15的均匀分
19、布 ei=bi+yi累计等待时间:w=w+bi-ci准备下一次服务:i=i+1产生间隔时间随机数xi服从参数为0.1的指数分布 ci=ci-1+xi 确定开始服务时间:bi=max(ci,ei-1)bi480?YNi=i-1,t=w/i输出结果:完成服务个数:m=i 平均等待时间:t停止cleari=2;w=0;e(i-1)=0;%初始离开时刻初始离开时刻x(i)=exprnd(10);%下一个时间间隔模拟(下一个时间间隔模拟(0.1指数分别)指数分别)c(i)=x(i);%下一个顾客到来时刻下一个顾客到来时刻b(i)=x(i);%下一个顾客开始服务时刻下一个顾客开始服务时刻 while b(
20、i)MAXK或或PMAXP时停止迭时停止迭代代框图框图初始化:给定MAXK,MAXP;k=0,p=0,Q:大整数xj=aj+R(bj-aj)j=1,2,nj=0j=j+1,p=p+1PMAXP?YNxj=aj+R(bj-aj)gi(X)0?i=1,2nYNjMAXK?YN输出X,Q,停止YN 在MATLAB软件包中编程,共需3个文件:randlp.m,mylp.m,lpconst.m.主程序为randlp.m.%mylp.mfunction z=mylp(x)%目标函数目标函数z=2*x(1)2+x(2)2-x(1)*x(2)-8*x(1)-3*x(2);%转化为求最小值问题转化为求最小值问题
21、%randlp.m function sol,r1,r2=randlp(a,b,n)%随机模拟解非线性规划随机模拟解非线性规划debug=1;a=0;%试验点下界试验点下界b=10;%试验点上界试验点上界n=1000;%试验点个数试验点个数r1=unifrnd(a,b,n,1);%n1阶的阶的a,b均匀分布随机数矩阵均匀分布随机数矩阵r2=unifrnd(a,b,n,1);sol=r1(1)r2(1);z0=inf;for i=1:n x1=r1(i);x2=r2(i);lpc=lpconst(x1 x2);if lpc=1 z=mylp(x1 x2);if zz0 z0=z;sol=x1 x
22、2;end endendclc;clear all;close all;%初始值初始值t=0 0.921 1.843 2.949 3.871 4.978 5.900.7.006 7.928 8.967 9.981 10.925 10.954 12.032.12.954 13.875 14.982 15.903 16.826 17.931 19.037.19.959 20.839 22.015 22.958 23.880 24.986 25.908;h=9.677 9.479 9.308 9.125 8.982 8.814 8.686.8.525 8.388 8.220-1 -1 10.820
23、10.500.10.210 9.936 9.653 9.409 9.180 8.921 8.662.8.433 8.220-1 10.820 10.591 10.354 10.180;D=17.4;V=pi/4*D2*h;t1=t(1:10);t2=t(13:23);t3=t(25:28);V1=V(1:10);V2=V(13:23);V3=V(25:28);%估计水流速度估计水流速度水塔中水的体积对时间的导数水塔中水的体积对时间的导数dV=-gradient(V1,t1)gradient(V2,t2)gradient(V3,t3)水塔流量的估计水塔流量的估计%用三次样条插值函数得到流速的连续曲线用三次样条插值函数得到流速的连续曲线t=t1 t2 t3;h=0.01;ti=min(t):h:max(t);dvi=interp1(t,dV,ti,spline);plot(t,dV,+,ti,dvi);xlabel(时间时间);ylabel(流速流速(m3/h);%日用水量计算日用水量计算数值积分数值积分(复化梯形公式复化梯形公式)ti=0:0.01:24;dvi=interp1(t,dV,ti,spline);I=trapz(ti,dvi)谢谢大家!谢谢大家!