中科大测控系统仿真技术课件08 MATLAB在系统仿真中的运用_第1页
中科大测控系统仿真技术课件08 MATLAB在系统仿真中的运用_第2页
中科大测控系统仿真技术课件08 MATLAB在系统仿真中的运用_第3页
中科大测控系统仿真技术课件08 MATLAB在系统仿真中的运用_第4页
中科大测控系统仿真技术课件08 MATLAB在系统仿真中的运用_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

chap8MATLAB在系统仿真中的运用

8.1MATLAB简介

8.1.1MATLAB的产生与发展

20世纪70年代后期,身为新墨西哥大学计算机科学系主任的CleveMoler,在给学生开线性代数课程时,他开始用业余时间为学生编写使用方便的LINPACK和EISPACK的接口程序。CleveMoler给这个接口程序取名为MATLAB,意思是“矩阵实验室(MATrixLABoratory)”。不久以后,MATLAB受到了学生的普遍欢迎,并且,MATLAB也成了应用数学界的一个术语。

1984年,Mathworks公司成立,把MATLAB推向了市场,并继续MATLAB的研制和开发。MATLAB在市场上的出现,为各国科学家开发本学科相关软件提供了基础。

参考网址:http://matlab.myrice.com1993年,MATLAB的第一个Windows版本MATLAB3.5k问世。同年,支持Windows3.x的MATLAB4.0版本推出。

1993年11月,Mathworks公司又推出了MATLAB4.1版本,首次开发了SymbolicMath符号运算工具箱。其升级版本MATLAB4.2c在用户中有着广泛的应用。1997年,MATLAB5.0版本问世了。随后出现了它的升级版本MATLAB5.1/5.2/5.3。

2000年下半年,Mathworks公司推出了他们的最新产品MATLAB6.0(R12)的试用版,并于2001年初推出了正式版。同前面的版本对比起来,MATLAB6.0在MATLAB5.x的基础上着重在计算速度上做了比较大的改善,计算速度有了明显的提高。另外,MATLAB6.0给人最直接的感受就是用户界面有了很大的改观,更加友好。目前,在社会上广为流传的是它的升级版本MATLAB6.5(R13)。

8.1.2MATLAB的特点

MATLAB语言主要有以下其他语言不可比拟的特点。1.功能强大

MATLAB4.0以上(不包括4.0版本)的各版本,不仅在数值计算上继续保持着相对其他同类软件的绝对优势,而且还开发了自己的符号运算功能。这样,用户就不必像以前的计算人员一样在掌握MATLAB的同时还要学习另一种符号运算软件。用户只要学会了MATLAB就可以方便地处理诸如矩阵变换及运算、统计及优化等问题了。2.语言简单

MATLAB是个成功的语言,它允许用户以数学形式的语言编写程序,比BASIC语言、FORTRAN语言和C语言等更接近于书写计算公式的思维方式。它的操作和功能函数指令就是以平时计算机和数学书上的一些简单的英文单词表达的。由于它是用C语言开发的,它的不多的几个程序流控制语句同C语言差别甚微,初学者很容易掌握。3.扩充能力强、可开发性强

MATLAB能发展到今天这种程度,它的可扩充性和可开发性起着不可估量的作用。MATLAB本身就像一个解释系统,对其中的函数程序的执行以一种解释执行的方式进行。这样最大的好处是MATLAB完全成了一个开放的系统,用户可以方便地看到函数的源程序,也可以方便地开发自己的程序,甚至创建自己的“库”。另外,MATLAB并不“排他”,MATLAB可以方便地与FORTRAN、C等语言进行连接,以充分利用各种资源。用户只需将已有的EXE文件转换成MEX文件,就可以方便地调用有关程序和子程序。

4.编程易、效率高从形式上看,MATLAB程序文件是一个纯文本文件,扩展名为.m。用任何字处理软件都可以对它进行编写和修改,因此程序易调试,人机交互性强。

8.2MATLAB环境8.2.1MATLAB桌面平台1.启动MATLAB

启动MATLAB有多种方式,最常用的方法就是双击系统桌面的MATLAB图标,也可以在开始菜单的程序选项中选择MATLAB快捷方式。初次启动MATLAB后,将进入MATLAB默认设置的桌面平台。2.桌面平台默认设置情况下的桌面平台包括6个窗口,分别是MATLAB主窗口、命令窗口、历史窗口、当前目录窗口、发行说明书窗口和工作间管理窗口。下面分别对各窗口做简单介绍。(1)MATLAB主窗口与MATLAB的早期版本不同的是,MATLAB6.1增加了一个主窗口,其他的几个窗口都包含在这个大的主窗口中。

(2)命令窗口在主窗口的“View”菜单下选择“CommandWindow”命令,可以打开或关闭MATLAB的命令窗口。其中“>>”为运算提示符,表示MATLAB正处在准备状态。当在提示符后输入一段运算式并按Enter键后,MATLAB将给出计算结果,然后再次进入准备状态。(3)历史窗口在主窗口的“View”菜单下选择“CommandHistory”命令,可以打开或关闭MATLAB的历史窗口。(4)当前目录窗口在主窗口的“View”菜单下选择“CurrentDirectory”命令,可以打开或关闭MATLAB的当前目录窗口。(5)发行说明书窗口发行说明书窗口是MATLAB6.x版本所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。在主窗口的“View”菜单下选择“LaunchPad”命令,可以打开或关闭该窗口。(6)工作间管理窗口在主窗口的“View”菜单下选择“Workspace”命令,可以打开或关闭MATLAB的工作间管理窗口,工作间管理窗口是MATLAB的重要组成部分。

8.2.2MATLAB的程序编辑器

MATLAB提供了一个程序编辑/调试器。在MATLAB的命令窗口中有三种方式可进入程序编辑/调试器:1。

选择菜单栏的“File”项中的“New”或“Open”项。2。选择工具栏的“New”或“Open”项。3。在命令窗口中输入edit命令。在程序编辑/调试器里,不同的文本内容分别用不同颜色的字体显示。其中MATLAB的关键字如for、if、end等为蓝色,注释语句为绿色,字符串为红色,其他文本为黑色,这样的颜色设置非常醒目,便于调试。

MATLAB下的M函数通常是由function语句引导的,其基本格式为:

Function返回变量列表:函数名(输入变量列表)%注释说明语句段函数体语句返回变量如果是多个的话(多于1个),则应该用方括号括起来。有了M函数之后,可以用下列形式进行函数调用:返回变量列表:函数名(输入变量的取值)注意:两个函数名必须一致。例如,实现加减法运算的M函数调用方法如下:

Function[outl,out2]=addec(inl,in2)

outl=inl+in2;

out2=inl-in2;然后,在MATLAB的命令窗口调用这个函数文件:

[a,b]=addec(10,20)

disp([a,b])%在命令窗口输出a、b的值显示结果为:30108.2.3MATLAB帮助系统与其他科学计算软件相比,MATLAB的一个非常突出的优点就是帮助系统非常完善。它的帮助系统大致可分为以下三大类。1.联机帮助系统与以往版本的联机帮助系统不同,MATLAB6.1的联机帮助系统更为系统全面,简直就是一本MATLAB的百科全书。进入MATLAB联机帮助系统的方法很多,下面介绍其中的三种。

直接按下MATLAB主窗口中的按钮。

选择“Help”下拉菜单的前四项中的任何一项。

在命令窗口中执行helpwin、helpdesk或doc。以上三种方法都可以进入联机帮助系统窗口。2.命令窗口查询帮助熟练的用户可以使用更为快速的命令窗口查询帮助。这些帮助主要可以分为:help系列、lookfor命令和其他常用帮助命令。3.联机演示系统单击MATLAB主窗口菜单的“Help”|“Demos”选项,或在命令窗口输入demo

,将进入MATLAB的演示界面。8.3MATLAB的基本应用

8.3.1MATLAB数值运算基础1.变量与常量(1)变量在MATLAB语言中变量的命名遵守如下规则:变量名区分大小写;变量名长度不超过31位,第31个字符之后的字符将被忽略;

变量名以字母开头,变量名中可包含字母、数字、下划线,但不能使用标点。(2)常量

MATLAB有一些预定义的变量,这些特殊的变量称为常量。2.矩阵的基本运算(1)矩阵变量的赋值在MATLAB中,矩阵的输入是很直观的,矩阵的元素用[]括起来,相邻元素之间用逗号或空格分隔,而采用分号来换行。

如果在上述赋值的式子末尾加一个分号,则矩阵的内容就不再屏幕上显示了。当矩阵的元素较多不能在同一行内写下时,可以在该行的末尾加三个点号(……)称为续行符号,表示下面的一行应该紧接在前一行上。在一个语句较长时,也可以使用续行符号。

在MATLAB中还经常使用一些初等函数矩阵,常用的有:

zeros(m,n)m

n全零矩阵

ones(m,n)

m

n全1矩阵

eye(n)

n

n单位矩阵

rand(m,n) m

n随机矩阵,0~1之间均匀分布

randn(m,n)

m

n随机矩阵,0~1之间正态分布(2)矩阵的基本运算

MATLAB中的矩阵运算只要符合矩阵维数的要求即可。除基本运算外,还有一些矩阵专用运算,例如:

inv(a) 表示对a矩阵求逆

fliplr(a) 表示将矩阵a进行左右翻转

flipud(a) 表示将矩阵a进行上下翻转

rot90(a) 表示将矩阵a的元素旋转90

3.数值分析(1)极小化在数值分析中,经常要求确定函数的极值,即最大值或最小值。MATLAB提供了fmin和fmins两个函数,分别用来寻找一维和n维函数的极值。其中fmin()函数的调用格式为:

Xmin=fmin(函数名,x1,x2)其中x1,x2分别为x所在区间两端的值,Xmin为函数最小值对应的x的值。利用fmin()函数也可以寻找最大值点,只要重新定义函数为-f(x)即可。(2)求零点

MATLAB提供了求函数零极点的函数,函数fzero()用于寻找一维函数的过零点

(3)积分

MATLAB提供了三个函数trapz、quad和quad8计算函数在有限区域内的积分。trapz()是通过计算梯形面积来近似函数的积分;quad()使用Simpson递归方法;quad8()使用Newton-costes递归方法进行数值积分。quad()函数、quad8()函数的调用格式为:

y=quad(函数名,a,b,tol);

y=quad8(函数名,a,b,tol);其中a,b分别为定积分的上下限,tol为变步长积分用的误差限,如果用户不给出误差限,将自动地假定为tol=le-3。通常,quad8比quad更精确些。(4)微分

MATLAB提供了一个有限插分函数diff,可以做数值微分,但使用有限插分进行近似将导致噪声的放大,造成较差的结果。(5)FFT变换

FFT变换即快速傅立叶变换,是数据分析的基本方法。MATLAB提供了很多实用的数据分析函数,表7-4列出了一些常用的数值分析函数。

8.3.2MATLAB绘图从最原始版本的MATLAB开始,图形功能就已经成为基本的功能之—。随着MATLAB版本的逐步升级,MATLAB的图形工具箱从简单的点、线、面处理发展到了集二维图形、三维图形甚至四维表现图和对图形进行着色、消隐、光照处理、渲染及多视角处理等多项功能于一身的强大功能包。1.二维图形①

plot(Y)

若Y为向量,则绘制的图形以向量索引为横坐标值、以向量元素值为纵坐标值。

plot(X,Y)一般来说是绘制向量Y对向量X的图形。如果X为一矩阵,则MATLAB绘出矩阵行向量或列向量对向量Y的图形,条件向量的元素个数能够和矩阵的某个维数相等。若矩阵是个方阵,则默认情况下将绘制矩阵的列向量图形。③

plot(X,Y,s)如果想绘制不同的线型、标识、颜色等的图形时,可调用此形式。其中s为一字符,可以代表不同线型、点标、颜色。可用的字符及意义见表7-5。

若在同一幅图中出现多条曲线时,MATLAB会自动地把不同曲线绘制成不同的颜色,以进行简单的区别。

如果要用不同的线型和颜色来绘制多条曲线时,可以用选项来定义。带有选项的曲线绘制命令的格式为:plot(x轴变量1,y轴变量1,’选项1’,x轴变量2,y轴变量2,’选项2’,

)绘制完曲线后,MATLAB还允许用户使用它提供的一些特殊函数来进一步修饰画出的图形,如:利用grid命令可以在坐标轴上加虚线型网格线;用xlabel()和ylabel()函数可以自动地将括号中的字符串分别写到图形的X轴和Y轴上;用title()函数则会将括号中的字符串写成图形的标题;用text()函数可以在图形上的某一点给出字符串说明。

2.三维图形

MATLAB语言中三维图形的绘制与二维图形的绘制在许多方面都很类似,其中曲线的属性设置则完全相同。

(1)plot3函数函数plot3是函数plot的三维扩展。其调用格式有如下几种(与plot相比,只是增加了一个维数而已):①

plot3(x,y,z)

其中x、y和z为3个相同维数的向量。函数绘出这些向量所表示的点的曲线。②

plot3(X,Y,Z)其中X、Y和Z为3个相同阶数的矩阵,函数绘出3矩阵的列向量的曲线。③

若要定义不同线型,可使用以下形式:

plot3(X,Y,Z,s)

其中s为定义线型的字符串,形式同plot函数。

plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,…)

这是组合绘制调用形式,与plot相同。(2)网图函数

函数meshgrid是网图函数中最简单的一个,其作用是将给定的区域按一定的方式划分平面网格,该平面网格可以用来绘制三维曲面,具体调用方式如下:(X,Y)=meshgrid(x,y)这里x和y为给定的向量,一方面可以用来定义网格划分区域;另一方面也可用来定义网格划分方法。矩阵X和Y则是网格划分后的数据矩阵。函数mesh用来绘制三维的网图。具体调用格式如下:①

mesh(X,Y,Z,C)绘制四个矩阵变量的彩色网格面图形。观测点可由函数view定义,坐标轴可由axis函数定义,颜色由C设置,也可由函数colormap实现。②

mesh(X,Y,Z)使用C=Z,即网图高度正比于图高。SIMULINK交互式仿真环境8.4SMULINK仿真工具简介8.4.1SIMULINK仿真工具概述

SIMULINK是Mathworks开发的MATLAB里的工具箱之一,主要功能是实现动态系统建模、仿真与分析,从而可以在实际系统制作出来之前,预先对系统进行仿真与分析,并可以对系统做适当的实时修正或者按照仿真的最佳效果来调试及调整控制系统的参数,以提高系统的性能,减少设计系统过程中反复修改的时间,实现高效率地开发系统的目标。

Mathworks从MATLAB4.0版开始应用SIMULINK,当时它放在MATLAB4.0版的核心执行文件中。在MATLAB4.2及以后的版本中,SIMULINK则以MATLAB里的工具包形式单独出现,即需单独安装。在MATLAB6.5版中,SIMULINK则升级为5.0版。

SIMULINK是用来建模、分析和仿真各种动态系统的交互环境,包括连续系统、离散系统和混杂系统。SIMULINK提供了采用鼠标拖放的方法建立系统框图模型的图形交互界面。通过SIMULINK提供的丰富的功能块,可以迅速地创建系统的模型,不需要书写一行代码。

1.交互建模

SIMULINK提供了大量的功能模块以方便用户快速地建立动态系统模型。建模时只需使用鼠标拖动库中的功能模块并将它们连接起来。使用者可以通过将模块组成子系统来建立多级模型。SIMULINK对模块和连接的数目没有限制。

2.交互仿真

SIMULINK框图提供了交互性很强的非线性仿真环境。可以通过下拉菜单执行仿真,或使用命令行进行批处理。仿真结果可以在运行的同时通过示波器或图形窗口显示。

3.扩充和定制SIMULINK的开放式结构允许用户扩展仿真环境的功能:(1)用MATLAB、FORTRAN和C代码生成自定义块库,并拥有自己的图标和界面。(2)将用户原有FORTRAN或C语言编写的代码连接进来。

4.与MATLAB和工具箱的集成由于SIMULINK可以直接利用MATLAB的数学、图形和编程功能,用户可以直接在SIMULINK下完成诸如数据分析、过程自动化、优化参数等工作。工具箱提供的高级的设计和分析能力可以通过SIMULINK的屏蔽手段在仿真过程中执行。

5.专用模型库(Blocksets)

SIMULINK的模型库可以通过专用元件集进一步扩展。DSPBlockset可以用于DSP算法的开发。Fixed-PointBlockset扩展了SIMULINK,用于建立和模拟数字控制系统和数字滤波器。8.4.2SIMULINK启动与界面说明

1.启动启动SIMULINK有如下两种方法:

·在MATLAB的命令窗口中键入simulink

Enter,就可以打开SIMULINK的库浏览器。

·在MATLAB的工具栏中,按下Simulink按钮,也可以打开SIMULINK的库浏览器。

2.界面说明在SIMULINK界面的上方是标题栏和菜单栏。菜单栏的下面是常用按钮及待查关键字填写栏,在关键字填写栏输入要查找的关键字并回车,就可以查到相应功能模块。常用按钮的下面是对所选模块对象的文字说明。在界面的下面分为两部分,左边部分显示的是全部模块库,在这里可以选择需要的模块库;右边部分显示选中的模块库中所有的模块。

3.SIMULINK的功能模块

SIMULINK4.1提供了9个基本模块库,即Continuous(连续系统模块库)、Discrete(离散系统模块库)、Function&Table(函数与表模块库)、Math(数学运算模块库)、Nonlinear(非线性模块库)、Signals&System(信号与系统模块库)、Sinks(输出模块库)、Sources(输入源模块库)、Subsystem(子系统模块库)等标准模块库。关于这些模块的名称与功能可参见教材的表8-1~表8-6。8.5SMULINK基本操作

8.5.1模型窗口“untitled”窗口即无标题的空白窗口,是SIMULINK仿真工具用来绘制控制系统结构图模型的空白设计区。模型窗口中有7个主菜单项,每个主菜单项都有下拉菜单,菜单项的下面是工具栏,工具栏的下面空白处就是模型编辑窗口,使用者可以在此处编辑系统的仿真模型。

通常,打开“untitled”模型窗口通常有四种方法:(1)直接从命令窗中选取“File”|“New”|“Model”命令,MATLAB会打开一个新的“untitled”模型窗口。(2)在MATLAB命令窗口下输入simulink命令,打开SIMULINK模块库浏览器窗口,然后再按“新建”按钮创建一个新“untitled”模型窗口。(3)在指令窗口下左键单击“NewSimulinkModel”按钮,再按“新建”按钮创建一个新的“untitled”模型窗口。(4)如果方框图模型已经存在,那么在MATLAB指令窗下直接键入模型文件名字,便会直接打开该模型方框图的模型窗口。用户可以对它直接进行编辑、修改和仿真。还可以在已打开的模型窗口里按按钮创建一个新“untitled”模型窗口。8.5.2模块的处理每个模块库中的功能模块,都可以直接用鼠标拖曳到设计区域中,再用线将其连接后执行,此外,还可以对模块进行处理,如模块的移动、复制、转向、改变大小、模块命名、颜色设定等等.1.选中模块在MATLAB中,选中模块的方法有两种:(1)用鼠标左键单击待选模块,模块四个角处出现小黑块,表示已经选中。(2)如果选择一组模块,可以按住鼠标左键拉出一个矩形虚线框,将所有待选模块框在其中,然后松开左键,则矩形里所有的模块,每个模块四个角处都出现小黑块,表示所有模块同时被选中。当要选中多个模块时,也可以按住[shift]键,单击鼠标左键,逐个选取。

2.复制模块模块的拷贝包括两种情况,即:从模块库中将标准模块拷贝到模型窗口“untitled”里;在“untitled”模型窗口里拷贝模块。从模块库中拷贝标准模块的操作方法是:在模块库用鼠标左键选中模块,按住鼠标左键不放将所选模块拖曳到“untitled”模型窗口里的目标位置,松手放开鼠标左键,即完成模块从库中的拷贝。

对于同一标准模块或者不同的模块均可以多次重复这样的拷贝操作。在“untitled”模型窗口里拷贝模块的有如下三种方法:(1)首先选中待拷贝模块,运行“Edit”|“Copy”命令;然后将光标移到将粘贴的地方,按一下鼠标左键;看到选定的模块恢复原状,在选定的位置上再运行“Edit”|“Paste”命令即可。新复制的模块和原装模块的名称也会自动编号,以资区别。(2)另一种简单的复制操作是:先按下“Ctrl”键不放,然后将鼠标移到模块对象上,注意看鼠标指针,如果多了一个小小的“加号”,表示可以复制了。用鼠标拖曳到目的位置后,松开鼠标左键,便完成拷贝工作。(3)还有一种更为特别的简单复制操作:用鼠标指向待拷贝模块对象,按住鼠标右键不放,将鼠标拖曳到目的地,放开鼠标右键,即可复制一个功能模块。3.模块的移动模块移动操作非常简单:将光标置于待移动模块图标上,然后按住鼠标左键不放,将模块图标拖曳到目的地,放开鼠标左键,模块移动完成。注意,移动模块时,与其相连的连线也随之移动。4.模块的删除和粘贴对选中的模块的删除和粘贴可以操作:(1)按“Delete”键,把选定模块删除。(2)选择“Edit”|“Cut”命令后,便将选定模块移到Windows的剪粘贴板上,再用“Paste”命令重新粘贴。5.改变模块对象的大小用鼠标选择对象模块图标,再将鼠标移到模块对象四周的控制小块处,鼠标指针将会变成或形状,此时按住鼠标左键不放,拖曳鼠标,待对象图标大小符合要求时即放开鼠标左键,这样就可改变模块对象图标的大小。6.改变模块对象的方向选择“Format”|“FlipBlock”或者直接按“Ctrl+I”键,可将功能模块旋转180

;如果选择“Format”|“RotateBlock”或者直接按“Ctrl+R”键,即可将功能模块顺时针旋转90

。7.模块命名用鼠标在需要更改的名称上单击一下,然后直接更改名称即可。名称在功能模块上的位置也可以改变,选择“Format”|“FlipName”命令,可以使模块名称在模块的上方、下方切换;若要隐藏模块名称可用“Format”|“HideName”命令来实现。

8.模块颜色设定模块的前景和背景颜色也可以改变,选择“Format”|“ForegroundColor”命令可以改变模块的前景颜色;选择“Format”|“BackgroundColor”命令可以改变模块的背景颜色。

8.5.3模块的连接将构成一个控制系统的所有环节模块拷贝到“untitled”模型窗口里,这些模块图标在没有用信号线将其连接之前,并不描述一个控制系统,即不代表任何系统模型。必须用信号线将各个模块图标连接成能够描述一个控制系统的所谓系统模型。1.信号线的使用信号线具有连接功能模块的作用。用鼠标箭头在“untitled”模型窗口里拖动,可以在模块的输入与输出之间直接连信号线。前面已经介绍过,为了连接两个模块,按住鼠标的左键,点击输入或输出端口,看到光标变为十字形以后,拖曳十字图形符号到另外一个端口,鼠标指针将变为双十字形状,然后放开鼠标左键。于是一根最简单的信号线即将两模块连接起来,连线的箭头方向表示信号的流向。2.向量信号线与线型设定对于向量信号线,在“untitled”模型窗口里,选中“Format”|“WideNonscalarLines”命令,线的粗细会根据在线上传输的数据是数值(scalar)还是向量(vector)而改变。如果是数值则用细线,如果是向量则用粗线。3.信号线设置标签

只要在信号线上双击鼠标左键,即可在该信号线的下部拉出一个矩形框,在矩形框内的光标处即可输入该信号线的说明标签,既可输入西文字符也可以输入汉字字符。标签的信息内容如果很多,还可以按回车键换行输入。如果标签信息有错或者不妥也可以重新选中再编辑修改。4.信号线折弯对选中的信号线,将鼠标指到线段端点的小黑块上,直到箭头指针变为“О”,按住鼠标左键,拖曳线段,即可将线段以转直角的方式折弯。如果不想以直角的方式折弯,则可以在线段的任一位置,按住“shift”键与鼠标左键,将线段以任意角度折弯。

5.信号线分支对选中的信号线,按住“Ctrl”键,并在要建立分支的地方按住鼠标左键拉出即可。另外一种方法是:将鼠标指到要引出分支的信号线段上,如果按住鼠标右键拖曳鼠标,还可拉出分支线段。6.信号线的平行移动将鼠标指到要平行移动的信号线段上,按住鼠标左键不放,鼠标指针变为十字箭头形状,水平或者垂直方向拖曳鼠标移到目的位置,放开鼠标左键,信号线的平行移动即完成。7.信号线与模块分离将鼠标指针放在想要分离的模块上,按住“Shift”键不放,再用鼠标把模块拖曳到别处,即可以把模块与连接线分离。8.信号线的删除对选中的信号线的删除操作非常简单,按“Delete”键,即可把选中的信号线删除。8.5.4创建系统模型图以上对模块及连线的操作进行了介绍,掌握了这些基本技能,就可以很方便的创建仿真系统的模型了。通常,创建仿真系统模型的具体步骤为:

激活SIMULINK;

选择所需要的模块;

用连线连接各模块;双击各模块,完成对模块的参数设置和修改。8.5.5自定义模块库和子系统在创建一个新的系统模型时,许多常用的模型要不断地重新建立,这样非常不方便;或者觉得SIMULINK原有的9类基本模块库太多,常常有许多门类模块或者某一类里的很多标准功能模块,对于解决一个特定的问题时根本用不到。基于这些原因,SIMULINK提供了自定义模块库的功能。根据解决问题的不同需要,自定义模块库既可以由9类基本模块库中的几类构成,也可以由9类基本模块库里多个标准功能模块构成。

8.5.5自定义模块库和子系统

SIMULINK4.1提供了自定义模块库与自定义子系统的功能,这两项功能都有实际意义与实用价值。1.SIMULINK窗口下自定义模块库当进行了许多系统模型的建立与分析以后,会发现每次创建一个新的系统模型时,许多常用的模型要不断地重新建立,这样非常不方便;或者觉得SIMULINK原有的9类基本模块库太多,常常有许多门类模块或者某一类里的很多标准功能模块,对于解决一个特定的问题时根本用不到。基于这些原因,SIMULINK提供了自定义模块库的功能。根据解决问题的不同需要,自定义模块库既可以由9类基本模块库中的几类构成,也可以由9类基本模块库里多个标准功能模块构成。当启动SIMULINK4.1时,打开的模块库都是“只读性”的,无法修改其中的内容,因此要先将其解锁。可以选择“Edit”|“Libraryunlock”命令,执行后就可以修改其中的内容了。

2.SIMULINK窗口下自定义子系统

SIMULINK窗口下自定义子系统可以采用两种方法,其一是采用SIMULINK4.1库浏览器“Subsystem”模块库中的“Subsystem”标准功能模块,其二是在模型窗口中执行“Edit”|“CreateSubsystem”命令的方法,无论那一种方法都可以自定义子系统。

8.5.6模型文件的保存与打开编辑好一个模型后,可以在“untitled”模型窗口中选择“File”|“Save”命令将模型以原文件名存盘。模型是以ASCII码形式存储的.mdl文件。动态结构图模型文件名可以省略扩展名,系统会自动添加上去。文件包含了该模型的所有信息,既有这个数学模型的内涵,又有其外部方框图的可见形式。也可以在“untitled”模型窗口中选择“File”|“SaveAs”命令将模型文件在设定的路径与设定的子目录下(最好的路径是MATLAB6p5\work),以一个新命名的文件名称存盘。

必须特别指出的是,如果某个文件名的.mdl文件已经存在,再次以该文件名保存内容不同的文件时,新的文件内容将覆盖原文件内容,原文件内容是不能恢复的。已经保存在计算机磁盘上的模型文件(.mdl文件)可以用多种方法打开。可以点击库浏览器里或模型窗口里的图标;也可以在模型窗口选择“File”|“Open”命令;还可以在MATLAB命令窗口里直接输入欲打开模型文件的名字(要注意:一是不要带文件扩展名;二是必须注明模型文件所在的路径与子目录),这些方法都能够打开模型文件。

控制系统的计算机仿真应用

8.6控制系统的MATLAB仿真基础8.6.1控制系统的模型表示

在MATLAB里,可用4种数学模型表示控制系统,即:传递函数模型、零极点增益模型、状态空间模型以及动态结构图。其中前3种是用数学表达式描述的,每种模型都有连续系统的及离散系统的两种类别;而动态结构图是基于传递函数的图形化形式,就是MATLAB里的SIMULINK结构图。

(1)传递函数模型不论是连续还是离散时间系统,传递函数分子/分母均按s或z的降幂排列。在MATLAB里,都可直接用分子/分母多项式系数构成的两个向量num与den表示系统,即:

num=[c0,c1,…,cm];den=[a1,a2,…,an];

在MATLAB中,用函数命令tf()来建立控制系统的传递函数模型,tf()函数命令常用的调用格式为:

sys=tf(num,den)

sys=tf(num,den,Ts)

sys=tf(M)

tfsys=tf(sys)

sys=tf(num,den)函数返回的变量sys为连续系统的传递函数模型。函数输入参量num与den分别为系统的分子与分母多项式系数向量。

sys=tf(num,den,Ts)函数返回的变量sys为离散系统的传递函数模型。Ts为采样周期,当Ts=-1或者Ts=[]时,则系统的采样周期为定义,num与den的定义同前。

sys=tf(M)函数定义一个增益为M的静态系统。tfsys=tf(sys)函数将任意的LTI对象转换成传递函数模型,缺省时使用tzero()函数将状态空间模型转换成传递函数模型,使用poly()函数将零极点增益模型转换成传递函数模型。

(2)零极点增益模型在MATLAB中,用函数命令zpk()来建立控制系统的零极点增益模型,zpk()函数的调用格式为:

sys=zpk(num,den)

sys=zpk(num,den,Ts)

sys=zpk(M)

tfsys=zpk(sys)其中:

sys=zpk(num,den)函数返回的变量sys为连续系统的零极点增益模型。函数输入参量的含义同tf()函数命令的解释。

(3)状态空间模型在MATLAB中,用函数ss()来建立控制系统的状态空间模型,或者将传递函数模型与零极点增益模型转换为系统状态空间模型。ss()函数的调用格式为:

sys=ss(a,b,c,d)

sys=ss(a,b,c,d,Ts)

sys=ss(d)

sys_ss=ss(sys)

sys=ss(a,b,c,d)函数返回的变量sys为连续系统的状态空间模型。函数输入参量a,b,c,d分别对应于系统的A,B,C,D参数矩阵。

sys=ss(a,b,c,d,Ts)函数返回的变量sys为离散系统的状态空间模型。Ts为采样周期,当Ts=-1或者Ts=[]时,则系统的采样周期未定义,a,b,c,d的定义同前。。

sys=ss(d)函数等价于sys=ss([],[],[],d)。sys_ss=ss(sys)函数是将任意的LTI对象sys转换成状态空间模型。

解决实际问题时,常常需要对自控系统的数学模型进行转换。MATLAB6.提供了前三种数学表达式数学模型(传递函数模型、零极点增益模型与状态空间模型)之间转换的函数:ss2tf(),ss2zp(),tf2ss(),tf2zp(),zp2ss(),zp2tf()。这些函数之间的转换功能可用下表说明。函数名函数功能ss2tf将系统状态空间模型转换为传递函数模型ss2zp将系统状态空间模型转换为零极点增益模型tf2ss将系统传递函数模型转换为状态空间模型tf2zp将系统传递函数模型转换为零极点增益模型zp2ss将系统零极点增益模型转换为状态空间模型zp2tf将系统零极点增益模型转换为传递函数模型

8.6.2环节方框图模型的化简系统是由多个环节组成。每个环节又是由多个元件构成的。环节在MATLAB里又叫模块。以下介绍环节方框图模型的化简。1.环节串联连接的化简使用series()函数命令,不必做多项式的乘除运算即可实现两个环节传递函数(sys1与sys2)串联连接。如果sys1=tf(num1,den1),sys2=tf(num2,den2),其命令格式为:sys=series(sysl,sys2)如果已知两个环节状态空间模型的矩阵组分别为:(a1,b1,c1,d1)与(a2,b2,c2,d2),则求两个环节串联连接等效系统状态空间模型[a,b,c,d]矩阵组的命令格式为:[a,b,c,d]=series(a1,bl,cl,dl,a2,b2,c2,d2)需要特别指出,series()函数命令还可以将多个环节按两两串联的形式多次递归调用加以连接,进行等效化简。

实际上sys=series(sysl,sys2)命令现在很少用,已由命令sys=sys1*sys2*...*sysn所取代,这样命令中不仅省掉了“series()”字符,而且可以实现多个传递函数模块的串联,一次就可以求出其等效传递函数。但值得一提的是:sys=sys1*sys2*...*sysn命令只适合于求解多个传递函数模块串联时的等效传递函数,不能用于求解状态空间模型模块串联时的等效系统状态空间模型。

2.环节并联连结的化简

parallel()函数命令可以将两个环节并联连接进行等效化简。它既适用于连续时间系统也适用于离散时间系统。parallel()函数命令调用格式有:[num,den]=parallel(numl,denl,num2,den2)实际上这个命令现在很少用,已由命令sys=sysl+sys2+...+sysn所取代,这样命令中不仅省掉了“parallel()”字符,而且可以实现多个传递函数模块的并联求其代数和,一次就可以求出其等效传递函数。parallel()函数命令调用格式还有:[a,b,c,d]=parallel(a1,bl,cl,dl,a2,b2,c2,d2)这两种命令调用格式都是将两环节的输入连接在一起并作为系统的输入。还需要指出,parallel()函数命令也可以将多个环节按两两并联递归调用加以连接,进行等效化简。3.环节反馈连结的化简两个环节的反馈连接见图9-3。控制系统环节的反馈连接及其等效化简就是模块方框图模型的反馈连接及其化简。G1(S)u(t)+反馈连接结构图-G2(S)y(t)MATLAB中的feedback()函数命令可将两个环节按反馈形式进行连接后求其等效传递函数。G1为闭环前向通道的传递函数,G2为反馈通道的传递函数。feedback()函数既适用于连续时间系统,也适用于离散时间系统。

feedback()函数命令格式为:

G=feedback(G1,G2,sign)

[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2,sign)

[num,den]=feedback(num1,den1,num2,den2,sign)

G=feedback(G1,G2,sign)函数可将两个环节按反馈方式连接起来,环节G1的所有输出均连接到环节2的输入,环节G2的所有输出均连接到环节G1的输入,sign是指到连接的符号,sign缺省时,默认为负,即sign=-1。

[num,den]=feedback(num1,den1,num2,den2,sign)可得到类似的连接,只是子系统与闭环传递函数都是用分子分母s多项式的形式表示的。现在这个命令格式很少使用了,已被G=feedback(G1,G2,s由n)格式所取代。8.6.3控制系统的性能分析的MATLAB实现1.控制系统时域分析的MATLAB实现(1)控制系统时域响应仿真的主要问题时域分析法是根据自动控制系统微分方程,用拉普拉斯变换求解动态响应的过程曲线。典型的动态过程响应有单位阶跃响应、单位斜坡响应、单位加速度响应与单位冲激响应等。时域分析的另外一个目的是求解响应的性能指标。通常将控制系统跟踪或复现阶跃输入信号响应的指标作为系统控制性能的指标。阶跃响应的一般性能指标有:峰值时间tp、超调量%、调节时间ts、及稳态误差ess。

MATLAB计算机仿真是用先进的计算机程序来实现动态响应曲线的绘制过程,既简单方便,又快捷高效而准确。此外,MATLAB仿真绘制的响应曲线,纵、横坐标都自动产生有自适应能力的精确刻度,从曲线的形状可以直接计算出响应的性能指标。(2)时域分析MATLAB实现的方法与控制系统其他的MATLAB仿真一样,时域响应MATLAB仿真的方法也有两种,一种是在MATLAB的函数指令方式下进行时域仿真;另一种是在SIMULINK窗口菜单操作方式下进行时域仿真。利用MATLAB所提供的求取连续系统的单位阶跃响应函数step(),单位冲激响应函数impulse(),零输入响应函数initial()以及其他函数都可以求出其相应的响应。MATLAB也提供了相应离散系统的单位阶跃响应函数dstep(),单位冲激响应函数dimpulse(),零输入响应函数dinitial()以及其他函数也可以求出其相应的响应。应用MATLAB提供的上述时域仿真函数与其他函数命令、语句,编制成程序,这种在MATLAB的指令方式下进行时域仿真是最常用的实现方法。①求连续系统单位阶跃响应的函数step()函数命令调用格式如下:

step(sys)

step(sys,t)

step(sysl,sys2,…,sysn)

[y,t,x]=step(sys)函数命令使用说明:

step(sys)函数用来计算系统的单位阶跃响应,可用于SISO或者MIMO的连续时间系统。LTI对象sys可以是由函数tf()、zpk()、ss()中任何一个建立的闭环系统模型。

step(sys,t)函数用于计算系统的阶跃响应,函数中,可以指定为一个仿真终止时间,此时t为一标量;也可以设置为一个时间矢量(例如用t=0:dt:Tfinal命令)。若是离散系统,时间间隔出必须与采样周期匹配。step(sysl,sys2,…,sysn)函数可同时仿真多个LTI对象。

[y,t,x]=step(sys)函数为带有输出变量引用的函数,可计算系统阶跃响应的输出数据,而不绘制出曲线。输出变量y是系统的输出响应矢量;输出变量t

为取积分值的时间矢量;输出变量x是系统的状态轨迹数据。对于MIMO系统,y的维数为:(1engthoft)*(numberofoutputs)*(numberofinputs),x的维数为:(1engthoft)*(numberofstates)*(numberofinputs)。

需要特别指出的是,输出变量[y,t,x]三个元素的顺序不能错,尤其是t

与x的顺序,如果三个元素的顺序弄错,会给与step()函数的相关计算带来错误。在MATLAB6.1版本里,这些曲线绘制时,其横、纵坐标的刻度与范围是智能化的,系统会自动设定好,一般不须人为设置。

②求连续系统单位冲激响应的函数impulse()函数命令调用格式如下:

impulse(sys)

impulse(sys,t)

impulse(sysl,sys2,…,sysN)

[y,t,x]=impulse(sys)函数命令使用说明:

impulse(sys)函数用来计算系统的单位冲激响应,可用于SISO或MIMO的连续时间系统或离散时间系统。计算离散时间系统单位冲激响应的函数为dimpulse()。sys可以是由函数tf()、zpk()、ss()中任何一个建立的系统闭环模型。

impulse(sys,t)函数用于计算系统的单位冲激响应,函数中t

可以指定为一个仿真终止时间,此时t为一标量;也可以设置为一个时间矢量。

impulse(sysl,sys2,…,sysN)函数可同时仿真多个LTI对象。

[y,t,x]=impulse(sys)函数为带有输出变量引用的函数,可计算系统单位冲激响应的输出数据,而不绘制出曲线。y,t,x

的其他解释同step()函数的。

③求连续系统零输入响应的函数initial()函数命令调用格式如下:

[y,t,x]=initial(sys)

initial(sys,x0)

initial(sys,x0,t)

initial(sysl,sys2,…,sysN,x0)函数命令使用说明:

initial(sys,x0)函数用来计算系统的零输入响应,x0为初始状态。需要特别指出,sys系统必须是由矩阵组(A,B,C,D)描述的状态空间模型。

initial(sys,x0,t)函数用于计算系统的零输入响应,函数中,可以指定为一个仿真终止时间,此时t为一标量;也可以设置为一个时间矢量。

initial(sysl,sys2,…,sysN,x0)函数可同时仿真多个LTI对象。

必须特别指出的是,如果某个文件名的.mdl文件已经存在,再次以该文件名保存内容不同的文件时,新的文件内容将覆盖原文件内容,原文件内容是不能恢复的。已经保存在计算机磁盘上的模型文件(.mdl文件)可以用多种方法打开。可以点击库浏览器里或模型窗口里的图标;也可以在模型窗口选择“File”|“Open”命令;还可以在MATLAB命令窗口里直接输入欲打开模型文件的名字(要注意:一是不要带文件扩展名;二是必须注明模型文件所在的路径与子目录),这些方法都能够打开模型文件。

2.控制系统频域分析的MATLAB实现(1)控制系统频域响应仿真的主要问题对于频域分析,本书论述的MATLAB仿真就是用先进的计算机仿真技术来精确绘制Bode图、Nyquist曲线图、Nichols曲线图等三种曲线,并计算系统的频域性能指标:剪切频率(也叫截止频率)、-

穿越频率、相角稳定裕度

、幅值稳定裕度,以便研究系统控制过程的稳定性、快速性及稳态精度等性能。(2)频域分析MATLAB实现的方法频域分析在经典控制里占有重要的地位。传统的频域分析方法是计算数据,绘制Bode图,并求出频域性能指标。这种老办法要耗费大量的时间、精力,而且计算数据的精确度还不一定能够得到保证。借助于计算机及其软件,特别是利用MATLAB软件,运行它提供频率分析的函数,能够方便、简单、快捷地绘制三种曲线:Bode图、Nyquist曲线和Nichols曲线图,并计算出频域性能指标,还可以借助于这些曲线对系统进行分析。

①求连续系统Bode图的函数bode()函数命令调用格式:

[mag,phase,w]=bode(sys)

bode(sys)

bode(sys,w)

bode(sysl,sys2,…,sysn)

bode(sysl,sys2,…,sysn,w)函数命令使用说明:

bode(sys)函数用来计算并显示绘制的系统Bode图,LTI对象sys可以是由函数tf()、zpk()、ss()中任何一个函数建立的系统开环模型。

bode(sys,w)函数用于显示绘制的系统Bode图,函数中输入参数w用来定义绘制Bode图时的频率范围或者频率点。

bode(sysl,sys2,…,sysn,w)函数可同时在一个窗口绘制多个LTI对象的Bode图。

②求离散系统Bode图的函数dbode()函数命令调用格式:[mag,phase,w]=dbode(a,b,c,d,Ts)[mag,phase,w]=dbode(a,b,c,d,Ts,iu)[mag,phase,w]=dbode(a,b,c,d,Ts,iu,w)[mag,phase,w]=dbode(num,den,Ts)[mag,phase,w]=dbode(num,den,Ts,w)③计算(绘制)系统Nyquist曲线的函数nyquist()函数命令调用格式:[re,im,w]=nyquist(sys)nyquist(sys)nyquist(sys,w)nyquist(sysl,sys2,…,sysn)

nyquist(sysl,sys2,…,sysn,w)

④求连续系统Nichols曲线的函数nichols()函数命令的调用格式:[mag,phase,w]=nichols(sys)nichols(sys)nichols(sys,w)nichols(sysl,sys2,…,sysn)nichols(sysl,sys2,…,sysn,w)⑤求系统幅值裕度与相位裕度的函数margin()函数命令的调用格式:[Gm,Pm,Wcp,Wcg]=margin(sys)[Gm,Pm,Wcp,Wcg]=margin(mag,phase,w)margin(sys)margin(mag,phase,w)8.7

控制系统的SIMULINK仿真8.7.1设置SIMULINK仿真参数在仿真之前通常要对仿真参数进行设置,这就是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论