基于MATLAB的数字模拟仿真..doc

举报
资源描述
\ 基于MATLAB的数字模拟仿真 摘 要:本文阐述了计算机模拟仿真在解决实际问题时的重要性,并较为系统的介绍了使用计算机仿真的原理及方法。对于计算机模拟仿真的三大类方法:蒙特卡罗法、连续系统模拟和离散事件系统模拟,在本文中均给出了与之对应的实例及基于MATLAB模拟仿真的相关程序,并通过实例深入的分析了计算机模拟解决实际问题的优势及不足。 关键词:计算机模拟;仿真原理;数学模型;蒙特卡罗法;连续系统模拟;离散事件系统模拟 在实际问题中,我们通常会面对一些带随机因素的复杂系统,用分析方法建模常常需要作许多简化假设,这样进行处理过后的模型与我们面临的实际问题可能相差很远,以致求解得到答案根本无法应用,这时,计算机模拟几乎成为唯一的选择。本文通过对计算机模拟仿真进行系统地介绍,寻求利用模拟仿真来解决问题的一般方法,并深入探讨了这些方法的长处和不足。我们定义一些具有特定的功能、相互之间以一定的规律联系的对象所组成的总体为一个系统,模拟就是利用物理的、数学的模型以系统为问题解决对象,来类比、模仿现实系统及其演变过程,以寻求过程规律的一种方法。模拟的基本思想是建立一个实验的模型,这个模型包含所研究系统的主要特点,这样做的目的就是通过对这个实验模型的运行,获得所要研究系统的必要信息。另外,系统的运行离不开算法,仿真算法是将系统模型转换成仿真模型的一类算法,在数字仿真模型中起核心和关键作用。 1、所谓计算机仿真 计算机仿真是利用计算机对一个实际系统的结构和行为进行动态演示,以评价或预测该系统的行为效果。它是解决较复杂的实际问题的一条有效途径。针对一个确定的系统,根据运行的相似原理,利用计算机来逼真模仿研究对象(研究对象可以是真实的系统,也可以是设想中的系统),计算机仿真是将研究对象进行数学描述,建模编程,且在计算机中运行实现。 对比于物理模拟通常花费较大、周期较长,且在物理模型上改变系统结构和系数都较困难的诸多缺陷,计算机模拟不怕破坏、易修改、可重用,有更强的系统适应能力。但是计算机模拟也有缺陷,比如受限于系统建模技术,即系统数学模型不易建立、程序调试复杂等。 计算机仿真可以用于研制产品或设计系统的全过程中,包括方案论证、技术指标确定、设计分析、生产制造、试验测试、维护训练、故障处理等各个阶段。 2、计算机仿真的目的 对于一个系统,是否选择进行计算机模拟的问题,基于判断计算机模拟与非计算机模拟方法孰优孰劣的问题。归纳以下运用计算机模拟的情况: (1)在一个实际系统还没有建立起来之前,要对系统的行为或结果进行分析研究时,计算机仿真是一种行之有效的方法。 (2)在有些真实系统上做实验会影响系统的正常运行,这时进行计算机模拟就是为了避免给实际系统带来不必要的损失。如在生产中任意改变工艺参数可能会导致废品,在经济活动中随意将一个决策付诸行动可能会引起经济混乱。 (3)当人是系统的一部分时,他的行为往往会影响实验的效果,这时运用系统进行仿真研究,就是为了排除人的主观因素的影响。 (4)在实际系统上做实验时,由于系统误差和偶然误差的存在,对实验结果的好坏我们很难作出正确的判断,这时运用计算机模拟,就可以保证每次操作的条件相同,排除误差。 (5)有些系统一旦建立起来之后就无法复原,利用计算机模拟可重复性的这一优势,可以获得显著的经济效益。例如要投资建立一个大型企业,要分析它建成之后的经济效益和社会效益,不能用建立起来试试看的办法,因为建成后就无法回到原来的状态了。 3、计算机仿真的分类 计算机模拟分为动态模拟和静态模拟,数值分析中的蒙特卡罗法就是典型的静态模拟,动态模拟可以分为连续系统模拟和离散事件系统模拟。连续系统模拟研究系统的状态随时间连续变化的情况,在解决实际问题时,一般要建立微分方程模型,先确定系统的连续状态变化量,然后将它在时间上进行适当的离散量化处理,并由此模拟系统的运行状态。而离散事件系统模拟讨论的是系统状态只在一些离散时间点上,由于随机时间的推进而发生变化,其问题解决模型一般用流程图或网络来表示。 注:连续系统模拟中虽然有时也考虑一些随机作用,但经常还是把它当作确定性问题去考虑,而在离散事件系统模拟中事件的出现和系统状态变量几乎总都是随机的。但是,值得注意的一点是,在这两种系统模拟中时间具有重要作用,我们都是要观察系统在时间过程中的变化。 4、计算机仿真的原理 事实告诉我们,现实世界充满不确定性,我们所研究的现实对象往往难以摆脱随机因素的影响。要使我们的数学模型能够较真实地刻画实际对象,必须面对这个现实。概率论是用数学的思想和方法处理和研究随机现象的一个有效的工具。但有时它还难以用来处理复杂系统中的随机性。而我们运用计算机来模拟随机现象的方法基于随机数,它经常应用于复杂系统的动态仿真的研究当中。仿真模型是处理复杂系统中随机性的计算机模型,也是使用计算机研究和解决实际问题的一条重要途径。 对随机现象进行模拟,实质上要给出随机变量的模拟,也就是说利用计算机随机地产 生一系列数值(称为随机数),它们的出现要服从一定的概率分布。目前,经常使用的是按照一定的算法产生的随机数。下面列举的是MATLAB中各种分布下产生随机数的命令: 常见的分布函数 MATLAB语句 均匀分布 均匀分布 指数分布 正态分布 二项分布 分布 以上语句均产生的矩阵 在实际应用中用哪种随机数生成法,要针对具体的系统做出与之相适应的选择。 (1)当研究对象视为大量相互独立的随机变量之和,且其中每一种变量对总和的影响都很小时,可以认为该对象服从正态分布。 (2)考试分数的偏差、射击命中点与目标的偏差、人的身高、体重等,都可近似看成服从正态分布。 (3)排队服务系统中顾客到达率为常数时的到达间隔、故障率为常数时零件的寿命都服从指数分布。指数分布在排队论、可靠性分析中有广泛应用。 (4)涉及到排队系统、产品检验、天文、物理等领域时可用到泊松分布。 5、计算机仿真的方法 否 问题的分析 项目研究计划 数据收集 模型建立 编制程序 程序检验 模型确认 实验设计 运行分析 进一步分析 输出结果 仿真结果 否 否 是 否 A B C D 图4-1:仿真步骤流程 5.1解决计算机模拟的一般步骤: 进行计算机仿真一般要进过四个步骤:系统分析,模型构造,运行与改进和输出结果。 图中表示系统分析,表示模型构造,表示运行与改进,表示输出结果 第一步:系统分析,明确目标。就是要明确问题和提出总体方案。首先要把被仿真系统的内容表达清楚,弄清仿真的目的,然后选择描述这些目标的主要环节和状态变量,明确定义所研究问题的范围、边界和初始条件,并充分估计初始条件对系统主要性能的影响。 第二步:模型构造、采集数据。包括建立模型、收集数据、编写程序、程序验证和模型确认等。建立模型就是选择合适的仿真方法,如时间步长法、事件表法等,确定系统的初始状态, 设计整个系统的仿真流程。最后选择合适的通用语言或仿真语言编写、调试程序。 第三步:模型的运行与改进。首先确定一些具体的运行方案,如初始条件、参数、步长、重复次数等,然后输入数据,运行程序,直到符合实际系统的要求及精度为止。 第四步:模型输出、统计分析。包括提供文件的清单,记录重要的中间结果,输出格式要有利于用户了解整个仿真过程,分析和使用仿真结果。 5.2针对不同的模拟方法举例 5.2.1基于随机数来进行计算机模拟的蒙特卡罗法(Random simulation) 蒙特卡罗法属于实验数学的一个分支,它利用随机数进行统计试验,以求得的统计特征值(如均值、概率等)作为待解决问题的数值解。而在这一过程中所作的统计试验称为蒙特卡罗法。蒙特卡罗法的基本思想原理是首先建立一个概率模型,使所求问题的解正好是该模型的参数或其他有关的特征量。然后通过模拟、统计,即多次随机抽样实验,统计出某事件发生的百分比。只要实验次数很大,该百分比便近似于事件发生的概率。而这实际上也就是概率的统计定义。 5.2.1.1蒙特卡罗法的原理 这里引用资料,根据车比雪夫定理,设,,是相独立的随机变量序列,它们服从相同的分布,且有有限的数学期望和方差 ,则,,的算术平均值当时按概率1收敛于,即对于任意有: 由中心极限定理得到: 即当n很大时,近似服从标准正态分布。 5.2.1.2蒙特卡罗法的实例应用 这里应用蒙特卡洛法解决最古老但又不失经典的例子——浦丰(Buffon)投针问题。 问题重述:若干条相互平行线间的距离为,针的长度为,将针投出后其与平行线相交的概率为,求出其概率。 模型建立:通过计算可知针与平行线相交的概率为: 其中为平行线间距离,为针的长度,其中,将针投次,若有次与平行线相交,则可用作为的近似值。由此可计算出的近似值为: 注:要使结果更加准确就需使尽量大一些 编程求解:设是一随机变量,它服从区间上的均匀分布。同理,是服从区间上的均匀分布。按照某种抽样法,产生随机变量的可能值,例如进行次抽样,得到样本值,其中,统计出满足不等式:的次数然后利用MATLAB7.0进行进行计算机编程模拟(程序见附录一)。当取, 时,模拟得到:概率,圆周率 这与真实值已经很接近了。 5.2.2基于离散时间点上的离散型随机变量的模拟(Discrete system) 离散系统是指系统状态只在有限的时间点或可数的时间点上有随机事件发生的系统,在这些点上发生的离散事件改变了系统的状态,并假设系统状态的变化是在该时间点上瞬时完成的,即离散事件是瞬时出现的。 5.2.2.1离散型随机变量模拟的原理 设离散随机变量的可能值为,相应的概率为,设, ,将作为分点,把区间分为一系列小区间。设是上均匀随机变量,则有: ===, 因此可以用随机变量落在内的情况来模拟离散的随机变量的取值情况。 5.2.2.2离散型随机变量模拟的实例应用 在离散型随机变量模拟所解决的问题中,排队系统是一类很常见又非常重要的问题,且这类问题广泛存在于银行、医院、超市等现实生活中的领域。由一个或多个服务台和一些等待服务的顾客组成的离散时间系统称为排队系统。这里列举一个简单的排队系统问题,并从中了解离散型随机变量模拟的思想方法。 问题重述:一个理发店有两位服务员和,顾客随机地到达该理发店,每分钟有一个顾客到达和没有顾客到达的概率均是,其中的顾客理发仅用分钟,另外的顾客用分钟。试对前分钟的情况进行仿真,模拟出完成服务的个数及顾客平均等待时 间。 模型建立:本题属于多服务台随即服务模型。 假设客源是无穷的,且队长不受限制,顾客接受先来后到的服务规则。设顾客总的等待时间为,第个顾客的到达时刻为,第个顾客开始接受服务的时刻为,第个顾客服务结束的时刻为,第个顾客与第个顾客之间的时间间隔为,第个顾客的服务时间为。这样便容易得到如下关系: 编程求解:运用MATLAB7.0编制模拟程序的思想如下: (1)应用MATLAB随机数生产函数,按照等概率原则,模拟出前分钟中顾客到达情况: 、、、; (2)再按照的顾客理发仅用分钟,另外的顾客用分钟的顾客接受服务时间原则,模拟出顾客 、、、所对应的接受服务的时间、、、; (3)确定每个顾客接受服务的时间。当系统刚开始运行时,第一、第二个顾客可以直接接受服务,而对于以后的顾客,其接受服务的时刻的判断取决于三者中最大者。即:; (4)计算顾客的累计等待时间。顾客总的等待时间为,得到:; (5)判断第个顾客开始接受服务的时刻为是否超出分钟。若是,则总得接受服务的人数为:,顾客平均等待时间为:;若否,重复步骤(3)。 5.2.3基于状态随时间连续变化的连续型随机变量的模拟(Continuity system) 连续系统模拟研究系统的状态随时间连续变化的情况。连续系统虽然研究的是确定性问题,但在实际处理中,是将连续状态变量在时间上进行离散化处理,并由此模拟系统的运行状态,即其状态由于随机时间的推进而发生变化。因此,连续系统的计算机模拟只能是近似的,只要这种近似达到一定的精度,一般就可以满足要求。 5.2.3.1连续型随机变量模拟的原理 处理连续型随机变量模拟问题有多种方法,其中反函数法是最常用的。其方法核心是通过求概率分布的反函数产生随机数。众所周知随机变量的概率分布函数为定义在 区间的单调递增函数,设为区间的均匀随机变量, 令,只要求出反函数,即为具有概率分布函数的随机机数。由概率论的理论可以证明和相同的概率分布。 若的概率密度为,由,是区间上均匀分布的随机变量,如果给定区间上均匀分布的随机数, 则具有给定分布的随机数可由方程中解出: 5.2.3.2连续型随机变量模拟的实例应用 下面介绍利用连续型随机变量模拟解决追击性问题。 问题重述:正方形的个顶点各有人。在某一时刻,人同时出发以匀速,按顺时针方向追逐下一人,如果他们始终保持对准目标,则最终按螺旋状曲线于中心点。试求出这种情况下每个人的行进轨迹。 模型建立:建立平面直角坐标系:,,,,取时间间隔为,计算每一点在各个时刻的坐标。设某点在时刻的坐标为: , 则在时刻的坐为: 其中 编程求解:设置初始化条件为,,,,取足够小的,当时算法结束。对每一个点连接它在各时刻的位置,即得所求运动轨迹。然后根据上述建立的模型,用MATLAB7.0编程(程序见附录三)。 图4-2:追击问题仿真分解图 将整个仿真过程分解(如图4-2),我们可以直观地看到整个追击过程。为了更直观的看到整个追击过程,本文提供了利用MATLAB7.0编制的仿真动画程序(见附录四)。通过仿真动画,追击的过程可以一目了然地表现出来。 6、计算机仿真的效果分析 在前面已经提到多种在处理实际问题时可以用到计算机仿真的情况,这里将看看仿真效果到底如何。 我们知道随机现象存在于现实的各种事件中,对于一特定事件,如果我们可以求出理论值固然是件好事,但事实上并不是所有事件都可以如我们所愿,然而即便能够求出其理论上的情形,也与现实情况存在不小的出入,这时仿真便显示出其强大的适应能力。计算机仿真可以很好的顾及理论值和现实中的随机情况。 (1)对于可以进行理论计算的情况 这里列举一个简单的例子来加以说明: 观察所对目标的指示真确与否。以投币为例,该模拟实验有两种结果,且每种情况出现的概率都相等。对其100次投币情况进行模拟,得到以下结果: 表6-1:模拟值与理论值对比 实验值(次数) 理论值(次数) 正面 64 50 反面 36 50 从表中我们可以看出,虽然模拟值与理论值不完全一样,但它却更能真实地表现实际情况。 (2)对于无法进行理论计算的情况 当一个系统过于复杂,以至于我们无法进行理论计算时,计算机仿真可以很好地表现出系统的整个动态过程。 以2009年全国大学生数学建模竞赛B题为例: 医院就医排队是大家都非常熟悉的现象,它以这样或那样的形式出现在我们面前,例如,患者到门诊就诊、到收费处划价、到药房取药、到注射室打针、等待住院等,往往需要排队等待接受某种服务。题目要求解决目前队列越来越长的问题。 对于这种情况,理论计算是相当困难的,通过计算机仿真,这个问题却可以得到很好的解决(仿真结果如图),通过图像可以直观地看到队列的长度随天数的变化趋势,相对于理论计算有显著的优越性。 图6-2:队长随时间的变化趋势 7、计算机仿真与数学建模 数学建模是利用数学方法解决实际问题的一种实践。即通过抽象、简化、假设、引进变量等处理过程后,将实际问题用数学表达式,通过建立起数学模型,运用数学方法及计算机技术去解决实际问题。在建立起数学模型后,接下来的工作就是检验模型的正确性、及适应能力,而往往这一步是相当困难的。然而,计算机仿真由于其的易修改、可重用且强大的适应力等优越性,可使这一过程简化并且与实际情况吻合的很好。 计算机仿真 模型准备 模型假设 模型建立 通过模型检验 模型应用 是 否 图7-1:建模—仿真流程图 另外,计算机仿真在数学建模竞赛中有广泛的应用。在每年举行的数学建模大赛中,据不完全统计:1992 A、施肥效果分析,1997 A、零件的参数设计,1999 A、自动化车床管理, 2001 B、公交车调度,评卷策略,2009 B、眼科病床安排 等题目均可用计算机仿真来进行很好的解答。计算机仿真往往是解决数学建模竞赛题目的一把利器。 结束语 计算机仿真作为一种解决问题的方法,有优势,当然也有它的不足之处。但是总的来看,它凭借自身的优势已成为解决数学建模问题最好的方法之一。根据具体的实际问题,建立模型,正确又科学地使用计算机仿真才能将问题解决好。 8、参考文献 [1] 颜薇娜. 基于蒙特卡洛模拟的商业银行排队问题研究[J]. 技术经济与管理研究. 2009年第1期. [2] 莫兴德. 计算机仿真建模的几种方法.广西大学学报(自然科学版)[J]. 第28卷 增刊2003年10月. [3] 莫兴德. 计算机仿真. PPT. [4] 辜继明,赵闪,余明明. 眼科病床安排的数学模型. 2009年9月14日. 第14页. [5] 宋来中,王志明. 数学建模与实验[M]. 科学出版社.2005年8月. 9、附录 附录一:浦丰(Buffon)投针问题程序 n=10000;l=1;a=2; m=0; for k=1:n x=unifrnd(0,a); e=unifrnd(0,pi); if x+l*sin(e)>=a m=m+1; end end p=m/n pai=2*n*l/(m*a) 附录二: 附录三:追击问题仿真程序 v=1; dt=0.05; x=[0 0 10 10]; y=[0 10 10 0]; for i=1:4 plot(x(i),y(i),.),hold on end d=20; subplot(2,2,4); while(d>0.1) x(5)=x(1);y(5)=y(1); for i=1:4 d=sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2); x(i)=x(i)+v*dt*(x(i+1)-x(i))/d; y(i)=y(i)+v*dt*(y(i+1)-y(i))/d; plot(x(i),y(i),.), hold on end end 附录四:追击问题的仿真动画程序 v=1; dt=0.05; x=[0 0 10 10]; y=[0 10 10 0]; for i=1:4 plot(x(i),y(i),.),hold on end d=20; axis equal, M=moviein(16); while(d>0.1) x(5)=x(1);y(5)=y(1); for i=1:4 d=sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2); x(i)=x(i)+v*dt*(x(i+1)-x(i))/d; y(i)=y(i)+v*dt*(y(i+1)-y(i))/d; plot(x(i),y(i),.), M(:,i)=getframe; end hold on end movie(M,30)
展开阅读全文
温馨提示:
得力文库 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 教育专区 > 教案示例


本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com