还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
控制系统的MATLAB仿真1MATLAB简介MATLAB是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简单的优秀工程计算应用软件MATLAB不仅可以处理代数问题和数值分析问题,而且还具有强大的图形处理及仿真模拟等功能从而能够很好的帮助工程师及科学家解决实际的技术问题MATLAB的含义是矩阵实验室(MatrixLaboratory),最初主要用于方便矩阵的存取,其基本元素是无需定义维数的矩阵经过十几年的扩充和完善,现已发展成为包含大量实用工具箱(Toolbox)的综合应用软件,不仅成为线性代数课程的标准工具,而且适合具有不同专业研究方向及工程应用需求的用户使用MATLAB最重要的特点是易于扩展它允许用户自行建立完成指定功能的扩展MATLAB函数(称为M文件),从而构成适合于其它领域的工具箱,大大扩展了MATLAB的应用范围目前,MATLAB已成为国际控制界最流行的软件,控制界很多学者将自己擅长的CAD方法用MATLAB加以实现,出现了大量的MATLAB配套工具箱,如控制系统工具箱(controlsystemstoolbox),系统识别工具箱(systemidentificationtoolbox),鲁棒控制工具箱(robustcontroltoolbox),信号处理工具箱(signalprocessingtoolbox)以及仿真环境SIMULINK等
(1) MATLAB的安装本节将讨论操作系统为MicrosoftWindows环境下安装MATLAB6的过程将MATLAB6的安装盘放入光驱,系统将自动运行auto-run.bat文件,进行安装;也可以执行安装盘内的setup.exe文件启动MATLAB的安装程序启动安装程序后,屏幕将显示安装MATLAB的初始界面,根据Windows安装程序的常识,不断单击[Next]输入正确的安装信息,具体操作过程如下输入正确的用户注册信息码;选择接收软件公司的协议;输入用户名和公司名;选择MATLAB组件(Toolbox);选择软件安装路径和目录;单击[Next]按钮进入正式的安装界面安装过程界面如图1所示图1 MATLAAB安装过程界面图2 MATLAAB启动过程界面安装完毕后,选择[Restartmycomputernow]选项以重新启动计算机重新启动计算机后,用户就可以点击图标使用MATLAB6了MATLAB启动过程界面如图2所示
(2) MATLAB桌面系统MATLAB的桌面系统由桌面平台以及桌面组件共同构成,如图3桌面平台是各桌面组件的展示平台,它提供了一系列的菜单操作以及工具栏操作,而不同功能的桌面组件构成了整个MATLAB操作平台其组件主要包含如下8个组件部分
①命令窗口(CommandWindow)
②历史命令窗口(CommandHistory)
③组件平台(LaunchPad)
④路径浏览器(CurrentDirectoryBrowser)
⑤帮助浏览器(HelpBrowser)
⑥工作空间浏览器(WorkspaceBrowser)
⑦数组编辑器(ArrayEditor)
⑧M文件编辑调试器(Editor-Debugger) 用户可以在View菜单下选择打开或关闭某个窗口图3 MATLAB桌面平台
(3)MATLAB命令窗口MATLAB可以认为是一种解释性语言在MATLAB命令窗口中,标志为命令提示符,在命令提示符后面键入一个MATLAB命令时,MATLAB会立即对其进行处理,并显示处理结果这种方式简单易用,但在编程过程中要修改整个程序比较困难,并且用户编写的程序不容易保存如果想把所有的程序输入完再运行调试,可以用鼠标点击快捷或File|New|M-file菜单,在弹出的编程窗口中逐行输入命令,输入完毕后点击Debug|Run或F5运行整个程序运行过程中的错误信息和运行结果显示在命令窗口中整个程序的源代码可以保存为扩展名为“.m”的M文件在介绍MATLAB的强大计算和图象处理功能前,我们可以先运行一个简单的程序设系统的闭环传递函数为:求系统的时域响应图,可输入下面的命令num=
[14];den=
[128];stepnumden图4 动态响应时域图程序运行后会在一个新的窗口中显示出系统的时域动态响应曲线,如图4用鼠标左键点击动态响应曲线的某一点,系统会提示其响应时间和幅值按住左键在曲线上移动鼠标的位置可以很容易的根据幅值观察出上升时间、调节时间、峰值及峰值时间,进而求出超调量如果想求根轨迹,可将程序的第三行变为rlocusnumden,求伯德图可改为bodenumden所不同的是,在根轨迹和伯德图中,Gs为开环传递函数MATLAB的语法规则类似于C语言,变量名、函数名都与大小写有关,即变量A和a是两个完全不同的变量应该注意所有的函数名均由小写字母构成MATLAB是一个功能强大的工程应用软件,它提供了相当丰富的帮助信息,同时也提供了多种获得帮助的方法如果用户第一次使用MATLAB,则建议首先在提示符下键入DEMO命令,它将启动MATLAB的演示程序用户可以在此演示程序中领略MATLAB所提供的强大的运算和绘图功能2 MATLAB基本操作命令本节简单介绍与本书内容相关的一些基本知识和操作命令
(1)简单矩阵的输入MATLAB是一种专门为矩阵运算设计的语言,所以在MATLAB中处理的所有变量都是矩阵这就是说,MATLAB只有一种数据形式,那就是矩阵,或者数的矩形阵列标量可看作为1×1的矩阵,向量可看作为n×1或1×n的矩阵这就是说,MATLAB语言对矩阵的维数及类型没有限制,即用户无需定义变量的类型和维数,MATLAB会自动获取所需的存储空间输入矩阵最便捷的方式为直接输入矩阵的元素,其定义如下
(1)元素之间用空格或逗号间隔;
(2)用中括号([])把所有元素括起来;
(3)用分号(;)指定行结束例如,在MATLAB的工作空间中,输入则输出结果为 矩阵a被一直保存在工作空间中,以供后面使用,直至修改它MATLAB的矩阵输入方式很灵活,大矩阵可以分成n行输入,用回车符代替分号或用续行符号(…)将元素续写到下一行例如以上三种输入方式结果是相同的一般若长语句超出一行,则换行前使用续行符号(…)在MATLAB中,矩阵元素不限于常量,可以采用任意形式的表达式同时,除了直接输入方式之外,还可以采用其它方式输入矩阵,如
(1)利用内部语句或函数产生矩阵;
(2)利用M文件产生矩阵;
(3)利用外部数据文件装入到指定矩阵
(2)MATLAB图形窗口当调用了一个产生图形的函数时,MATLAB会自动建立一个图形窗口这个窗口还可分裂成多个窗口,并可在它们之间选择,这样在一个屏上可显示多个图形图形窗口中的图形可通过打印机打印出来若想将图形导出并保存,可用鼠标点击菜单File|Export导出格式可选emp、bmp、jpg等命令窗口的内容也可由打印机打印出来如果事先选择了一些内容,则可打印出所选择的内容;如果没有选择内容,则可打印出整个工作空间的内容
(3)剪切板的使用利用Windows的剪切板可在MATLAB与其它应用程序之间交换信息
(1)要将MATLAB的图形移到其它应用程序,首先按Alt-PrintScreen键,将图形复制到剪切板中,然后激活其它应用程序,选择edit(编辑)中的paste(粘贴),就可以在应用程序中得到MATLAB中的图形当然还可以借助于copytoBitmap 或copytoMetafile 选项来传递图形信息
(2)要将其它应用程序中的数据传递到MATLAB,应先将数据放入剪切板,然后在MATLAB中定义一个变量来接收如键入 q=[然后选择Edit中的paste,最后加上“]”这样可将应用程序中的数据送入MATLAB的q变量中
(4)MATLAB编程指南MATLAB的编程效率比BASIC、C、FORTRAN和PASCAL等语言要高,且易于维护在编写小规模的程序时,可直接在命令提示符后面逐行输入,逐行执行对于较复杂且经常重复使用的程序,可按
7.
1.3介绍的方法进入程序编辑器编写M文件M文件是用MATLAB语言编写的可在MATLAB环境中运行的磁盘文件它为脚本文件(ScriptFile)和函数文件(FunctionFile)这两种文件的扩展名都是.m
(1)脚本文件是将一组相关命令编辑在一个文件中,也称命令文件脚本文件的语句可以访问MATLAB工作空间中的所有数据,运行过程中产生的所有变量都是全局变量例如下述语句如果以.m为扩展名存盘,就构成了M脚本文件我们不妨将其文件名取为“Step_Response”%用于求取一阶跃响应num=
[14];den=
[128];stepnumden当你键入helpStep_Response时,屏幕上将显示文件开头部分的注释用于求取一阶跃响应很显然,在每一个M文件的开头,建立详细的注释是非常有用的由于MATLAB提供了大量的命令和函数,想记住所有函数及调用方法一般不太可能,通过联机帮助命令help可容易地对想查询的各个函数的有关信息进行查询该命令使用格式为 help 命令或函数名注意若用户把文件存放在自己的工作目录上,在运行之前应该使该目录处在MATLAB的搜索路径上当调用时,只需输入文件名,MATLAB就会自动按顺序执行文件中的命令
(2)函数文件是用于定义专用函数的,文件的第一行是以function作为关键字引导的,后面为注释和函数体语句函数就像一个黑箱,把一些数据送进去,经加工处理,再把结果送出来在函数体内使用的除返回变量和输入变量这些在第一行functon语句中直接引用的变量外,其它所有变量都是局部变量,执行完后,这些内部变量就被清除了函数文件的文件名与函数名相同(文件名后缀为.m)它的执行与命令文件不同,不能键入其文件名来运行函数,M函数必须由其它语句来调用,这类似于C语言的可被其它函数调用的子程序M函数文件一旦建立,就可以同MATLAB基本函数库一样加以使用例1 求一系列数的平均数,该函数的文件名为“mean.m”functiony=meanx%这是一个用于求平均数的函数w=lengthx;%length函数表示取向量x的长度y=sumx/w; %sun函数表示求各元素的和该文件第一行为定义行,指明是mean函数文件,y是输出变量,x是输入变量,其后的%开头的文字段是说明部分真正执行的函数体部分仅为最后二行其中变量w是局部变量,程序执行完后,便不存在了在MATLAB命令窗口中键入r=1:10; %表示r变量取1到10共10个数meanr运行结果显示 ans=
5.5000 该例就是直接使用了所建立的M函数文件,求取数列r的平均数3MATLAB在控制系统中的应用MATLAB是国际控制界目前使用最广的工具软件,几乎所有的控制理论与应用分支中都有MATLAB工具箱本节结合前面所学自控理论的基本内容,采用控制系统工具箱(ControlSystemsToolbox)和仿真环境(Simulink),学习MATLAB的应用
(1)用MATLAB建立传递函数模型1.有理函数模型线性系统的传递函数模型可一般地表示为 1将系统的分子和分母多项式的系数按降幂的方式以向量的形式输入给两个变量和,就可以轻易地将传递函数模型输入到MATLAB环境中命令格式为;
(2);
(3)在MATLAB控制系统工具箱中,定义了tf函数,它可由传递函数分子分母给出的变量构造出单个的传递函数对象从而使得系统模型的输入和处理更加方便该函数的调用格式为 G=tfnum,den;
(4)例2 一个简单的传递函数模型: 可以由下面的命令输入到MATLAB工作空间中去 num=[1,5];den=[1,2,3,4,5];G=tfnum,den运行结果Transferfunction:s+5-----------------------------s^4+2s^3+3s^2+4s+5这时对象G可以用来描述给定的传递函数模型作为其它函数调用的变量例3 一个稍微复杂一些的传递函数模型该传递函数模型可以通过下面的语句输入到MATLAB工作空间num=6*[1,5]; den=convconv[1,3,1],[1,3,1],[1,6]; tfnumden运行结果Transferfunction:6s+30-----------------------------------------s^5+12s^4+47s^3+72s^2+37s+6其中conv函数(标准的MATLAB函数)用来计算两个向量的卷积,多项式乘法当然也可以用这个函数来计算该函数允许任意地多层嵌套,从而表示复杂的计算
2.零极点模型线性系统的传递函数还可以写成极点的形式
(5)将系统增益、零点和极点以向量的形式输入给三个变量、Z和P,就可以将系统的零极点模型输入到MATLAB工作空间中,命令格式为67 8在MATLAB控制工具箱中,定义了zpk函数,由它可通过以上三个MATLAB变量构造出零极点对象,用于简单地表述零极点模型该函数的调用格式为
3.反馈系统结构图模型设反馈系统结构图如图5所示图5 反馈系统结构图 控制系统工具箱中提供了feedback函数,用来求取反馈连接下总的系统模型,该函数调用格式如下 G=feedbackG1G2sign;
(10)其中变量sign用来表示正反馈或负反馈结构,若sign=-1表示负反馈系统的模型,若省略sign变量,则仍将表示负反馈结构G1和G2分别表示前向模型和反馈模型的LTI线性时不变对象例5 若反馈系统图5中的两个传递函数分别为 , 则反馈系统的传递函数可由下列的MATLAB命令得出G1=tf1
[121];G2=tf1
[11];G=feedbackG1G2运行结果:Transferfunction:s+1---------------------s^3+3s^2+3s+2若采用正反馈连接结构输入命令G=feedbackG1G21则得出如下结果:Transferfunction:s+1-----------------s^3+3s^2+3s
5.Simulink建模方法在一些实际应用中,如果系统的结构过于复杂,不适合用前面介绍的方法建模在这种情况下,功能完善的Simulink程序可以用来建立新的数学模型Simulink是由MathWorks软件公司1990年为MATLAB提供的新的控制系统模型图形输入仿真工具它具有两个显著的功能Simul仿真与Link连接,亦即可以利用鼠标在模型窗口上“画”出所需的控制系统模型然后利用SIMULINK提供的功能来对系统进行仿真或线性化分析与MATLAB中逐行输入命令相比,这样输入更容易,分析更直观下面简单介绍SIMULINK建立系统模型的基本步骤
(1)SIMULINK的启动在MATLAB命令窗口的工具栏中单击按钮或者在命令提示符下键入simulink命令,回车后即可启动Simulink程序启动后软件自动打开Simullink模型库窗口,如图7所示这一模型库中含有许多子模型库,如Sources输入源模块库、Sinks输出显示模块库、Nonlinear非线性环节等若想建立一个控制系统结构框图,则应该选择File|New菜单中的Model选项,或选择工具栏上newModel按钮,打开一个空白的模型编辑窗口如图8所示图7 simulink模型库图8 模型编辑窗口2画出系统的各个模块打开相应的子模块库,选择所需要的元素,用鼠标左键点中后拖到模型编辑窗口的合适位置3给出各个模块参数由于选中的各个模块只包含默认的模型参数,如默认的传递函数模型为1/s+1的简单格式,必须通过修改得到实际的模块参数要修改模块的参数,可以用鼠标双击该模块图标,则会出现一个相应对话框,提示用户修改模块参数4画出连接线当所有的模块都画出来之后,可以再画出模块间所需要的连线,构成完整的系统模块间连线的画法很简单,只需要用鼠标点按起始模块的输出端(三角符号),再拖动鼠标,到终止模块的输入端释放鼠标键,系统会自动地在两个模块间画出带箭头的连线若需要从连线中引出节点,可在鼠标点击起始节点时按住Ctrl键,再将鼠标拖动到目的模块5指定输入和输出端子在Simulink下允许有两类输入输出信号,第一类是仿真信号,可从source输入源模块库图标中取出相应的输入信号端子,从Sink输出显示模块库图标中取出相应输出端子即可第二类是要提取系统线性模型,则需打开Connection连接模块库图标,从中选取相应的输入输出端子例9 典型二阶系统的结构图如图9所示用SIMULINK对系统进行仿真分析 图9 典型二阶系统结构图 按前面步骤,启动simulink并打开一个空白的模型编辑窗口
(1)画出所需模块,并给出正确的参数在sources子模块库中选中阶跃输入(step)图标,将其拖入编辑窗口,并用鼠标左键双击该图标,打开参数设定的对话框,将参数steptime阶跃时刻设为0在Math数学子模块库中选中加法器(sum)图标,拖到编辑窗口中,并双击该图标将参数Listofsigns符号列表设为|+-(表示输入为正,反馈为负)在continuous连续子模块库中、选积分器(Integrator)和传递函数(TransferFcn)图标拖到编辑窗口中,并将传递函数分子(Numerator)改为〔900〕,分母(Denominator)改为〔1,9〕在sinks输出子模块库中选择scope示波器和Out1输出端口模块图标并将之拖到编辑窗口中
(3)将画出的所有模块按图9用鼠标连接起来,构成一个原系统的框图描述如图10所示
(4)选择仿真算法和仿真控制参数,启动仿真过程●在编辑窗口中点击Simulation|Simulationparameters菜单,会出现一个参数对话框,在solver模板中设置响应的仿真范围StartTime开始时间和StopTime终止时间,仿真步长范围Maxinumstepsize最大步长和Mininumstepsize最小步长对于本例,StopTime可设置为2最后点击Simulation|Start菜单或点击相应的热键启动仿真双击示波器,在弹出的图形上会“实时地”显示出仿真结果输出结果如图11所示图10二阶系统的simulink实现在命令窗口中键入whos命令,会发现工作空间中增加了两个变量――tout和yout,这是因为Simulink中的Out1模块自动将结果写到了MATLAB的工作空间中利用MATLAB命令plottoutyout可将结果绘制出来,如图12所示比较11和12,可以发现这两种输出结果是完全一致的图11仿真结果示波器显示2利用MATLAB进行时域分析
1.线性系统稳定性分析线性系统稳定的充要条件是系统的特征根均位于S平面的左半部分系统的零极点模型可以直接被用来判断系统的稳定性另外,MATLAB语言中提供了有关多项式的操作函数,也可以用于系统的分析和计算例11设传递函数为 该传递函数的部分分式展开由以下命令获得num=
[2536];den=
[16116];[rpk]=residuenumden命令窗口中显示如下结果r=p=k=-
6.0000-
3.00002-
4.0000-
2.
00003.0000-
1.0000中留数为列向量r,极点为列向量p,余项为行向量k由此可得出部分分式展开式例12设传递函数为则部分分式展开由以下命令获得v=[-1-1-1]num=
[0123];den=polyv;[rpk]=residuenumden结果显示r=
1.
00000.
00002.0000p=-
1.0000-
1.0000-
1.0000k=[]其中由poly命令将分母化为标准降幂排列多项式系数向量denk=[]为空矩阵由上可得展开式为
(5)由传递函数求零点和极点在MATLAB控制系统工具箱中,给出了由传递函数对象G求出系统零点和极点的函数,其调用格式分别为Z=tzeroG18P=G.P{1}19注意式19中要求的G必须是零极点模型对象,且出现了矩阵的点运算“.”和大括号{}表示的矩阵元素,详细内容参阅后面章节例13已知传递函数为输入如下命令 num=[
6.
861.
295.2];den=[
17.
52219.50];G=tfnumden;G1=zpkG;Z=tzeroGP=G
1.P{1}结果显示 Z=-7-2P=0-
3.0000+
2.0000i -
3.0000-
2.0000i -
1.5000其结果与例8完全一致
(6)零极点分布图在MATLAB中,可利用pzmap函数绘制连续系统的零、极点图,从而分析系统的稳定性,该函数调用格式为pzmapnumden20例14给定传递函数:利用下列命令可自动打开一个图形窗口,显示该系统的零、极点分布图,如图13所示num=
[32546];den=
[134272];pzmapnumdentitle¹Pole-ZeroMap¹ %图形标题图13MATLAB函数零、极点分布图
2.系统动态特性分析
(1)时域响应解析算法――部分分式展开法用拉氏变换法求系统的单位阶跃响应,可直接得出输出ct随时间t变化的规律,对于高阶系统,输出的拉氏变换象函数为
(21)对函数cs进行部分分式展开,我们可以用num[den0]来表示cs的分子和分母例15给定系统的传递函数用以下命令对进行部分分式展开num=
[172424]den=
[110355024][rpk]=residuenum[den0]输出结果为r=p=k= -
1.0000-
4.0000[]
2.0000-
3.0000 -
1.0000-
2.0000-
1.0000-
1.0000
1.00000输出函数cs为拉氏变换得
(2)单位阶跃响应的求法控制系统工具箱中给出了一个函数step来直接求取线性系统的阶跃响应,如果已知传递函数为则该函数可有以下几种调用格式stepnumden 22stepnumdent 23或stepG 24stepGt 25该函数将绘制出系统在单位阶跃输入条件下的动态响应图,同时给出稳态值对于式23和25,t为图像显示的时间长度,是用户指定的时间向量式22和24的显示时间由系统根据输出曲线的形状自行设定如果需要将输出结果返回到MATLAB工作空间中,则采用以下调用格式c=stepG26此时,屏上不会显示响应曲线,必须利用plot命令去查看响应曲线plot可以根据两个或多个给定的向量绘制二维图形,详细介绍可以查阅后面的章节例16已知传递函数为 利用以下MATLAB命令可得阶跃响应曲线如图14所示图14MATLAB绘制的响应曲线num=
[0025]; den=
[1425];stepnumdengrid %绘制网格线title¹Unit-StepResponseofGs=25/s^2+4s+25¹%图像标题我们还可以用下面的语句来得出阶跃响应曲线G=tf
[0025]
[1425];t=0:
0.1:5; %从0到5每隔
0.1取一个值c=stepGt; %动态响应的幅值赋给变量cplottc %绘二维图形,横坐标取t纵坐标取cCss=dcgainG %求取稳态值系统显示的图形类似于上一个例子,在命令窗口中显示了如下结果Css= 1例21 给定单位负反馈系统的开环传递函数为 试画出伯德图利用以下MATLAB程序,可以直接在屏幕上绘出伯德图如图20num=10*
[11];den=
[170];bodenumdengridtitle′BodeDiagramofGs=10*s+1/[ss+7]′该程序绘图时的频率范围是自动确定的,从
0.01弧度/秒到30弧度/秒,且幅值取分贝值,轴取对数,图形分成2个子图,均是自动完成的图20 自动产生频率点画出的伯德图。