matlab模拟技术精品资料.docx





《matlab模拟技术精品资料.docx》由会员分享,可在线阅读,更多相关《matlab模拟技术精品资料.docx(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.1.1 模拟技术在许多数学方法中,一般都要用到解析论证和数值计算的技巧。但是,许多现实的系统是很复杂的,其中的随机性因素往往难以用数学公式表示出来,也就很难使用数学推导或数值计算机的手段来分析系统、预测系统的性能。因此,产生了对系统进行模拟的技术。在使用计算机对系统进行模拟之前,一般要清楚模拟的一般步骤和方法。后面将从较小的模拟实例,对模拟技术进行简要的介绍。模拟过程的一般过程为:(1) 分析问题,收集资料。需要搞清楚问题要达到的目标,根据问题的性质收集有关随机性因素的资料。这里用得较多的知识为概率统计方面。在这个阶段,还应当估计一下待建立的模拟系统的规模和条件,说明哪些是可以控制的变量,
2、哪些是不可控制的变量。(2) 建立模拟模型,编制模拟程序。按照一般的建模方法,对问题进行适当的假设。也就是说,模拟模型未必要将被模拟系统的每个细节全部考虑。模拟模型的优劣将通过与实际系统有关资料的比较来评价。如果一个“粗糙”的模拟模型已经比较符合实际系统的情况,也就没有必要建立费时、复杂的模型。当然,如果开始建立的模型比较简单,与实际系统相差较大,那么可以在建立了简单模型后,逐步加入一些原先没有考虑的因素,直到模型达到预定的要求为止。编写模拟程序之前,要现画出程序框图或写出算法步骤。然后选择合适的计算机语言,编写模拟程序。模拟实现的工具较多,如数学软件类:Matlab、Mathematica、
3、Maple、MathCAD等,还有其它的高级语言工具,如:Visual C+、C+ Builder、Delphi、Borland C+3.1等。(3) 运行模拟程序,计算结果。为了减小模拟结果的随机性偏差,一般要多次运行模拟程序,还有就是增加模拟模型的时段次数。(4) 分析模拟结果,并检验。模拟结果一般说来反映的是统计特性,结果的合理性、有效性,都需要结合实际的系统来分析,检验。以便提出合理的对策、方案。以上步骤是一个反复的过程,在时间和步骤上是彼此交错的。比如模型的修改和改进,都需要重新编写和改动模拟程序。模拟结果的不合理,则要求检查模型,并修改模拟程序。1.1.2 模拟时间利用计算机进行模
4、拟时,有两种控制模拟时间的方法。一种是固定时间增量法,另一种是可变时间增量法,又叫面向事件法。固定时间增量法,是选用一段合适的时间作单位,然后每隔一个单位时间就计算一次有关参数的值,到达预定的模拟时间后,模拟程序结束。在编写这种程序时,一般可以建立一个“模拟时钟”变量。程序的主体框架一般时个大的循环,循环变量,则为模拟时间;在每个循环体内,就是对每个时段作处理。例如,有些排队论模型,可能就是以每隔一段时间(一天或者一个月)进行处理。采用可变时间增量法编写的模拟程序也有一个“模拟时钟”变量,但它是在一个事件发生时,“模拟时钟”才向前推进。需要注意的是,该模拟方法每一步经过的时间是可变的,而且会自
5、动寻找下一个最早使系统状态发生变化的事件。整个模拟直到“模拟时钟”到达指定的时间长度为止。可以参考有关离散系统仿真的内容。1.1.3 模拟语言运用计算机进行模拟,还要选用适当的程序设计的语言。当然,象C/C+、Pascal、Fortran这样的高级语言是可以用于模拟的实现,特别是在面向对象这样的程序设计思想的引入,使得采用这样的语言实现模拟要更方便些。但是,用这样的语言编写的程序一般都很长,而且编写复杂,调试费时。因此人们研究初了许多专门用于模拟的语言,如GPSS、SIMULA等。这里本书不讨论其他的模拟语言,而主要讲解如何使用Matlab语言编写模拟程序。Matlab不仅数值计算功能强大,而
6、且由于其语言的简洁和高级,编写的代码少,而且容易调试,实现模拟模型很快。1.1.4 随机数的模拟计算机模拟主要用于模拟复杂过程或现象的一些方法。采用计算机模拟一个实验或一个过程,那么用不同的数据重复计算机模拟就能得出统计学结论。使用这种研究方法得到的结论可能在数学上不很精确,但其精确性对于我们了解所模拟的过程已经足够了。考虑落在单位区间(0,1)中的一个实数序列。简单的说,如果这些数是杂乱地分布于整个区间中,且其排列次序似乎也无章法可循,那么这一序列就称为是随机地。下列序列的数就不是随机的:(1) 该序列的数是单调增加的或单调减小的;(2) 后一个数是关于前一个数的连续函数,如;1.1.5 随
7、机数的产生大多数计算机系统都有随机数生成器,MATLAB也有自己的随机数生成器,但是这些系统产生的随机数一般称为伪随机数,它们不是真正随机的。有许多产生随机数的算法,下面介绍一种算法还是比较令人满意的。产生均匀分布于开区间(0,1)中的随机数。算法如下:取一个整数,使得,对,计算:这里的是范围在中的整数。初始整数称为这个序列的种子。1和这个梅森(Mersenne)质数之间的任何一个整数都可取为种子。下面就用Matlab编写实现该算法的程序,函数名为mrand:function r=mrandglobal LL=mod(16807*L,2147483647);r=L*4.656612875245
8、9e-10;调用说明:如果要调用该函数mrand,需要在程序中添加如下2条命令:global LL=3第一句:global L 声明变量L为全局变量第二句:给L赋予初值下面集中随机数也是常用的,都可以借助上面的函数mrand实现。fix:取整函数,向靠近0的方向取整(1) 要产生在(a,b)上均匀分布的随机数x,则x=(b-a)*mrand+a(2) 产生集合0,1,2,n中的随机数I,则I=fix(n+1)*mrand)(3) 产生从j到k(jk)的随机整数X,则X=fix(k-j+1)*mrand)+j注意:一般说来直接采用Matlab中的rand就可以产生(0,1)之间均匀分布的随机数。
9、下面通过自定义的Matlab函数用于模拟随机变量,当然也可以改写为非函数实现。1.1.6 模拟均匀分布随机变量的函数function r=rnd_u(a,b)%产生在a,b间均匀分布的随机数r=a+(b-a)*rand;return1.1.7 模拟指数分布随机变量的函数function r=rnd_beta(lamada)%模拟指数分布%lamad表示指数分布的参数r = -log(rand)/lamada;return1.1.8 模拟正态分布随机变量的函数function r=rnd_normal(arg_mean,arg_segema)%arg_mean 均值%arg_segema 标准差
10、r = arg_mean + arg_segema*randn;%不是randreturn1.2 蒙特卡罗模拟法蒙特卡罗(Monte Carlo)方法,也称为随机模拟(random simulation)。基本思想:为了解决数学、物理、工程技术等方面的问题,首先建立一个概率模型或随机过程,使它的参数等于问题的解;然后通过对模型或过程的观察或抽样试验来计算所求参数的统计特征,最后给出所求解的近似值。1.2.1 模拟寻求近似圆周率平行四边形ABCD的面积为圆的面积现在模拟产生在正方形ABCD中均匀分布的点n个,如果这n个点中有m个点在该圆内,则圆的面积与正方形ABCD的面积之比可近似为m/n;即通
11、过模拟求圆周率的程序如下:n=yesinput(请输入产生点的个数:,500);m=0;for i=1:n if (-1+2*rand)2+(-1+2*rand)2=1 m=m+1; endendmypi=4*m/n下面是一组运行结果:n得近似100003.1028500003.13951000003.14182000003.1403注意:以上运行结果如果n得输入都相同,但结果都一般都会完全相同,这是由于产生的点是随机的,自然结果也就不同了。1.2.2 用蒙特卡罗法估算定积分例:求定积分。是该定积分的精确解。思想:对于,如果,则可以通过模拟的方法计算其定积分。构造一个矩形包含了曲边梯形,产生n
12、(足够大)个在举行区域内的点,如果落在由函数构成的曲边梯形内的点为m个,则所求定积分为求解程序:n=106;a=0;b=1;d=max(a,b)+1;m=0;for i=1:n, x=a+rand*(b-a); y=d*rand; if y=x2, m=m+1; end ends=m/n*d*(b-a)运行上面的程序,求得结果为 0.33321600000000这个结果非常接近于真实值。下面编写一个通用的程序,前提是被积函数通用函数:function s=cmmmonitixing(funname,a,b,d,n)if nargin=5, n=10000;%缺省endif n10000, n=
13、10000;%至少产生1万个点endif nargin4 d=max(a,b)+1;%缺省endm=0;%计数器for i=1:n, x=a+rand*(b-a); y=d*rand; if y=feval(funname,x), m=m+1; end ends=m/n*d*(b-a)%计算近似定积分为了计算上面的定积分,按如下步骤:第一步:编写被积函数的M文件function y=myfunx2(x)y=x2;第二步:调用上面的通用程序输入:cmmmonitixing(myfunx2,0,1)ans = 0.33680000000000cmmmonitixing(myfunx2,0,1,3,
14、100000)ans = 0.33429000000000通过上面的调用可以看出,当n取得越大,所计算得到的定积分更接近于真实值。1.2.3 用蒙特卡罗法估计体积有这样一个问题:位于锥面S1:上方和球面S2:内部的区域的体积。首先分析,这块区域包含于以和为界的盒子内,这个盒子的体积为8。理论上,所求区域的体积为球面S2面积的一般加上圆锥的体积,设为V.因此,需要生成在这个盒子内生成随机点,并将落在这块区域内的随机点个数于生成的随机点的总数之比乘以8(盒子的体积),即为所求区域的面积。实现程序如下:numinner=0;times=yesinput(输入模拟次数:,1000,100 10000)
15、for i=1:times, x=2.0*rand - 1.0; y=2.0*rand - 1.0; z=2.0*rand; if (x*x+y*y=z*z) & x*x+y*y=z*(2-z) numinner=numinner+1; end endsprintf(模拟到%d次后,近似体积%.5f,times,numinner/times*8)模拟结果:模拟到5000次后,近似体积3.064001.3 案例:渡口模型1.3.1 问题描述一个渡口的渡船营运者拥有一只甲板长32米,可以并排停放两列车辆的渡船。他在考虑怎样在甲板上安排过河车辆的位置,才能安全地运过最多数量的车辆。分析:怎样安排过河
16、车辆,关心一次可以运多少辆各类车。准备工作: 观察数日,发现每次情况不尽相同,得到下列数据和情况: (1) 车辆随机到达,形成一个等待上船的车列;(2) 来到车辆,轿车约占40,卡车约占55,摩托车约占5;(3) 轿车车身长为3.55.5米,卡车车身长为810米。1.3.2 问题分析这是一个机理较复杂的随机问题,是遵循“先到先服务”的随机排队问题。解决方法:采用模拟模型方法。因此需考虑以下问题:(1) 应该怎样安排摩托车? (2) 下一辆到达的车是什么类型?(3) 怎样描述一辆车的车身长度? (4) 如何安排到达车辆加入甲板上两列车队中的哪一列中去?本实验主要模拟装载车辆的情况,暂时不考虑渡船
17、的安全。1.3.3 模型建立设到达的卡车、轿车长度分别为随机变量。结合实际,这里不妨假设卡车、轿车的车身长度均服从正态分布。由于卡车车身长为810m,所以卡车车长的均值为m,由概率知识中的“”原则,其标准差为,所以得到。同理可得。1.3.4 模拟程序设计由以上的分析,程序设计时的应划分的主要模块(函数)如下:(1) 确定下一辆到达车辆的类型;(2) 根据车的类型确定到达车辆的长度;(3) 根据一定的停放规则,确定放在哪一列。1.3.5 模型求解结果及分析(一)运行结果程序名为sim_dukou,运行程序,输出结果如下:sim_dukou输入模拟次数:1000平均每次渡船上的车数mean_n =
18、 5.4840 3.9180 0.5160(二)结果分析上面为运行一次模拟程序,模拟次数为1000次的模拟结果。从模拟结果,你能得出什么结论?发现摩托车的平均数量不到1辆,因此从另外一方面看,忽略摩托车的长度是合理的。统计结果显示平均每次渡口时船上卡车、轿车、摩托车数量分别为5.484、3.918、0.516辆。1.3.6 模拟程序function sim_dukou%渡口模型的模拟%程序设计: 张勇%2005-2-1n=input(输入模拟次数:);if isempty(n) | (n500) n=500;endN=zeros(1,3);%依次为卡车数量、轿车数量、摩托车数量for i=1:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab模拟技术 精品资料 matlab 模拟 技术 精品 资料

限制150内