计算机仿真计算机仿真技术打印版课件

上传人:博****1 文档编号:567586101 上传时间:2024-07-21 格式:PPT 页数:280 大小:2.27MB
返回 下载 相关 举报
计算机仿真计算机仿真技术打印版课件_第1页
第1页 / 共280页
计算机仿真计算机仿真技术打印版课件_第2页
第2页 / 共280页
计算机仿真计算机仿真技术打印版课件_第3页
第3页 / 共280页
计算机仿真计算机仿真技术打印版课件_第4页
第4页 / 共280页
计算机仿真计算机仿真技术打印版课件_第5页
第5页 / 共280页
点击查看更多>>
资源描述

《计算机仿真计算机仿真技术打印版课件》由会员分享,可在线阅读,更多相关《计算机仿真计算机仿真技术打印版课件(280页珍藏版)》请在金锄头文库上搜索。

1、机电工程学院机电工程系机电工程学院机电工程系李李 安安Tel: 0532-86983310(O) 15166391658Email: jdgc_参考文献参考文献1.系统仿真概论,肖田元等编,清华大学出版社2.现代仿真技术与应用,康风举编,国防工业出版社3.先进仿真技术与仿真环境,熊光楞编, 国防工业出版社4.仿真技术与软件,贾连兴主编,国防工业出版社1.1 仿真的基本概念及其分类1.1.1 系统仿真的定义、分类及作用1.1.2 计算机仿真的定义及其分类1.2 计算机仿真的发展及其应用领域1.3 计算机数字仿真的基本过程1.4 先进仿真技术1.1 仿真(simulation)的基本概念及其分类

2、1.1.1 系统仿真的定义、分类及其作用1)系统仿真的定义系统仿真是通过对系统模型的实验,研究一个存在的或设计中的系统。简言之,系统仿真是对系统动态模型的实验,即在仿真中,系统的动态模型在一定的实验条件下被行为产生器驱动,产生模型行为。 2)系统仿真的分类根据系统模型分类 物理仿真、数学仿真、半物理仿真根据仿真系统的结构和实现手段不同分类 数学仿真、物理仿真、半实物仿真、人在回路中仿真、软件在回路中仿真。根据虚实结合的程序分类 构造仿真、虚拟仿真、实况仿真。 3)系统仿真的作用 由于仿真技术在应用上的特殊功效(安全性和经济性),仿真技术获得了十分广泛的应用。世界各国几乎所有大型的发展项目,如阿

3、波罗登月计划、战略防御系统、计算机集成制造、并行工程等,因为投资极大,又有相当的风险,而仿真技术的应用可以用较小的投资换取风险上的大幅度降低。仿真技术在复杂工程系统的分析和设计的研究中已成为不可缺少的工具,归纳起来,系统仿真技术的主要作用有:优化系统设计。在复杂的系统建立以前,能够通过改变仿真模型结构和调整参数来优化系统设计。对系统或系统的某一部分进行性能评价。节省费用。重现系统故障,以便判断故障产生的原因。可以避免试验的危险性。进行系统抗干扰性能的分析研究。训练系统操作人员。系统仿真能为管理决策和技术决策提供依据。 正因为仿真技术对国防建设、工农业生产及科学研究均具有极大的应用价值,所以,仿

4、真技术被美国国家关键技术委员会于1991年确定为影响美国国家安全及繁荣的22项关键技术之一。本章目录1.1.2 计算机仿真(Computer Simulation)的定义及其分类1)计算机仿真的定义计算机仿真是指应用性能相似原理,构成数字模型,在计算机上对系统进行试验研究。计算机仿真又称为数字仿真。 根据计算机分类 模拟计算机仿真、数字计算机仿真、模拟数字混合仿真 根据仿真时钟与实际时钟的比例关系 实时仿真、欠实时仿真、超实时仿真 根据系统模型的特性 连续系统仿真、离散事件系统仿真本章目录计算机仿真的分类1.2 计算机仿真的发展计算机仿真的发展 及其应用领域及其应用领域1)计算机仿真的发展第一

5、阶段:模拟仿真技术发展阶段,1950年以前。动因:火炮与飞行控制动力学系统的研究。第二阶段:混合仿真技术发展阶段,5060年代。动因:洲际导弹和宇宙飞船飞行姿态及轨道控制动力学的研究。第三阶段:数字仿真技术发展阶段,70年代以后。模拟机混合机数字机计算机仿真的应用类型:系统设计器 对尚未有的系统进行设计时采用仿真技术;系统分析器 对已有系统进行分析时采用仿真技术;系统预测器 在系统运行前,利用仿真模型作为预测器,向用户提供系统运行起来后,可能产生什么现象,以便用户修订计划或决策;系统观测器 在系统运行时,利用仿真模型作为观测器,给用户提供过去、现在甚至未来的信息,以便用户实时作出正确的决策,比

6、如利用仿真技术进行故障分析和故障处理;系统训练器 利用仿真模型作为训练器,训练系统操作人员或管理人员2)计算机仿真的应用领域 从历史上看,仿真技术首先被应用于那些在实际系统进行试验有危险、花费巨大的领域,比如:航空、航天、武器系统等,以后逐渐扩大到虽然可在实际系统上进行试验,但花费较大、耗时较长、不大方便的一些领域,比如:冶金、化工、电力等;近十几年来,则进一步扩大到制造、交通、环境、生态、生物、石油等领域。 综观仿真技术应用领域逐渐扩大的历史,可以得到以下几个有意义的结论:仿真技术在应用上的安全性一直是被采用的最主要原因;仿真技术在应用上的经济性也是被采用的十分重要的原因;仿真技术一般是从学

7、院式的局部应用逐步走向全面应用,其标志是对某领域的仿真应用而设立的仿真中心;仿真技术在每一阶段都有一个比较成熟的应用领域;根据仿真的应用范围,研制和开发了一大批仿真产品,如各种仿真语言及仿真软件包,各种训练仿真器等等。为了推广仿真技术的应用,几乎所有的仿真语言都推出了PC版。本章目录1.3 计算机数字仿真的基本过程为了使大家对计算机数字仿真有一个全面的了解,让我们用一个简单的例子来予以说明。问题:如何分析研究并保证设计出或设计中的悬架系统具有这种卓越性能?研究方法:1 理论方法2 试验方法3 仿真方法仿真技术与物理试验、理论研究的对比仿真技术物理试验理论研究可能性只要能建立系统模型,就能进行系

8、统尚未建立,则不可能;有的自然系统实验周期太长,也不可能有的系统无法建立解析模型,因此,不可能利用解析方法安全性无危险有危险(人身、设备)无危险经济性花费不多费用很大花费少耗时性中等长短准确性可以做到很准确十分准确要做较多假设,有较大误差方便性可以做到十分方便受现场限制,不方便方便机械谐振系统其中: X 状态向量 A 系统矩阵 B 输入矩阵 f(t) 输入变量 C 输出矩阵 D 直接转移矩阵根据研究的目的编制试验方案:1.改变M、B、K,保持f(t)不变,研究系统结构参数对谐振系统动态行为的影响;2.改变f(t),系统结构参数保持不变,研究系统所受激振力对谐振系统动态行为的影响;最后根据仿真试

9、验结果,给出相关结论。建立仿真模型应用编程语言应用仿真语言或环境应用欧拉法、梯形法或RK法等仿真算法,将上述数学模型转化为便于编程的仿真模型:应用编程语言应用编程语言应用仿真语言或环境应用ADAMS应用MATLAB计算机仿真的一般步骤1、确定系统分析目标,进行系统分析,建立系统数学模型2、在系统数学模型的基础上,建立系统的仿真模型3、编程或选用仿真语言4、制定仿真实验方案,进行仿真实验5、分析仿真实验结果,修改模型本章目录给点小提示一、拉普拉斯变换1.拉氏变换的定义2.拉氏变换的几个定理线性定理衰减定理延时定理相似定理微分定理积分定理终值定理初值定理卷积定理线性定理返回返回返回返回衰减定理 延

10、时定理相似定理返回返回返回返回微分定理GOGO积分定理终值定理返回返回返回返回初值定理卷积定理二、拉氏逆变换直接求解法、查表法(系数比较法、留数法)三、应用拉氏变换求解微分方程例:用拉氏变换解微分方程初始条件:四、控制系统的传递函数1.定义2.典型环节的传递函数比例环节微分环节积分环节惯性环节二阶环节延时环节1.定义返回返回返回返回比例环节微分环节积分环节返回返回返回返回惯性环节二阶环节延时环节返回返回返回返回第第2章章 连续系统的数字仿真连续系统的数字仿真对于一个集中参数的连续动态系统,利用我们学过的基础理论知识和专业知识所能直接建立的数学模型形式有哪些呢?高阶微分方程高阶微分方程传递函数传

11、递函数能够在数字计算机上直接求解的数学模型形式又是什么样的呢?差分方程差分方程上述方程形式由何而来的?一阶微分方程一阶微分方程仿真模型数值积分算法动态方程高阶微分方程传递函数模型变换高阶微分方程高阶微分方程传递函数传递函数差分方程差分方程两次模型变换动态方程动态方程等价等价变换变换近似近似变换变换21 连续系统的数学模型1微分方程引进算子 2传递函数3状态空间描述1由微分方程导出状态空间表达式引进如下状态变量: 假定一个连续系统可用下式来描述 令 则有例 系统的微分方程式 设状态变量为 2由传递函数导出状态空间表达式 1)并联程序法(m”为命令提示为命令提示符,表示符,表示MATLAB正在处于

12、准备状态。在正在处于准备状态。在命令提示符后键入命令并按下回车键后,命令提示符后键入命令并按下回车键后,MATLAB就会解释执行所输入的命令,并就会解释执行所输入的命令,并在命令后面给出计算结果。在命令后面给出计算结果。一般来说,一个命令行输入一条命令,命一般来说,一个命令行输入一条命令,命令行以回车结束。但一个命令行也可以输令行以回车结束。但一个命令行也可以输入若干条命令,各命令之间以逗号分隔,入若干条命令,各命令之间以逗号分隔,若前一命令后带有分号,则逗号可以省略。若前一命令后带有分号,则逗号可以省略。例如例如p=15,m=35p=15;m=35如果一个命令行很长,一个物理行之内写如果一个

13、命令行很长,一个物理行之内写不下,可以在第一个物理行之后加上不下,可以在第一个物理行之后加上3个小个小黑点并按下回车键,然后接着下一个物理黑点并按下回车键,然后接着下一个物理行继续写命令的其他部分。行继续写命令的其他部分。3个小黑点称为个小黑点称为续行符,即把下面的物理行看作该行的逻续行符,即把下面的物理行看作该行的逻辑继续。辑继续。在在MATLAB里,有很多的控制键和方向键里,有很多的控制键和方向键可用于命令行的编辑。可用于命令行的编辑。4.1.2.4 工作空间窗口工作空间窗口 工作空间是工作空间是MATLAB用于存储各种变量和用于存储各种变量和结果的内存空间。在该窗口中显示工作空结果的内存

14、空间。在该窗口中显示工作空间中所有变量的名称、大小、字节数和变间中所有变量的名称、大小、字节数和变量类型说明,可对变量进行观察、编辑、量类型说明,可对变量进行观察、编辑、保存和删除。保存和删除。4.1.2.5 当前目录窗口和搜索路径当前目录窗口和搜索路径1当前目录窗口当前目录窗口当前目录是指当前目录是指MATLAB运行文件时的工作运行文件时的工作目录,只有在当前目录或搜索路径下的文目录,只有在当前目录或搜索路径下的文件、函数可以被运行或调用。件、函数可以被运行或调用。在当前目录窗口中可以显示或改变当前目在当前目录窗口中可以显示或改变当前目录,还可以显示当前目录下的文件并提供录,还可以显示当前目

15、录下的文件并提供搜索功能。搜索功能。将用户目录设置成当前目录也可使用将用户目录设置成当前目录也可使用cd命命令。例如,将用户目录令。例如,将用户目录c:mydir设置为当前设置为当前目录,可在命令窗口输入命令:目录,可在命令窗口输入命令:cd c:mydir2MATLAB的搜索路径的搜索路径当用户在当用户在MATLAB命令窗口输入一条命令命令窗口输入一条命令后,后,MATLAB按照一定次序寻找相关的文按照一定次序寻找相关的文件。基本的搜索过程是:件。基本的搜索过程是:(1) 检查该命令是不是一个变量。检查该命令是不是一个变量。(2) 检查该命令是不是一个内部函数。检查该命令是不是一个内部函数。

16、(3) 检查该命令是否当前目录下的检查该命令是否当前目录下的M文件。文件。(4) 检查该命令是否检查该命令是否MATLAB搜索路径中其搜索路径中其他目录下的他目录下的M文件。文件。用户可以将自己的工作目录列入用户可以将自己的工作目录列入MATLAB搜索路径,从而将用户目录纳入搜索路径,从而将用户目录纳入MATLAB系统统一管理。设置搜索路径的方法有:系统统一管理。设置搜索路径的方法有: (1) 用用path命令设置搜索路径。例如,将命令设置搜索路径。例如,将用户目录用户目录c:mydir加到搜索路径下,可在命加到搜索路径下,可在命令窗口输入命令:令窗口输入命令:path(path,c:mydi

17、r)(2) 用对话框设置搜索路径用对话框设置搜索路径 在在MATLAB的的File菜单中选菜单中选Set Path命令或命令或在命令窗口执行在命令窗口执行pathtool命令,将出现搜索命令,将出现搜索路径设置对话框。通过路径设置对话框。通过Add Folder或或Add with Subfolder命令按钮将指定路径添加到命令按钮将指定路径添加到搜索路径列表中。搜索路径列表中。在修改完搜索路径后,则需要保存搜索路在修改完搜索路径后,则需要保存搜索路径径。4.1.2.6 命令历史记录窗口命令历史记录窗口在默认设置下,历史记录窗口中会自动保在默认设置下,历史记录窗口中会自动保留自安装起所有用过的

18、命令的历史记录,留自安装起所有用过的命令的历史记录,并且还标明了使用时间,从而方便用户查并且还标明了使用时间,从而方便用户查询。而且,通过双击命令可进行历史命令询。而且,通过双击命令可进行历史命令的再运行。如果要清除这些历史记录,可的再运行。如果要清除这些历史记录,可以选择以选择Edit菜单中的菜单中的Clear Command History命令。命令。4.1.2.7 启动平台窗口和启动平台窗口和Start按钮按钮MATLAB 的启动平台窗口可以帮助用户方的启动平台窗口可以帮助用户方便地打开和调用便地打开和调用MATLAB的各种程序、函的各种程序、函数和帮助文件。数和帮助文件。MATLAB

19、主窗口左下角还有一个主窗口左下角还有一个Start按钮,按钮,单击该按钮会弹出一个菜单,选择其中的单击该按钮会弹出一个菜单,选择其中的命令可以执行命令可以执行MATLAB产品的各种工具,产品的各种工具,并且可以查阅并且可以查阅MATLAB包含的各种资源。包含的各种资源。 4.1.3 MATLAB帮助系统帮助系统4.1.3.1 帮助窗口帮助窗口进入帮助窗口可以通过以下进入帮助窗口可以通过以下3种方种方法:法:(1) 单击单击MATLAB主窗口工具栏中主窗口工具栏中的的Help按钮。按钮。(2) 在命令窗口中输入在命令窗口中输入helpwin、helpdesk或或doc。(3) 选择选择Help菜

20、单中的菜单中的“MATLAB Help”选项。选项。4.1.3.2 帮助命令帮助命令MATLAB帮助命令包括帮助命令包括help、lookfor以及以及模糊查询。模糊查询。1help命令命令在在MATLAB 7.4命令窗口中直接输入命令窗口中直接输入help命命令将会显示当前帮助系统中所包含的所有令将会显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。同项目,即搜索路径中所有的目录名称。同样,可以通过样,可以通过help加函数名来显示该函数的加函数名来显示该函数的帮助说明。帮助说明。2lookfor命令命令help命令只搜索出那些关键字完全匹配的结命令只搜索出那些关键字完全匹配的

21、结果,果,lookfor命令对搜索范围内的命令对搜索范围内的M文件进文件进行关键字搜索,条件比较宽松。行关键字搜索,条件比较宽松。lookfor命令只对命令只对M文件的第一行进行关键文件的第一行进行关键字搜索。若在字搜索。若在lookfor命令加上命令加上-all选项,则选项,则可对可对M文件进行全文搜索。文件进行全文搜索。3模糊查询模糊查询MATLAB 6.0以上的版本提供了一种类似模以上的版本提供了一种类似模糊查询的命令查询方法,用户只需要输入糊查询的命令查询方法,用户只需要输入命令的前几个字母,然后按命令的前几个字母,然后按Tab键,系统就键,系统就会列出所有以这几个字母开头的命令。会列

22、出所有以这几个字母开头的命令。4.1.3.3 演示系统演示系统在帮助窗口中选择演示系统在帮助窗口中选择演示系统(Demos)选项卡,选项卡,然后在其中选择相应的演示模块,或者在然后在其中选择相应的演示模块,或者在命令窗口输入命令窗口输入Demos,或者选择主窗口,或者选择主窗口Help菜单中的菜单中的Demos子菜单,打开演示系统。子菜单,打开演示系统。4.1.3.4 远程帮助系统远程帮助系统在在MathWorks公司的主页公司的主页(http:/)上可以上可以找到很多有用的信息,国内的一些找到很多有用的信息,国内的一些网站也有丰富的信息资源。网站也有丰富的信息资源。4.3 MATLAB符号计

23、算符号计算4.3.1 符号计算基础符号计算基础4.3.2 符号导数及其应用符号导数及其应用4.3.3 符号积分符号积分4.3.4 级数级数4.3.5 符号方程求解符号方程求解4.3.1 符号计算基础符号计算基础4.3.1.1 符号对象符号对象1. 建立符号变量和符号常数建立符号变量和符号常数(1)sym函数函数 sym函数用来建立单个符号量,例如,函数用来建立单个符号量,例如,a=sym(a)建立符号变量建立符号变量a,此后,用户可以在表达式中使用,此后,用户可以在表达式中使用变量变量a进行各种运算。进行各种运算。例例4.3.1 考察符号变量和数值变量的差别。考察符号变量和数值变量的差别。 在

24、在 MATLAB命令窗口,输入命令:命令窗口,输入命令: a=sym(a);b=sym(b);c=sym(c);d=sym(d); %定义定义4个符号变量个符号变量w=10;x=5;y=-8;z=11; %定义定义4个数值变量个数值变量A=a,b;c,d %建立符号矩阵建立符号矩阵AB=w,x;y,z %建立数值矩阵建立数值矩阵Bdet(A) %计算符号矩阵计算符号矩阵A的行列式的行列式det(B) %计算数值矩阵计算数值矩阵B的行列式的行列式例例4.3.2 比较符号常数与数值在代数运算时的差别。比较符号常数与数值在代数运算时的差别。在在 MATLAB命令窗口,输入命令:命令窗口,输入命令:p

25、i1=sym(pi);k1=sym(8);k2=sym(2);k3=sym(3); % 定定义符号变量义符号变量pi2=pi;r1=8;r2=2;r3=3; % 定义数值变量定义数值变量sin(pi1/3) % 计算符号表达式值计算符号表达式值 sin(pi2/3) % 计算数值表达式值计算数值表达式值sqrt(k1) % 计算符号表达式值计算符号表达式值sqrt(r1) % 计算数值表达式值计算数值表达式值sqrt(k3+sqrt(k2) % 计算符号表达式值计算符号表达式值sqrt(r3+sqrt(r2) % 计算数值表达式值计算数值表达式值(2)syms函数函数syms函数的一般调用格式

26、为:函数的一般调用格式为:syms var1 var2 varn 函数定义符号变量函数定义符号变量var1,var2,varn等。用这种格等。用这种格式定义符号变量时不要在变量名上加字符分界符式定义符号变量时不要在变量名上加字符分界符(),变量间用空格而不要用逗号分隔。,变量间用空格而不要用逗号分隔。2. 建立符号表达式建立符号表达式建立符号表达式有以下建立符号表达式有以下3种方法:种方法:(1)利用单引号来生成符号表达式。利用单引号来生成符号表达式。(2)用用sym函数建立符号表达式。函数建立符号表达式。 (3) 使用已经定义的符号变量组成符号表达式。使用已经定义的符号变量组成符号表达式。4

27、.3.1.2 基本的符号运算基本的符号运算1. 符号表达式的四则运算符号表达式的四则运算符号表达式的四则运算和其他表达式的运算并无不符号表达式的四则运算和其他表达式的运算并无不同,但要注意,其运算结果依然是一个符号表达式。同,但要注意,其运算结果依然是一个符号表达式。2符号表达式的提取分子和分母运算符号表达式的提取分子和分母运算如果符号表达式是一个有理分式或可以展开为有理如果符号表达式是一个有理分式或可以展开为有理分式,可利用分式,可利用numden函数来提取符号表达式中的分函数来提取符号表达式中的分子或分母。其一般调用格式为:子或分母。其一般调用格式为:n,d=numden(s)该函数提取符

28、号表达式该函数提取符号表达式s的分子和分母,分别将它们的分子和分母,分别将它们存放在存放在n与与d中。中。3.因式分解与展开因式分解与展开factor(S) 对对S分解因式,分解因式,S是符号表达式或是符号表达式或符号矩阵。符号矩阵。expand(S) 对对S进行展开,进行展开,S是符号表达式或是符号表达式或符号矩阵。符号矩阵。collect(S) 对对S合并同类项,合并同类项,S是符号表达式是符号表达式或符号矩阵。或符号矩阵。collect(S,v) 对对S按变量按变量v合并同类项,合并同类项,S是符是符号表达式或符号矩阵。号表达式或符号矩阵。4.表达式化简表达式化简MATLAB提供的对符号

29、表达式化简的函数有:提供的对符号表达式化简的函数有:simplify(S) 应用函数规则对应用函数规则对S进行化简。进行化简。simple(S) 调用调用MATLAB的其他函数对表达式进的其他函数对表达式进行综合化简,并显示化简过程。行综合化简,并显示化简过程。5符号表达式与数值表达式之间的转换符号表达式与数值表达式之间的转换利用函数利用函数sym可以将数值表达式变换成它的符可以将数值表达式变换成它的符号表达式。号表达式。函数函数numeric或或eval可以将符号表达式变换成可以将符号表达式变换成数值表达式。数值表达式。 4.3.1.3 符号表达式中变量的确定符号表达式中变量的确定MATLA

30、B中的符号可以表示符号变量和符号常中的符号可以表示符号变量和符号常数。数。findsym可以帮助用户查找一个符号表达式可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:中的的符号变量。该函数的调用格式为:findsym(S,n)函数返回符号表达式函数返回符号表达式S中的中的n个符号变量,若没有个符号变量,若没有指定指定n,则返回,则返回S中的全部符号变量。中的全部符号变量。在求函数的极限、导数和积分时,如果用户没有在求函数的极限、导数和积分时,如果用户没有明确指定自变量,明确指定自变量,MATLAB将按缺省原则确定将按缺省原则确定主变量并对其进行相应微积分运算。可用主变量并对其

31、进行相应微积分运算。可用findsym(S,1)查找系统的缺省变量,事实上,查找系统的缺省变量,事实上,MATLAB按离字符按离字符x最近原则确定缺省变量。最近原则确定缺省变量。4.3.2 符号导数及其应用符号导数及其应用4.3.2.1 函数的极限函数的极限limit函数的调用格式为:函数的调用格式为:limit(f,x,a)limit函数的另一种功能是求单边极限,其调用格式函数的另一种功能是求单边极限,其调用格式为:为:limit(f,x,a,right) 或或 limit(f,x,a,left)例例4.3.3求极限。求极限。在在MATLAB命令窗口,输入命令:命令窗口,输入命令:syms

32、a m x;f=(x(1/m)-a(1/m)/(x-a);limit(f,x,a) %求极限求极限(1)f=(sin(a+x)-sin(a-x)/x;limit(f) %求极限求极限(2)limit(f,inf) %求求f函数在函数在x(包括包括+和和-)处的极限处的极限limit(f,x,inf,left) %求极限求极限(3)f=(sqrt(x)-sqrt(a)-sqrt(x-a)/sqrt(x*x-a*a);limit(f,x,a,right) %求极限求极限(4)4.3.2.2 符号函数求导及其应用符号函数求导及其应用MATLAB中的求导的函数为:中的求导的函数为:diff(f,x,n

33、)diff函数求函数函数求函数f对变量对变量x的的n阶导数。参数阶导数。参数x的用法同的用法同求极限函数求极限函数limit,可以缺省,缺省值与,可以缺省,缺省值与limit相同,相同,n的缺省值是的缺省值是1。 例例4.3.4 求函数的导数。求函数的导数。命令如下:命令如下:syms a b t x y z;f=sqrt(1+exp(x);diff(f) %求求(1)。未指定求导变量和阶数,按缺省规则处理。未指定求导变量和阶数,按缺省规则处理f=x*cos(x);diff(f,x,2) %求求(2)。求。求f对对x的二阶导数的二阶导数diff(f,x,3) %求求(2)。求。求f对对x的三阶

34、导数的三阶导数f1=a*cos(t);f2=b*sin(t);diff(f2)/diff(f1) %求求(3)。按参数方程求导公式求。按参数方程求导公式求f对对t的导数的导数(diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/(diff(f1)3 %求求(3)。求。求f对对t的二的二阶导数阶导数f=x*exp(y)/y2;diff(f,x) %求求(4)。f对对x的偏导数的偏导数diff(f,y) %求求(4)。z对对y的偏导数的偏导数f=x2+y2+z2-a2;zx=-diff(f,x)/diff(f,z) %求求(5)。按隐函数求导公式求。按隐函数求导公式求z

35、对对x的偏导数的偏导数zy=-diff(f,y)/diff(f,z) %求求(5)。按隐函数求导公式求。按隐函数求导公式求z对对y的偏导数的偏导数例例4.3.5 在曲线在曲线y=x3+3x-2上哪一点的切线与直上哪一点的切线与直线线y=4x-1平行。平行。命令如下:命令如下:x=sym(x); y=x3+3*x-2; %定义曲线函数定义曲线函数f=diff(y); %对曲线求导数对曲线求导数g=f-4;solve(g) %求方程求方程f-4=0的根,即求曲线何处的导数为的根,即求曲线何处的导数为41/3*3(1/2) -1/3*3(1/2)4.3.3 符号积分符号积分4.3.3.1 不定积分不

36、定积分在在MATLAB中,求不定积分的函数是中,求不定积分的函数是int,其调用,其调用格式为:格式为:int(f,x)int函数求函数函数求函数f对变量对变量x的不定积分。参数的不定积分。参数x可以缺可以缺省,缺省原则与省,缺省原则与diff函数相同。函数相同。例例4.3.6 求不定积分。求不定积分。命令如下:命令如下:x=sym(x);f=(3-x2)3;int(f) %求不定积分求不定积分(1)f=sqrt(x3+x4);int(f) %求不定积分求不定积分(2)g=simple(ans) %调用调用simple函数对结果化简函数对结果化简4.3.3.2 符号函数的定积分符号函数的定积分

37、定积分在实际工作中有广泛的应用。在定积分在实际工作中有广泛的应用。在MATLAB中,定积分的计算使用函数:中,定积分的计算使用函数:int(f,x,a,b)例例4.3.7 求定积分。求定积分。命令如下:命令如下:x=sym(x);t=sym(t);int(abs(1-x),1,2) %求定积分求定积分(1)f=1/(1+x2);int(f,-inf,inf) %求定积分求定积分(2)int(4*t*x,x,2,sin(t) %求定积分求定积分(3)f=x3/(x-1)100;I=int(f,2,3) %用符号积分的方法求定积分用符号积分的方法求定积分(4)double(I) %将上述符号结果转

38、换为数值将上述符号结果转换为数值4.3.3.3 积分变换积分变换1. 傅立叶傅立叶(Fourier)变换变换在在MATLAB中,进行傅立叶变换的函数是:中,进行傅立叶变换的函数是:fourier(fx,x,t) 求函数求函数f(x)的傅立叶像函数的傅立叶像函数F(t)。ifourier(Fw,t,x) 求傅立叶像函数求傅立叶像函数F(t)的原函数的原函数f(x)。例例4.3.8 求函数的傅立叶变换及其逆变换。求函数的傅立叶变换及其逆变换。命令如下:命令如下:syms x t;y=abs(x);Ft=fourier(y,x,t) %求求y的傅立叶变换的傅立叶变换fx=ifourier(Ft,t,

39、x) %求求Ft的傅立叶逆变换的傅立叶逆变换2. 拉普拉斯拉普拉斯(Laplace)变换变换在在MATLAB中,进行拉普拉斯变换的函数是:中,进行拉普拉斯变换的函数是:laplace(fx,x,t) 求函数求函数f(x)的拉普拉斯像函数的拉普拉斯像函数F(t)。ilaplace(Fw,t,x) 求拉普拉斯像函数求拉普拉斯像函数F(t)的原函数的原函数f(x)。例例4.3.9 计算计算y=x2的拉普拉斯变换及其逆变换的拉普拉斯变换及其逆变换.命令如下:命令如下:x=sym(x);y=x2;Ft=laplace(y,x,t) %对函数对函数y进行拉普拉斯变换进行拉普拉斯变换fx=ilaplace(

40、Ft,t,x) %对函数对函数Ft进行拉普拉斯逆变换进行拉普拉斯逆变换3. Z变换变换对数列对数列f(n)进行进行z变换的变换的MATLAB函数是:函数是:ztrans(fn,n,z) 求求fn的的Z变换像函数变换像函数F(z)iztrans(Fz,z,n) 求求Fz的的z变换原函数变换原函数f(n)例例4.3.10求数列求数列 fn=e-n的的Z变换及其逆变换。变换及其逆变换。命令如下:命令如下:syms n zfn=exp(-n);Fz=ztrans(fn,n,z) %求求fn的的Z变换变换f=iztrans(Fz,z,n) %求求Fz的逆的逆Z变换变换4.3.4 级数级数4.3.4.1

41、级数的符号求和级数的符号求和级数符号求和函数级数符号求和函数symsum,调用格式为:,调用格式为:symsum(a,n,n0,nn)例例4.3.11 求级数之和。求级数之和。命令如下:命令如下:n=sym(n);s1=symsum(1/n2,n,1,inf) %求求s1s2=symsum(-1)(n+1)/n,1,inf) %求求s2。未指定求和变量,缺省为。未指定求和变量,缺省为ns3=symsum(n*xn,n,1,inf) %求求s3。此处的求和变量。此处的求和变量n不能省略。不能省略。s4=symsum(n2,1,100) %求求s4。计算有限级数的和。计算有限级数的和 4.3.4.

42、2 函数的泰勒级数函数的泰勒级数MATLAB中提供了将函数展开为幂级数的函数中提供了将函数展开为幂级数的函数taylor,其调用格式为:,其调用格式为:taylor(f,v,n,a)例例4.3.12求函数在指定点的泰勒展开式。求函数在指定点的泰勒展开式。命令如下:命令如下:x=sym(x);f1=(1+x+x2)/(1-x+x2);f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/3);taylor(f1,x,5) %求求(1)。展开到。展开到x的的4次幂时应选择次幂时应选择n=5taylor(f2,6) %求求(2)。4.3.5符号方程求解符号方程求解4.3.5.1 符号代数方程

43、求解符号代数方程求解代数方程是指未涉及微积分运算的方程,相对比较简单。在代数方程是指未涉及微积分运算的方程,相对比较简单。在MATLAB中,求解用符号表达式表示的代数方程可由函数中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:实现,其调用格式为:solve(eq):求解符号表达式表示的代数方程:求解符号表达式表示的代数方程eq,求解变量为,求解变量为默认变量。当方程右端为默认变量。当方程右端为0时,方程时,方程eq中可以不包含右端项中可以不包含右端项和等号,而仅列出方程左端的表达式。和等号,而仅列出方程左端的表达式。solve(eq,v):求解符号表达式表示的代数方程:

44、求解符号表达式表示的代数方程eq,求解变量,求解变量为为v。solve(eq1,eq2,eqn,v1,v2,vn):求解符号表达式:求解符号表达式eq1,eq2,eqn组成的代数方程组,求解变量分别组成的代数方程组,求解变量分别v1,v2,vn。若不指定求解变量,由默认规则确定。若不指定求解变量,由默认规则确定。4.3.5.2 符号常微分方程求解符号常微分方程求解MATLAB的符号运算工具箱中提供了功能强大的求解常微的符号运算工具箱中提供了功能强大的求解常微分方程的函数分方程的函数dsolve。该函数的调用格式为:。该函数的调用格式为:dsolve(eqn1,condition,var)该函数

45、求解微分方程该函数求解微分方程eqn1在初值条件在初值条件condition下的特解。参下的特解。参数数var描述方程中的自变量符号,省略时按缺省原则处理,描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件若没有给出初值条件condition,则求方程的通解。,则求方程的通解。dsolve在求微分方程组时的调用格式为:在求微分方程组时的调用格式为:dsolve(eqn1,eqn2,eqnN,condition1,conditionN,var1,varN)函数求解微分方程组函数求解微分方程组eqn1、eqnN在初值条件在初值条件conditoion1、conditionN下的解,若

46、不给出初值条件,下的解,若不给出初值条件,则求方程组的通解,则求方程组的通解,var1、varN给出求解变量。给出求解变量。例例4.3.13 求微分方程的通解。求微分方程的通解。命令如下:命令如下:y=dsolve(Dy-(x2+y2)/x2/2,x) %解解(1)。方程的右端为。方程的右端为0时可以不写时可以不写y=dsolve(Dy*x2+2*x*y-exp(x),x) %解解(2)y=dsolve(Dy-x2/(1+y2),y(2)=1,x); %解解(3)x,y=dsolve(Dx=4*x-2*y,Dy=2*x-y,t) %解方程组解方程组(4) x,y=dsolve(D2x-y,D2

47、y+x,t); %解方程组解方程组(5)4.2.1 变量及其赋值变量及其赋值 4.2.2 运算符与数学表达式运算符与数学表达式 4.2.3 控制流控制流 4.2.4 基本绘图方法基本绘图方法4.2.5 M文件及程序调试文件及程序调试 4.2.1 变量及其赋值变量及其赋值 4.2.1.1 4.2.1.1 标识符与数标识符与数 标识符是标志变量名、常量名、函数名和文件名的字符串的总称。在MTLAB中,变量和常量的标识符最长允许31个字符。字符包括全部的英文字母(大小写52个)、阿拉伯数字和下划线等符号,标识符中第一个字符必须是英文字母。4.2.1.2 4.2.1.2 矩阵及其元素的赋值矩阵及其元素

48、的赋值 赋值就是把数赋予代表常量或变量的标识符。在MATLAB中,变量都代表矩阵。列矢量可被当作只有一列的矩阵;行矢量也可被当作只有一个行的矩阵;标量应看作11阶的矩阵。赋值语句的一般形式为: 变量表达式(或数)变量表达式(或数)1赋值要求赋值要求在输入矩阵时,应遵循以下规则:整个矩阵的值应放在方括号中;同一行中各元素之间以逗号“,”或空格分开;不同行的元素以分号“;”隔开。2变量的元素的标注变量的元素的标注 在MATLAB中,变量的元素(即矩阵元)用圆括号“()”中的数字(也称为下标)来注明,一维矩阵(也称数组)中的元素用一个下标表示,二维矩阵由两个下标数构成,以逗号分开,对三维矩阵则由三个

49、下标数构成。 3赋值技巧赋值技巧(1) 利用冒号“:”给全行的元素赋值(2) 利用行、列标注构成新的矩阵4特殊矩阵和数组特殊矩阵和数组(1)单位矩阵函数单位矩阵函数eye()函数功能:产生对主角线元素为1,其它元素为0的单位矩阵。eye()的调用格式如下:A=eye(n) 返回一个nn阶单位矩阵;A=eye(m , n) 返回一个mn阶单位矩阵,或用A=eye(m , n);(2) zeros函数、函数、ones函数、函数、rand以及以及randn函数函数A=zeros(n) 返回一个nn阶零矩阵;A=zeros(m , n) 返回一个mn阶零矩阵;(3)linspace函数和函数和logs

50、pace函数函数linspace函数的调用格式如下:y=linspace(a,b) 产生一个行矢量y,该矢量把a和b间的数等分100份而得到。y=linspace(a,b,n) 产生一个行矢量y,该矢量把a和b间的数等分n份而得到。5MATLAB内部特殊变量和常数内部特殊变量和常数变量变量ans:临时变量,通常指示当前的答案。常常数数eps:表示浮点相对精度;其值是从1.0到下一个最大浮点数之间的差值。变量值作为一些MATLAB函数计算的相对浮点精度,按IEEE标准,esp= 2-52近似为2.2204e-016。常常数数realmax:表示最大正浮点数;任何大于该值的运算都溢出。在具有IEE

51、E标准浮点格式的机器上,realmax略小于21024 ,近似为1.7977e+308。常数常数realmin:表示最小正浮点数;任何小于该值的运算都溢出。在具有IEEE标准浮点格式的机器上,realmin略小于2-1024 ,近似为2.2251e-308。 常常数数pi:表示圆周率 =3.1415926535897.。表达式4*atan(1)和imag(log(-1)产生相同的值。常常数数Inf:代表正无穷大,一般被0除或溢出则产生无穷大结果。如2/0,210000均产生结果:Inf;而log(0)产生结果:-Inf。虚数单位虚数单位i,j:表示复数虚部单位,相当于 。NaN:表示非数值。如

52、当Inf-Inf,Inf/Inf, 0*Inf,0/0均产生该结果。6复数的赋值方式复数的赋值方式 MATLAB的每一个元素都可以是复数,实数是复数的特例。复数的虚数部分用i或j表示。对复数矩阵有两种赋值方法: (1)可将矩阵元逐个赋予复数可将矩阵元逐个赋予复数 (2)将矩阵的实部和虚部分别赋值:将矩阵的实部和虚部分别赋值:7变量检查变量检查在程序调试或变量的赋值过程,往往需要检查工作空间中的变量、变量的阶数以及变量赋值内容。在检查变量及其阶数等内容时,既可用工作空间窗口,也可在命令窗口使用who或whos命令来完成检查。当查看某变量的赋值情况,可在命令窗口直接键入该变量名回车即可。 4.2.

53、2 运算符与复数运算 算术运算符:算术运算符:进行数值计算。 关系运算符:关系运算符:比较两个操作数的大小。 逻辑运算符:逻辑运算符:进行逻辑运算。 4.2.2.1 4.2.2.1 算术运算符算术运算符 (1)矩阵加减法矩阵加减法“”:AB功能:两矩阵对应元素相加减。因此,A和B两矩阵必须有相同的大小,或其中之一 为标量,标量可以与任意大小的矩阵相加。(2)矩阵相乘矩阵相乘“*”:A*B 功能:C =A*B为两矩阵线性代数的乘积,即(3) 矩阵元素相乘矩阵元素相乘“.*”:A.*B功能:矩阵A和B的对应元素相乘;因此,A和B必须大小相同,或其中之一为标量。(4)矩阵右除矩阵右除“B/A”与左除

54、与左除“AB”如果A为一非奇异矩阵,则B/A与AB可通过A的逆矩阵与B矩阵得到:B/A=B*inv(A); AB=inv(A)*B。(5)矩阵元素右除矩阵元素右除“A./B”与左除与左除“A.B” 矩阵元素右除“A./B”表示矩阵元素A(i,j)/B(i,j);矩阵元素左除“A.B” 表示矩阵B(i,j)/A(i,j),因此,A和B必须大小相同,或者其中之一为标量。(6)矩阵幂矩阵幂“”:Xp 如果p为标量,表示X的p次幂;如果X为标量,而p为矩阵,Xp用特征值和特征向量表示X的矩阵p次幂。注意X和p不能同时为矩阵,但必须是方阵。(7)矩阵元素幂矩阵元素幂“.”:A.B A.B表示矩阵元素A(

55、i,j)的B(i,j)次幂,A与B必须大小相同,或者其中之一为标量。(8) 矩阵转置矩阵转置“ ”A表示矩阵A的线性代数转置。对于复矩阵,表示复共轭转置。(9) 非共轭转置非共轭转置“ . ”A.表示非共轭转置;对于复矩阵,不包括共轭。(10)冒号操作符冒号操作符“:” 冒号是一个非常有用的操作符;可以产生向量、数组下标以及for循环。关系比较结果只有两种可能,即1或0。1表示关系式为“真”,即关系式正确;0表示该关系为“假”,即它不成立。 4.2.2.3 4.2.2.3 逻辑操作符逻辑操作符 通常逻辑变量只能取0(假)和1(真)两个值。逻辑量的基本运算除“与(&)”、“或(|)”和“非()”

56、外,有时也包括“异或(xor)”,不过“异或”可以用3种基本运算组合而成。两个逻辑量经过这4种逻辑运算后的输出仍然是逻辑量。4.2.2.2 4.2.2.2 关系操作符关系操作符 关系运算是指两个元素之间数值的比较。MATLAB所提供的关系操作符如表所示。4.2.2.4 4.2.2.4 关系与逻辑函数关系与逻辑函数其他关系与逻辑函数 测试函数 4.2.2.54.2.2.5复数运算复数运算 1MATLAB中所有的运算符和函数都对复数有效。 2复数的共轭可利用函数“conj”来完成 4.2.3 控制流控制流 4.2.3.1 If4.2.3.1 If语句语句 if语句称为条件执行语句。其关键字包括if

57、、else、elseif和end。 格式之一格式之一: if 表达式表达式 语句组语句组A end其工作流程如图所示。注注意意:语句中的end是绝不可少的,没有它,在逻辑表达式为0时,就找不到继续执行程序的入口。 格式之二:格式之二: if 表达式表达式 语句组语句组A else 语句组语句组B end其工作流程如图所示。 格式之三:格式之三: if 表达式表达式1 语句组语句组A elseif 表达式表达式2 语句组语句组B else 语句组语句组C end工作流程原理如图所示。switch 选择表达式选择表达式case 情况表达式情况表达式1语句组语句组1case 情况表达式情况表达式2语

58、句组语句组2 otherwise 语句组语句组nend4.2.3.2 Switch语句 switch语句,也是条件选择结构。其关键字包括switch、case、otherwise和end。它主要用于有选择性的程序设计,实现程序的多分支选择。其调格式为:4.2.3.3 While语句while语句为条件循环语句,循环执行一组语句,执行次数不确定,而是决定于一些逻辑条件。其关键字包括while、end、break等。基本调用格式: while 表达式表达式 语句语句A end4.2.3.4 for4.2.3.4 for语句语句for语句也是循环语句,但与while语句不同的是,它循环执行一组语句的

59、执行次数是确定。其关键字包括for、end、break等。调用的基本格式如下: for index=初值:增量:终值 语句组A end功能:把语句组A(亦称为循环体)反复执行N次。循环次数N为: N1+(终值-初值)/增量在每次执行时程序中的index的值按“增量”增加。注意:注意:(1)For循环不能用For循环内重新赋值循环变量n来终止。(2)在For循环内接受任何有效的MATLAB数组。(3) for循环可按需要嵌套。与其它的编程语言类似,for语句可以嵌套使用。(4) 当有一个等效的数组方法来解给定的问题时,应避免用For循环。(5) 为了提高处理的速度,在For循环(While循环)

60、被执行之前,应预先分配数组。4.2.4 基本绘图方法基本绘图方法4.2.4.1 图形窗口的控制 在MATLAB中,图形的绘制必须在图形窗中进行。通常,只要执行了任意一种绘图命令,图形窗口(Figure)就会自动产生。此时,所生成的图形窗口称为当前图形窗,绘图命令所绘制的图形将在当前图形窗中完成。1figure命令命令格式:格式:figure 或或 figure(N) 功能:创建一个图形窗口。使编号为N的图形窗口成为当前图形窗口,即图形窗口处于可视状态。如果窗口N不存在,则将创建一个句柄为N的图形窗口。2clf命令命令:清除当前图形窗口中的所有的内容。格式:格式:clf3close命令命令:关闭

61、图形窗口格式一:格式一:close 或或 close (N) 关闭当前图形窗口或指定编号关闭当前图形窗口或指定编号N的图形窗口。的图形窗口。格式二:格式二:close all 关闭所有图形窗口。关闭所有图形窗口。4hold命令命令格式:格式:hold on (off)功能:保持当前图形窗的内容,或取消hold on的命令功能,恢复系统默认状态。通常,MATLAB在执行某一绘图命令时,系统会自动将当前图形窗口中的内容清除,然后再绘制。hold命令的功能就是保持当前图形窗的内容,使后续绘制函数仍可该图形窗口中完成绘图,实现一张图中绘制多个图形。若再键入hold命令就解除冻结。这种拉线开关式的控制有

62、时会造成混乱,可以用hold on和hold off命令来得到确定的状态。5subplot命令命令功能:将一个图形窗口划分为多个子图形窗口格式:格式:subplot(m,n,p) 或或 subplot(nmp)将图形窗口分成nm个子图形窗口,并选择第p个子图形窗口作为当前图形窗口,供绘制函数作图使用。1. 二维图形绘制命令二维图形绘制命令plot MATALB为用户提供了一个基本的二维曲线绘图函数plot。格式一:格式一: plot(y)-输入一个数组的情况输入一个数组的情况功能:如果y是一个数组,函数plot(y)给出线性直角坐标的二维图,该二维图以y中元素的下标作为X坐标,y中元素的值作为

63、Y坐标,一一对应画在XY坐标平面图上,而且将各点以直线相连。若y的元素是复数,则plot(y)等价于plot(real(y),imag(y),其中real(y)是y的实部,imag(y)是y的虚部。若y是矩阵,就按列绘制曲线,曲线的条数等于y矩阵的列数。格式二:格式二: plot(x,y)-输入两个数组的情况输入两个数组的情况功能:绘出以x元素为横坐标、y元素为纵坐标的曲线。数组x和y必须具有相同长度。4.2.4.2 4.2.4.2 二维图形的绘制二维图形的绘制 2线型、标记符号及颜色的设置线型、标记符号及颜色的设置为了设定线型、颜色以及标记符号,用户只需在plot的输入变量组后面,加一个引号

64、,在引号内部放入线型、颜色以及标记符号的标志符即可完成。格式一:格式一: plot(y,字符串字符串) 格式二:格式二:plot(x, y,字符串字符串)3图形的标注、网格以及图例说明图形的标注、网格以及图例说明(1) 添加图形标题命令添加图形标题命令title 格式:格式:title(string)功能:在当前坐标系的顶部加一个文本串string,作为该图形的标题。(2) 添加坐标轴标志函数添加坐标轴标志函数xlabe、 ylabel、zlabel格式:格式:xlabel(text) 或或 ylabel(text) 或或zlabel(text)功能:给当前X轴或Y轴或Z轴标注文本标注。(3)

65、设置网格线命令设置网格线命令grid格式:格式:grid on(off)功能:对当前坐标图加上网格线或撤消网格线。若直接调用grid命令即可设置或撤消网格线。(4)图形标注函数图形标注函数legend格式:格式:legend( string1, string2, string3, .)功能:在当前图中添加图例。格式:格式:Legend off功能:撤消当前坐标图上的图例。4坐标轴的形式与刻度坐标轴的形式与刻度(1)设置坐标轴函数设置坐标轴函数axis格式一:格式一:axis(xmin,xmax,ymin,ymax)功能:对当前二维图形对象的X轴和Y轴进行标定。格式二:格式二:axis(xmin

66、 xmax ymin ymax zmin zmax)功能:对当前三维图形对象的X、Y和Z轴进行标定。格式三:格式三:axis off(on)功能:使坐标轴、刻度、标注和说明变为不显示(显示)状态。格式四:格式四:axis(manual)功能:将冻结当前的坐标比例,以后的图形均以此比例绘出。(2)对数坐标轴命令对数坐标轴命令semilogx、 semilogy、loglog格式:格式:semilogx(.) 功能:在X轴上采用常用对数来进行标定。该命令的调用格式与plot函数的调用格式相同。格式:格式:semilogy(.) 功能:在Y轴上采用常用对数来进行标定。该命令的调用格式与plot函数的

67、调用格式相同。(3)极坐标函数极坐标函数polar格式:格式:polar(theta, rho) 功能:绘制极角为theta, 极径为rho的极坐标图形。格式:格式:polar(theta,rho,s)功能:绘制由S指定样式、颜色的极坐标图形。(4)图形边框控制命令图形边框控制命令box格式:格式:box on(off)对所绘制的图形添加图形边框(默认状态),或关闭图形边框。5.二维图形其它的相关函数命令二维图形其它的相关函数命令(1)获取函数获取函数ginput格式:格式:X,Y=ginput(N)功能:从当前的坐标图上获得N个点的数据,并返回这N个点的相应X、Y坐标向量。指针可以由鼠标或键

68、盘上的除回车以外的任意键来进行输入,回车键是用来在N个数据点输完以前强行停止输入的。(2)图形填充函数图形填充函数fill格式:格式:fill( X, Y, C)功能:填充二维多边形,多边形由向量X,Y来定义,填充的色由C来确定。多边形的顶点是由一组X,Y元素来确定,必要时应组成一个闭合的曲线。C可以从r,g,b,c,m,k选出一种色填充也可以是一个GRB向量r,g,b,用它来确定所填充的色。4.2.4.3 4.2.4.3 多条曲线的绘制多条曲线的绘制 在MATALB中,通常,在一张图上绘制多条曲线有以下4种方法。1使用使用plot(t, y1 ,y2, )命令命令该语句中t是向量,y=y1,

69、y2是矩阵,若t是列向量,则y的列(行)长应与t长度相同。Y的列(行)数就是曲线的条数。2. 使用使用hold命令命令在画完前一张图形后,用hold命令保持住该图形窗口中的内容,再画下一条曲线。3. 利用利用plot(x1, y1, x2, y2, ., xn, yn)语句语句在该语句中,x1, y1, x2, y2, ., xn, yn等分别为向量对。每一对X-Y向量可以绘出一条图线,这样就可以在一张图上画出多图线,每一组向量对的长度可以不同,在其后面都可加线型标志符。4使用使用plotyy命令:命令: plotyy(x1, y1, x2, y2)它设有两个坐标,左纵坐标对应y1,右纵坐标对

70、应y2,以便绘制两个y尺度不同的变量,但x仍用同一个比例尺。 4.2.4.4 4.2.4.4 复数的绘图复数的绘图 当plot(z)中的z为复数变量时(即含有非零的虚部),MATLAB把复数的实部作为横坐标、虚部作为纵坐标绘图,即相当于plot(real(z),imag(z)。 4.2.4.5 4.2.4.5 三维曲线和曲面三维曲线和曲面 1空间曲线绘制函数空间曲线绘制函数plot3( )格式一:格式一:plot3(x,y,z)功能:若x、y、z为相同长度的向量,则根据向量x、y、z绘制空间三维曲线。如果x、y、z为同阶矩阵,则绘制对应列的多条曲线。格式二:格式二:plot3(x, y, z,

71、 s)功能:按字符串s设置的线型、颜色、标记符号绘制三维空间曲线。字符串s的设置与plot命令的设置相同。2三维网线图函数三维网线图函数mesh、meshc和和meshz MATALB提供的函数mesh用来绘制三维网线图。格式一:格式一:mesh(X,Y,Z)功能:根据矩阵X、Y和Z绘制彩色的空间三维网线图。X、Y和Z中对应的元素为三维空间上的点,点与点之间用线连接。其中网线的颜色随着网点高度的改变而改变。格式二:格式二:mesh(x,y,Z)功能:n维向量x、m维向量y和mn矩阵Z绘制网线图,节点的坐标为(x(j),y(i),Z(i,j),网线的颜色随着网点高度的改变而改变。x=-10:0.

72、05:10;y=-8:0.05:8;X,Y=meshgrid(x,y);Z=sin(sqrt(X.2+Y.2)./sqrt(X.2+Y.2);mesh(X,Y,Z)3三维曲面图函数三维曲面图函数surf及及surfc格式一:格式一:surf(X, Y, Z, C) 功能:绘制由四个矩阵所指定的带色参数的网状表面图。视角是由view所指定。轴的刻度决定于X,Y及Z的范围,或当前对轴的设定;颜色范围由C指定。格式二:格式二:surf(X,Y,Z)功能:将C设为与Z相等,则颜色与网的高度成正比。4视图函数视图函数view格式一:格式一:view(az, el) 或或 view(az,el )功能:设

73、置观察者观察三维图形的视角。az是方位角或者是水平旋转角度,el是仰角。格式二:格式二:view(2) 或或 view(3)功能:设置观察三维图形视角的默认值(az=0,el=90; az=-37,el=30)格式三:格式三:az, el=view功能:返回当前的方位和视角4.2.5 M文件及程序调试与变量属性文件及程序调试与变量属性M文文件件:由MATLAB命令语句构成的程序文件称作M文件,它将m作为文件的扩展名。可以直接阅读并用任何文本编辑器来建立这种文件。M文件可分为两种文件可分为两种:主程序和子程序。 主程序主程序 (也称主程序文件): 一般是由用户为解决特定的问题而编制的程序。 子子

74、程程序序 (称为函数文件):它必须由其它M文件来调用。函数文件往往具有一定的通用性,并且可以进行递归调用。 (1)有关程序的功能、使用方法等内容的注释。主程序前面的若干行通常是程序的注释,每行以“”开始。(2)程序的主体。(3)整个程序应按MATLAB标识符的要求起文件名,并加上后缀m。对主程序文件的运行方式通常有两种:对主程序文件的运行方式通常有两种:在在MATLAB的的命命令令窗窗口口中中运运行行:在MATLAB的命令窗中键入此程序的文件名后,系统就开始执行文件中的程序;在在编编辑辑窗窗口口中中运运行行:通过编辑窗口打开所要运行的文件,然后再运行。主程序文件中的语句可以对MATLAB工作空

75、间中的所有数据进行运算操作。1.M文件的结构主程序文件的格式特征如下:2函数文件结构函数文件结构函数文件是用来定义子程序的。它与主程序文件的主要区别有三点:(1)由function起头,后跟的函数名必须与文件名相同;(2)有输入输出变元(变量),可进行变量传递;(3)除非用global声明,程序中的变量均为局部变量,不保存在工作空间中。通常,函数文件由五部分构成:函数定义行;H1行;函数帮助文本;函数体;注释。函数定义命令函数定义命令function( )格式:格式: function output1,output2,=functionname(input1,input2,.) 功能:定义函数

76、名为functionname的函数(或子程序),该函数的输出变量为output1,output2,,输入变量为 (input1,input2,.)。例如:例如:function y=mean(x,dim)function为函数定义的关键字,mean为函数名,y为输出变量,x和dim为输入变量。注注意意:当函数具有多个输出变量时,则以方括号括起;当函数具有多个输入变量时,则直接用圆括号括起。例如:functionx,y,zsphere(theta,phi,rho)。当函数不含输出变量时,则直接略去输出部分或采用空方括号表示。4.4 SIMULINK动态仿真集成环境动态仿真集成环境4.4.1 Si

77、mulink操作基础操作基础4.4.2 系统仿真模型系统仿真模型4.4.3 系统的仿真系统的仿真4.4.1 Simulink操作基础操作基础4.4.1.1 Simulink简介简介 Simulink是是MATLAB的重要组成部分,提供建立系统模的重要组成部分,提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能。进行仿真、设置不同的输出方式来观察仿真结果等功能。4.4.1.2 Simulink的启动与退出的启动与退出 1Simulink的启动的启动在在MATLAB的命令窗口输入的命令窗口输

78、入simulink或单击或单击MATLAB主窗口主窗口工具栏上的工具栏上的Simulink命令按钮即可启动命令按钮即可启动Simulink。Simulink启动后会显示启动后会显示Simulink模块库浏览器模块库浏览器(Simulink Library Browser)窗口。窗口。在在MATLAB主窗口主窗口File菜单中选择菜单中选择New菜单项下的菜单项下的Model命命令,在出现令,在出现Simulink模块库浏览器的同时,还会出现一个名模块库浏览器的同时,还会出现一个名字为字为untitled的模型编辑窗口。在启动的模型编辑窗口。在启动Simulink模块库浏览器模块库浏览器后再单击

79、其工具栏中的后再单击其工具栏中的Create a new model命令按钮,也会命令按钮,也会弹弹出模型编辑窗口。利用模型编辑窗口,可以通过鼠标的拖放出模型编辑窗口。利用模型编辑窗口,可以通过鼠标的拖放操作创建一个模型。操作创建一个模型。模型创建完成后,从模型编辑窗口的模型创建完成后,从模型编辑窗口的File菜单项中选择菜单项中选择Save或或Save As命令,可以将模型以模型文件的格式命令,可以将模型以模型文件的格式(扩展名扩展名为为.mdl)存入磁盘。存入磁盘。如果要对一个已经存在的模型文件进行编辑修改,需要打开如果要对一个已经存在的模型文件进行编辑修改,需要打开该模型文件,其方法是,

80、在该模型文件,其方法是,在MATLAB命令窗口直接输入模型命令窗口直接输入模型文件名文件名(不要加扩展名不要加扩展名.mdl)。在模块库浏览器窗口或模型编。在模块库浏览器窗口或模型编辑窗口的辑窗口的File菜单中选择菜单中选择Open命令,然后选择或输入欲编辑命令,然后选择或输入欲编辑模型的名字,也能打开已经存在的模型文件。另外,单击模模型的名字,也能打开已经存在的模型文件。另外,单击模块库浏览器窗口工具栏上的块库浏览器窗口工具栏上的Open a model命令按钮或模型编命令按钮或模型编辑窗口工具栏上的辑窗口工具栏上的Open model命令按钮,也能打开已经存在命令按钮,也能打开已经存在的

81、模型文件。的模型文件。2Simulink的退出的退出为了退出为了退出Simulink,只要关闭所有模型编辑窗口和,只要关闭所有模型编辑窗口和Simulink模块库浏览器窗口即可。模块库浏览器窗口即可。4.4.2 系统仿真模型系统仿真模型4.4.2.1 Simulink的基本模块的基本模块Simulink的模块库提供了大量模块。单击模块库浏览器中的模块库提供了大量模块。单击模块库浏览器中Simulink前面的前面的“+”号,将看到号,将看到Simulink模块库中包含的子模块库中包含的子模模块库,单击所需要的子模块库,在右边的窗口中将看到相应块库,单击所需要的子模块库,在右边的窗口中将看到相应的

82、基本模块,选择所需基本模块,可用鼠标将其拖到模型编的基本模块,选择所需基本模块,可用鼠标将其拖到模型编辑窗口。同样,在模块库浏览器左侧的辑窗口。同样,在模块库浏览器左侧的Simulink栏上单击鼠栏上单击鼠标右键,在弹出的快捷菜单中单击标右键,在弹出的快捷菜单中单击Open the Simulink Libray 命令,将打开命令,将打开Simulink基本模块库窗口。单击其中的基本模块库窗口。单击其中的子模块库图标,打开子模块库,找到仿真所需要的基本模块。子模块库图标,打开子模块库,找到仿真所需要的基本模块。4.4.2.2 模块的编辑模块的编辑1添加模块添加模块2选取模块选取模块3复制与删除

83、模块复制与删除模块4模块外形的调整模块外形的调整 5模块名的处理模块名的处理4.4.2.3 模块的连接模块的连接1连接两个模块连接两个模块2模块间连线的调整模块间连线的调整3连线的分支连线的分支4标注连线标注连线5删除连线删除连线4.4.2.4 模块的参数和属性设置模块的参数和属性设置1模块的参数设置模块的参数设置Simulink中几乎所有模块的参数都允许用户进行设置,只要中几乎所有模块的参数都允许用户进行设置,只要双击要设置的模块或在模块上按鼠标右键并在弹出的快捷菜双击要设置的模块或在模块上按鼠标右键并在弹出的快捷菜单中选择相应模块的参数设置命令就会弹出模块参数对话框。单中选择相应模块的参数

84、设置命令就会弹出模块参数对话框。该对话框分为两部分,上面一部分是模块功能说明,下面一该对话框分为两部分,上面一部分是模块功能说明,下面一部分用来进行模块参数设置。部分用来进行模块参数设置。同样,先选择要设置的模块,再在模型编辑窗口同样,先选择要设置的模块,再在模型编辑窗口Edit菜单下菜单下选择相应模块的参数设置命令也可以打开模块参数对话框。选择相应模块的参数设置命令也可以打开模块参数对话框。2模块的属性设置模块的属性设置选定要设置属性的模块,然后在模块上按鼠标右键并在弹出选定要设置属性的模块,然后在模块上按鼠标右键并在弹出的快捷菜单中选择的快捷菜单中选择Block properties,或先

85、选择要设置的模,或先选择要设置的模块,再在模型编辑窗口的块,再在模型编辑窗口的Edit菜单下选择菜单下选择Block properties命命令,将打开模块属性对话框。该对话框包括令,将打开模块属性对话框。该对话框包括General、Block annotation和和Callbacks 3个可以相互切换的选项卡。其中选个可以相互切换的选项卡。其中选项项卡中可以设置卡中可以设置3个基本属性:个基本属性:Description(说明说明)、Priority(优优先级先级) 、Tag(标记标记)。4.4.3 系统的仿真系统的仿真4.4.3.1 设置仿真参数设置仿真参数打开系统仿真模型,从模型编辑窗

86、口的打开系统仿真模型,从模型编辑窗口的Simulation菜单中选菜单中选择择Simulation parameters命令,打开一个仿真参数对话框,命令,打开一个仿真参数对话框,在其中可以设置仿真参数。仿真参数对话框包含在其中可以设置仿真参数。仿真参数对话框包含5个可以相个可以相互互切换的选项卡:切换的选项卡:(1)Solver选项卡:用于设置仿真起始和停止时间,选择微选项卡:用于设置仿真起始和停止时间,选择微分方程求解算法并为其规定参数,以及选择某些输出选项。分方程求解算法并为其规定参数,以及选择某些输出选项。(2) Workspace I/O选项卡:用于管理对选项卡:用于管理对MATLA

87、B工作空间的工作空间的输入和输出。输入和输出。(3) Diagnostics选项卡:用于设置在仿真过程中出现各类错误选项卡:用于设置在仿真过程中出现各类错误时发出警告的等级。时发出警告的等级。(4) Advanced选项卡:用于设置一些高级仿真属性,更好地选项卡:用于设置一些高级仿真属性,更好地控制仿真过程。控制仿真过程。(5) Real-time Workshop选项卡:用于设置若干实时工具中的选项卡:用于设置若干实时工具中的参数。如果没有安装实时工具箱,则将不出现该选项卡。参数。如果没有安装实时工具箱,则将不出现该选项卡。4.4.3.2 启动系统仿真与仿真结果分析启动系统仿真与仿真结果分析

88、设置完仿真参数之后,从设置完仿真参数之后,从Simulation中选择中选择Start菜单项或单菜单项或单击模型编辑窗口中的击模型编辑窗口中的Start Simulation命令按钮,便可启动对命令按钮,便可启动对当前模型的仿真。此时,当前模型的仿真。此时,Start菜单项变成不可选菜单项变成不可选, 而而Stop菜菜单项变成可选单项变成可选, 以供中途停止仿真使用。从以供中途停止仿真使用。从Simulation菜单中菜单中选择选择Stop项停止仿真后,项停止仿真后,Start项又变成可选。项又变成可选。为了观察仿真结果的变化轨迹可以采用为了观察仿真结果的变化轨迹可以采用3种方法:种方法:(1

89、) 把输出结果送给把输出结果送给Scope模块或者模块或者XY Graph模块。模块。(2) 把仿真结果送到输出端口并作为返回变量,然后使用把仿真结果送到输出端口并作为返回变量,然后使用MATLAB命令画出该变量的变化曲线。命令画出该变量的变化曲线。 (3) 把输出结果送到把输出结果送到To Workspace模块,从而将结果直接存模块,从而将结果直接存入工作空间,然后用入工作空间,然后用MATLAB命令画出该变量的变化曲线。命令画出该变量的变化曲线。应用举例求解微分方程:y”+2y+3y=sin(t)Y(0)=0,y(0)=01.解析解:利用符号微分指令dsolvedsolve(D2y+2*

90、Dy+3*y-sin(t)=0,Dy(0)=0,y(0)=0)1/4*exp(-t)*cos(2(1/2)*t)+1/4*sin(t)-1/4*cos(t)2.数值解:clearsyms t y=dsolve(D2y+2*Dy+3*y-sin(t)=0,Dy(0)=0,y(0)=0,t);ezplot(y,0 10);hold onf=(t,x)x(2); -3 *x(1)-2*x(2)+sin(t);t x1=ode23t(f,0,10,0 0);plot(t,x1(:,1),*);grid ontitle(连续的是解析解,星号的是数值解);3.利用Simulink对应的传递函数模型END第

91、第第第5 5章章章章 离散离散离散离散事件系统仿真事件系统仿真事件系统仿真事件系统仿真5.1 离散事件系统仿真的基本概念5.2 均匀分布随机数及其产生5.3 时间步长法5.4 事件步长法5.1 离散事件系统仿真的基本概念所谓离散事件系统是指描述系统的状态变量只在某些离散时刻由于某一或某些事件的发生而发生变化的一类系统。描述该系统的模型通常为流程图或网络图,并具有很强的随机性。例5.0 某个理发馆,设上午9.00开门,下午7.00关门。显然,在这个理发馆系统中,存在理发师和顾客两个实体,也存在顾客到达理发馆的事件和理发师为顾客服务事件。因此描述该系统的状态变量是理发师(服务台)的状态(忙或闲)、

92、顾客排队等待的队长、理发师的服务方式(如对某些特殊顾客的优先服务)。显然,这些状态变量的变化只能在离散的随机时间点上发生。5.1.1 5.1.1 离散事件系统的基本概念离散事件系统的基本概念 1)实体或设备 离散事件系统有多种类型,但它们的主要组成部分基本相同,首先,它有一部分是活动的,叫“实体”。例如,生产自动线上待加工的零件,计算机系统待处理的信息,商店或医院中排队等待的顾客或病人等等。系统的工作过程实质上就是这种“实体”流动和接受加工、处理和服务的过程。其次,系统中还有一部分是固定的,叫“设备”。这些设备用于对实体进行加工、处理或服务,它们相当于连续系统中的各类对信息进行交换处理的元件。

93、这些“设备”可能是机床、计算机系统、营业员或者医生等。所以此处“设备”的含义是广泛的。实体按一定规律不断地到达(产生),在设备作用下通过系统,接受服务,最后离开系统。整个系统呈现出动态过程。 目前通用方法是将实体和设备通称为“实体”,但前者称为“临时实体临时实体”,后者设备称为“永久实体永久实体”。2)事件 描述离散事件系统的第二个重要概念是“事件”、事件事件是引起系统状态发生变化的行为引起系统状态发生变化的行为。例如,在例5.0中,可以定义“顾客到达”为一类事件,而这个事件的发生引起系统的状态理发师的状态从“闲”变成“忙”,或者引起系统的另外一个状态顾客的排队人数发生变化。同样,一个顾客接受

94、服务完毕后离开系统也可以定义为一类事件。3)活动 离散事件系统中的活动活动,通常用于表示两个可以区分的事表示两个可以区分的事件之间的过程件之间的过程,它标志着系统状态的转移标志着系统状态的转移。在例5.0中,顾客的到达事件与该顾客开始接受服务事件之间可称为一个活动,该活动使系统的状态(队长)发生变化,顾客开始接受服务到该顾客接受服务完毕后离开也可以视为一个活动,它使队长减1。4)4)进程进程 进程由若干个有序事件及若干有序活动组成,一个进程进程描述了它所包括的事件及活动间的相互逻辑关描述了它所包括的事件及活动间的相互逻辑关系及时序关系系及时序关系。如例5.0中,一个顾客到达系统、经过排队、接受

95、服务、到服务完毕后离去可以称为一个进程。 事件活动进程三者之间的关系可用图5.1来描述。图图5.1 事件事件活动活动进程之间的关系进程之间的关系5)5)仿真钟仿真钟 仿真钟用于表示仿真时间的变化仿真钟用于表示仿真时间的变化。在离散事件仿真中,由于引起状态变化的事件发生的时间是随机的,因此仿真钟的推进步长也完全是随机的。而且,两个相邻发生的事件之间系统状态不会发生任何变化,因而仿真钟可以跨过这些“不活动”周期。从一个事件发生时刻推进到下一事件发生时刻,仿真钟的推进呈现跳跃性,推进速度具有随机性。可见,在离散事件仿真模型中事件控制部件是必不可少的,以便按一定规律来控制仿真钟的推进。6)6)统计计数

96、器统计计数器 离散事件系统的状态随事件的不断发生也呈现出动态变化过程,但仿真的目的主要不是要得到这些状态是如何变化的。由于这种变化是随机的,某一次仿真运行得到的状态变化过程只不过是随机过程的一次取样。如果进行另一次独立的仿真运行所得到的状态变化过程可能完全是另一种情况。他们只有在统计意义下才有参考价值。 在例5.0中,由于顾客到达的时间间隔具有随机性,理发师为每一个顾客服务的时间长度也是随机的,因而在某一时刻,顾客排队的队长或理发师的忙闲情况完全是不确定的。在分析该系统时,感兴趣的可能是系统的平均队长、顾客的平均等待时间或者是理发师的利用率等。在仿真模型中,需要有一个统计计数部在仿真模型中,需

97、要有一个统计计数部件,以便统计系统中的有关变量。件,以便统计系统中的有关变量。5.1.2 5.1.2 离散事件系统的数学模型离散事件系统的数学模型 离散事件系统既然主要有实体、设备和各类事件、活动、进程组成,那么系统状态的变化也是由这些实体的活动引起的,描述这类系统的数学模型可以分为以下三个部分。 1)到达模型到达模型 设实体1到达系统的时刻为t1,实体2到达系统的时刻为t2,则实际相互到达的时间为 ,相互达到的速度 。在离散事件系统中,用概率函数来定义,并用相互到达时间大于时间t的概率来表示到达模型,称为到达分布函数,用A0(t)表示。如果已知到达时间的积累分布函数F(t),则A0(t)与F

98、(t)之间有如下关系: (5.1) 如果实体到达完全随机,只受给定的平均到达速度的限制,即下一实体到达与上一实体到达时间无关,而在时间 区间内到达的概率与 成正比,与t无关,则在这些条件下,系统在时刻到达n个实体的概率满足泊松分布模式,即 为单位时间到达的实体数 泊松分布是一种很重要的概率分布,在实际排队系统中有不少到达模式属于这种分布。例如电话交换系统中的呼叫次数、计算机信息处理系统中信息的到达、商店和医院等服务机构中人的到达次数等等。2)服务模型 它是用来描述设备为实体服务的时间模型。假定系统中同时为实体服务的设备有n个,且设备为单个实体服务所需要的时间为Ts, Ts一般也用概率函数来描述

99、。定义服务分布函数S0(t),它是服务时间Ts大于时间t的概率。若设F0(t)为服务时间积累分布函数,则有 (5.2) S0(t)及 F0(t)称为服务模型。 若服务过程满足(1)在不重叠的时间区间内;(2)各个服务时间是相互独立的,服务时间平均值是一常值;(3)在区间内完成为一个实体服务的概率正比于时间间隔,则服务时间的概率分布和实体到达时间间隔的概率分布相同,即为负指数分布,概率密度函数为 (5.3) 3)排队模型 它是用来描述在服务过程中当出现排队现象时,系统对排队的处理规则。当设备的服务速度低于实体互相到达速度时。在设备前就会出现排队现象。对一个服务系统来讲,出现一定的排队现象是正常的

100、,但是,不希望排队过长。一旦出现排队现象,实体将按照一定的规则接受服务。一般有如下规则: 先到先服务:即按到达顺序接受服务,这是最通常的情形。 后到先服务:如使用电梯的顾客是后入先出的;计算机系统中存放信息的压栈处理等。 随机服务:当设备空闲时,从等待的实体中随机地选一个进行服务。如电话交换接通呼唤的服务等。 优先服务:如医院中急诊病人优先得到治疗;机场跑道优先对需要降落的飞机提供服务等。 由上述可知,离散事件系统的模型一般来讲不能用一组方程来描述,而是要用一些逻辑条件或流程图来描述,这与连续系统模型有很大的不同。正因为这一点,决定了离散事件系统的仿真具有它本身的特殊性。 5.1.3 5.1.

101、3 离散事件系统的仿真方法离散事件系统的仿真方法 在一个较为复杂的离散事件系统中,一般都存在诸多实体,这些实体之间相互联系,相互影响,然而其活动的发生都统一在同一时间基上。建立起各类实体之间的逻辑关系,这是离散事件系统仿真学的重要内容之一,有时称之为仿真算法仿真算法或仿真策仿真策略略。如同连续系统仿真一样,即使同一系统,不同算法下的仿真模型的形式是不同的,仿真策略决定仿真模型的结构。在此仅简单介绍目前比较成熟的三种仿真方法。 1.事件调度法 离散事件系统中最基本的概念是事件,事件的发生引起系统状态的变化。用事件的观点来分析真实系统,通过定义事件及每个事件发生对系统状态的变化按时间顺序确定,并执

102、行每个事件发生时有关的逻辑关系,这就是事件调度法的基本思想。 按这种策略建立模型时,所有事件均放在事件表中。模型中设有一个时间控制单元,该单元从事件表中选择具有最早发生时间的事件,并将仿真钟修改到该事件发生的时间,再调用与该事 件相应的事件处理模块。该事件处理完后返回时间控制部分。这样,事件的选择与处理不断地进行,直到仿真终止条件满足或程序事件产生为止。 2)2)活动扫描法活动扫描法 如果事件的发生不仅与时间有关,而且与其它条件也有关,即只有满足某些条件时事件才会发生,在这种情况下,采用事件调度法策略建模则显示出这种算法的弱点。原因在于,这类系统活动持续时间的不确定性,因而无法预定活动的开始和

103、终止时间。 活动扫描法的基本思想是:系统由成分组成,而成分包含着活动,这些活动的发生必须满足某些条件;每一个主动成分有一个相应的活动子例程;在仿真过程中,活动的发生时间也作为条件之一,而且是较之其它条件具有更高的优先权 3)3)进程交互法进程交互法 进程由若干个事件及若干活动组成,一个进程描述了它所包括的事件及活动间的相互逻辑关系及时序关系。 进程交互法采用进程描述系统,它将模型中的主动成分历经系统时所发生的事件及活动按时间顺序进行组合,从而形成进程表。一个成分一旦进入进程,它将完成全部活动。 以上讨论的三种仿真方法在离散事件系统仿真中均得到广泛的应用。有些仿真语言采用某一种方法,有的则允许用

104、户在同一个仿真语言中用多种方法,以适应不同用户的需要。显然,选择何种方法依赖于被研究的系统的特点。一般说来,如果系统中的各个成分相关性较少,宜采用事件调度法;相反宜采用活动扫描法;如果系统成分的活动比较规则,则宜采用进程交互法。 图5.2图5.4是以出纳员队列模型为例列出这三种方法的流程图,由图可清楚地看到它们之间的关系。 离散事件系统仿真研究的一般步骤与前面介绍的连续系统仿真是类似的,它包括系统建模、选择仿真算法、确定仿真模型、设计仿真程序、运行仿真程序、输出仿真结果并进行分析。 图图5.2 出纳员队列模型出纳员队列模型 (a)到达事件流程图)到达事件流程图(b)离开事件流程图)离开事件流程

105、图图图5.3 5.3 出纳员服务活动流程图出纳员服务活动流程图 图图5.4 5.4 出纳员服务进程流程图出纳员服务进程流程图 5.1.4 仿真研究的步骤明确问题和提出总体方案明确问题和提出总体方案。把被仿真系统的内容表达清楚;弄清仿真的目的、系统的边界;确定问题的目标函数和可控变量;找出系统的实体、属性和活动等。系统分析建立模型; 选择合适的仿真方法(如时间步长法、事件表法等);确定系统的初始状态;设计整个系统的仿真流程图。收集数据;编写程序、程序验证;模型确认。模型构造运行运行:确定具体的运行方案,如初始条件、参数、步长、重复次数等,然后输入数据,运行程序。改进改进:将得出的仿真结果与实际系

106、统比较,进一步分析和改进模型,直到符合实际系统的要求及精度为止。模型的运行与改进设计格式:设计格式:设计出结构清晰的仿真结果输出,包括提供文件的清单,记录重要的中间结果等。输出结果:输出结果:输出格式要有利于用户了解整个仿真过程 ,分析和使用仿真结果。设计格式输出仿真结果仿真研究步骤问题的阐述设置目标及完整的项目研究计划建立模型收集数据编程序程序验证模型确认试验设计运行与分析进一步运行仿真结束输出结果是是是是否否否否系统分析模型构造模型运行输出结果例例5.1 5.1 射击命中率 在我方某前沿防守地域,敌人以一个炮排(含两门火炮)为单位对我方进行干扰和破坏为躲避我方打击,敌方对其阵地进行了伪装并

107、经常变换射击地点经过长期观察发现,我方指挥所对敌方目标的指示有50是准确的,而我方火力单位,在指示正确时,有1/3的射击效果能毁伤敌人一门火炮,有1/6的射击效果能全部消灭敌人 现在希望能用某种方式把我方将要对敌人实施的20次打击结果显现出来,确定有效射击的比率及毁伤敌方火炮的平均值。分析分析: 这是一个概率问题,可以通过理论计算得到相应的概率和期望值。但这样只能给出作战行动的最终静态结果,而显示不出作战行动的动态过程。 为了能显示我方20次射击的过程,现采用模拟的方式。用投掷一枚硬币的方式予以确定,当硬币出现正面时为指示正确,反之为不正确1、问题分析:、问题分析:需要模拟出以下两件事(1)观

108、察所对目标指示正确与否的模拟观察所对目标指示正确与否的模拟模拟试验有两种结果,每一种结果出现的概率都是1/2。(2) (2) 我方火力射击结果的模拟我方火力射击结果的模拟当指示正确时,模拟试验有三种结果:毁伤一门火炮的可能性为1/3(即2/6),毁伤两门的可能性为1/6,没能毁伤敌火炮的可能性为1/2(即3/6)这时可用投掷骰子的方法来确定可用投掷骰子的方法来确定:出现、点:则认为没击中敌人;出现、点: 则认为击毁敌人一门火炮;出现点: 则认为击毁敌人两门火炮2. 符号假设符号假设i:要模拟的打击次数;k1:没击中敌人火炮的射击次数; k2:击中敌人一门火炮的射击次数;k3:击中敌人两门火炮的

109、射击次数E:有效射击比率; E1:20次射击平均每次毁伤敌人的火炮数初始化:i=0,k1=0,k2=0,k3=0i=i+1骰子点数?k1=k1+1k2=k2+1k3=k3+1k1=k1+1i20?E=(k2+k3)/20 E1=0*k1/20+1*k2/20+2*k3/20停止硬币正面?YNNY1,2,34,563. 模拟框图模拟框图4. 模拟结果模拟结果5. 理论计算理论计算6. 结果比较结果比较 模拟试验与理论计算虽然结果不完全一致,模拟试验与理论计算虽然结果不完全一致,可这反映了事件发生的随机性。只要多次实验求可这反映了事件发生的随机性。只要多次实验求平均值,模拟值就会很接近理论值。平均

110、值,模拟值就会很接近理论值。 5.2 均匀分布随机数及其产生对随机现象进行模拟,实质上是要给出随机变量的模拟。也就是说利用计算机随机地产生一系列数值,它们的出现服从一定的概率分布,则称这些数值为随机数。最常用的是在(0,1)区间内均匀分布的随机数,也就是我们得到的这组数值可以看作是(0,l)区间内均匀分布的随机变量的一组独立的样本值。以后我们将指出其它分布的随机数可利用均匀分布的随机数产生。记 XU(0,1),0,1)区间上均匀分布的随机变量X的概率密度f(x)和概率分布函数F(x)分别为:数学期望: E(X)=1/2; 方 差: = 1/12 下图为均匀分布的密度函数和分布函数示意图:均匀随

111、机数是产生其它随机数的基础。例如,抛硬币、抽签、统计经验分布都可以由它产生。产生随机数的方法:(1)随机数表随机数表 : 1927年,4万随机数表,以后有100万随机数表(可以输入内存,随时调用);(2)硬件设备硬件设备: 从真实物理现象的随机因素中产生随机数,如,放射性粒子的放射源,单位时间内放射出的粒子数是随机的。 优点:真正的随机数; 缺点:外部设备,无法重复(3)数学公式数学公式:产生伪随机数 用数学公式或移位寄存器的移位操作来产生的随机数,称为伪随机数。因为真实的随机数, 只能从客观真实的随机现象本身产生出来,所以产生理想的伪随机数列不是一件容易的事。 一般对于产生伪随机数的方法,有

112、如下几点要求:1) 要求伪随机数列有较理想的随机性和均匀性,就是对其随机性和均匀性进行统计检验时, 有合乎要求的精度;2) 产生伪随机数的程序应当简短,运算速度快,占用计算机的内存单元少;3) 伪随机数列的循环周期应当尽可能地大,以满足模拟的需要;4) 伪随机数列中,前后之间和各子列之间,要求相互是独立无关的。C语言中与随机数有关的函数:randomize(void); 初始化x=random(int M); 产生0M 之间的随机数x=rand(void); 产生0215-1之间的随机数Matlab中与随机数有关的函数:rand(n)n*n个0,1之间均匀分布随机数rand(m,n) m*n

113、个0,1之间均匀分布随机数randn(n)n*n个N(0,1)标准正态分布随机数randn(m,n) m*n个N(0,1)标准正态分布随机数出发时刻(T) 1:00 1:051:10 频率 0.7 0.2 0.1例5.2 赶火车过程仿真一列火车从A站经过B站开往C站,某人每天赶往B站乘这趟火车。已知火车从A站到B站运行时间为均值30分钟、标准差为2分钟的正态随机变量.火车大约在下午1点离开A站。发车时间的频率分布为 0.1 0.2 0.4 0.3 频率1:34 1:32 1:30 1:28到达时刻(T) 用计算机仿真模拟火车从A站开出、火车到达B站、这个人到达B站情况,并给出能赶上火车的仿真结

114、果。 引入以下变量: T1 火车在A站发车时间; T2 火车从A站到B站的运行时间; T3 此人到达B站的时间; 0.1 0.2 0.7 P(频率) 10 5 0 T1(分)这个人到达B站时的频率分布为: T1, T2, T3 是随机变量,T1概率分布为 0=x0.7,正点发车;0.7=x0.9,晚点5分钟;0.9=x1,晚点10分钟 开车时间的仿真测试(T1) s1=0; s2=0; s3=0; x=rand(10000,1); for i=1:10000 if x(i)0.7 s1=s1+1; end if x(i)0.9 s2=s2+1;else s3=s3+1; end ends1/1

115、0000, s2/10000,s3/10000火车运行时间的仿真测试(T2)x=randn(10000,1);for i=1:10000 y(i)=30+2*x(i);end T2(分) 28 30 32 34 P( 频率) 0.3 0.4 0.2 0.1 s1=0; s2=0; s3=0;s4=0; x=rand(10000,1); for i=1:10000 if x(i)0.3 s1=s1+1; elseif x(i)0.7 s2=s2+1; elseif x(i)0.9 s3=s3+1; else s4=s4+1; end endends1/10000, s2/10000,s3/100

116、00,s4/10000人到达时刻仿真测试(T3)赶上火车的仿真结果s=0;x1=rand(10000,1);x2=rand(10000,1);x3=rand(10000,1);for i=1:10000 if x1(i)0.7 T1=0; elseif x1(i)0.9 T1=5; else T1=10; endT2=30+2*x2(i); if x3(i)0.3 T3=28; elseif x3(i)0.7 T3=30; elseif x3(i)0.9 T3=32; else T3=34; end if T3T1+T2 s=s+1; endends/100005.3 时间步长法时间步长法按照

117、时间的顺序,一步一步地对系统的活动进行仿真。在整个仿真过程中,时间步长固定不变。基本思想在进行系统仿真的过程中,可以把整个过程分成许多相等的时间间隔,时间步长的长度可以根据实际问题分别取作秒,分,小时,天等。程序中按照这个步长前进的时钟就是仿真的时钟。基本步骤首先选取对象系统的一个初始起点作为仿真时钟的零点,然后根据实际问题的需要,选定一个时间步长。于是从仿真时钟的零点开始,每推进一个时间步长就对系统的活动和状态按照预定的规则和目的进行考察、分析、计算和记录,直到预定仿真结束时刻为止。初始状态时间步长加1在当前步长内,考察分析、计算和记录系统的活动仿真时间到否?结束输出结果是否5.4 事件步长

118、法事件步长法是以事件发生的时间为增量,按照事件发生的时间顺序,一步一步地对系统的行为进行仿真,直到预定的时间结束为止。在多数随机系统中,可以有多种性质的事件发生,通常按照发生时间的先后顺序逐个处理,换句话说,首先处理发生时刻距初始时刻最短的事件,这种处理方法称为是最短时间的事件步长法。初始状态事件步长加1在当前步长内,考察分析、计算和记录系统的活动仿真时间到否?仿真结束输出结果是否事件步长法与时间步长法的主要区别是:(1)事件步长法与时间步长法都是以时间为增量来考察系统状态的变化。但在时间步长法中,仿真时钟以等步长前进,而在事件步长法中,仿真时钟的步长取决于事件之间的间隔。(2)时间步长法在一

119、个步长内,认为系统所处的状态相同,因而所选步长的大小将影响仿真的精度。而在事件步长法中,每个事件的发生均有确切的时刻,不需要人为地选取步长,步长的大小对仿真精度影响较小。(3)时间步长法每前进一个步长就要对整个系统进行一次全面考察,即使状态没有发生变化时也要扫描,而事件步长法只是在某一事件点上判断和比较事件是否出现。因此,一般地讲,当判断比较的数目较大时,用时间步长法可以节省用机时间,而当相继两个事件出现的平均间隔较长时,更适合于用事件步长法。事件步长法的基本思路事件步长法的主要思路是将系统的仿真过程看成一个事件点序列事件点序列,根据事件出现的时序,用一个称之为事件表的表格来调度事件执行的顺序

120、。对于那些当前需处理的事件,列入事件表中,从中取出最接近的事件进行处理,处理完毕后自动退出事件表在处理当前事件的过程中,往往又会产生一个后继事件,因此,必须预测出这一后继事件的出现时间,并将它列入事件表中。例5.3一设备上三个相同的轴承,每个轴承正常工作寿命为随机变量,其概率分布如表所示。寿命h1000110012001300140015001600170018001900概率0.100.130.250.130.090.120.020.060.050.05任何一个轴承损坏都可以使设备停止工作,从有轴承损坏,设备停止工作,到检修工到达开始更换部件为止,称为一个延迟时间。延迟时间也是随机变量,其概

121、率分布如下表所示:延迟时间min51015概率0.60.30.1设备停工时每分钟损失5元,检修工每小时工时费12元,轴承每个成本 16元。更换一个轴承需要 20 min,同时更换两个轴承需要30min,同时更换三个轴承需要40min。现在有两种方案:方案一是损坏几个更换几个;方案二是一旦有轴承损坏就全部更换。试通过计算机仿真对这两种方案做出评价。在这一问题中,轴承寿命在1000到1900h之间,而延迟在5到 15min之间,故若用时间步长法时,步长选取有些困难。步长小浪费很大,步长大又不精确,所以采用事件步长法。在事件发生时再考虑系统状态的变化情况,这就比较合理。为了进行仿真,首先对轴承寿命和

122、延迟时间与随机数对应,对应规则分别如下两个表。轴承寿命h频率随机数区间10000.10(0,0.10)11000.130.10,0.23)12000.250.23,0.48)13000.130.48,0.61)14000.090.61,0.70)15000.120.70,0.82)16000.020.82,0.84)17000.060.84,0.90)18000.050.90,0.95)19000.050.95,1.00)延迟时间频率随机数区间50.60(0,0.6)100.300.6,0.9)150.100.9,1.0)轴承寿命随机数延迟时间随机数由于在这一问题中各个轴承的寿命完全决定了系统

123、的运行状态,也即决定了两个方案的费用大小,故我们选择轴承发生故障作为事件,这三个轴承发生故障的事件分别记为A、B、C。(1)方案一的仿真 产生初始事件表事件类型发生时刻延迟时间A1400h5minB1500h15minC1500h15min仿真时钟步进,计算费用,产生下一个事件。由表上看出,最早发生的事件是A,所以t 1400hcost (5+20)51220/60116145元,下一个A事件发生的时刻为2 400小时25分钟(随机产生轴承寿命为1000h),刷新事件表,即删去老的A事件,产生新的A事件。刷新后的事件表如下表。事件类型发生时刻延迟时间A2400h25min5minB1500h1

124、5minC1500h15min寻找事件表中的最早事件进行处理。由上表看出,B、C事件同时发生在第1500 h,故同时处理。时钟步进为 t 1500 h,再根据费用的计算方法得: cost= 145(15+30)5 1230/60216408元。 最后利用随机数产生新事件B和C,刷新事件表,得到的新事件表:事件类型发生时刻延迟时间A2400h25min5minB2700h45min10minC2900h45min5min重复,t=2400 h 25 min, cost= 408 (5+20)5 4 116= 553元。事件类型发生时刻延迟时间A3700h50min5minB2700h45min1

125、0minC2900h45min5min重复这一过程,一直仿真到需要的结束时间即可得到方案的费用。(2)方案二的仿真方案二与方案一的区别就是一旦故障发生,就更换3个轴承设初始事件表仍为方案一初始表。表中最早的事件是A,处理事件A时要考虑延时,更换3个轴承的时间和费用。事件类型发生时刻延迟时间A1400h5minB1500h15minC1500h15min cost = (5+40)51240/60316281元。根据下一次三个轴承发生故障的时刻刷新后的事件表:事件类型发生时刻延迟时间A2400h45min5minB2600h45min10minC2800h45min5min再重复上述过程,累加费

126、用,即可得到方案二的总费用。最后比较两种方案的费用大小即可确定选取那一种。程序运行结果:T=100000h方案一:cost=32705元方案二:cost=24429元从而得出方案二较方案一优。/可靠性问题 #include #include #include #define TIMES 100000 struct table float begin; int delay; int make; ; struct table tab3; float cost=0; int sort3; int make_event1(void) int first=0,sum; sort0=sort1=sort2

127、=-1; float b=tab0.begin; if(btab1.begin)first=1,b=tab1.begin; if(btab2.begin)first=2,b=tab2.begin; int i=0; if(first=0) sorti+=0; if(tab1.begin=tab0.begin)sorti+=1; if(tab2.begin=tab0.begin)sorti+=2; else if(first=1) sorti+=1; if(tab2.begin=tab1.begin)sorti+=2; else if(first=2)sorti+=2; for(sum=0,i=

128、0;i=0)sum+; switch(sum)case 1:tabsort0.make=20; cost+=(20+tabsort0.delay)*5+4+16; break;case 2:tabsort0.make=30; cost+=(30+tabsort0.delay)*5+6+32; break;case 3:tabsort0.make=40; cost+=(40+tabsort0.delay)*5+8+48; break; return sum; int make_event2(void) int first=0,sum;sort0=sort1=sort2=-1;float b=ta

129、b0.begin;if(btab1.begin)first=1,b=tab1.begin;if(btab2.begin)first=2,b=tab2.begin;int i=0;if(first=0)sorti+=0;if(tab1.begin=tab0.begin)sorti+=1;if(tab2.begin=tab0.begin)sorti+=2;else if(first=1)sorti+=1;if(tab2.begin=tab1.begin)sorti+=2;else if(first=2)sorti+=2;tabsort0.make=40;cost+=(40+tabsort0.del

130、ay)*5+8+48;return sum; void create_event1(struct table *t) float x,y; struct table *t1; x=random(1000); x/=1000; t-begin+=(t-delay+t-make)/60.0; if(xbegin+=1000; else if(xbegin+=1200; else if(xbegin+=1300; else if(xbegin+=1400; else if(xbegin+=1500; else if(xbegin+=1600; else if(xbegin+=1700; else i

131、f(xbegin+=1800; else if(xbegin+=1900; for(t1=&tab0;t1begin=t-begin) t-delay=t1-delay;return; y=random(1000); y/=1000; if(ydelay=5; else if(ydelay=10; else if(ydelay=15; return; void create_event2(struct table *t,struct table *t0) float x,y;struct table *t1;x=random(1000); x/=1000;if(t0!=0)t-begin=t0

132、-begin+(t0-delay+t0-make)/60.0;else t-begin+=(t-delay+t-make)/60.0;if(xbegin+=1000;else if(xbegin+=1200;else if(xbegin+=1300;else if(xbegin+=1400;else if(xbegin+=1500;else if(xbegin+=1600;else if(xbegin+=1700;else if(xbegin+=1800;else if(xbegin+=1900;for(t1=&tab0;t1begin=t-begin)t-delay=t1-delay;ret

133、urn; y=random(1000); y/=1000; if(ydelay=5; else if(ydelay=10; else if(ydelay=15; return; void printf_result(void) for(int i=0;i3;i+) printf(%dt%ft%dn,i+1,tabi.begin,tabi.delay); printf(cost=%fn,cost); return; void main1(void) int i;float T=0;memset(tab,0,sizeof(tab);cost=0;randomize();create_event1(

134、&tab0);create_event1(&tab1);create_event1(&tab2);printf_result();domake_event1();T=tabsort0.begin;printf_result();for(i=0;iTIMES);printf(1:tCost=%f T=%fn,cost,T); void main2(void) int i;float T=0;memset(tab,0,sizeof(tab);cost=0;randomize();create_event2(&tab0,0);create_event2(&tab1,0);create_event2(&tab2,0);printf_result();domake_event2();T=tabsort0.begin;printf_result();for(i=0;iTIMES);printf(2:tCost=%f T=%fn,cost,T); int main(void) main1();main2(); return 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号