资源描述
!-
控制系统的MATLAB仿真
1 MATLAB简介
MATLAB是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简单的优秀工程计算应用软件。MATLAB不仅可以处理代数问题和数值分析问题,而且还具有强大的图形处理及仿真模拟等功能。从而能够很好的帮助工程师及科学家解决实际的技术问题。
MATLAB的含义是矩阵实验室(Matrix Laboratory),最初主要用于方便矩阵的存取,其基本元素是无需定义维数的矩阵。经过十几年的扩充和完善,现已发展成为包含大量实用工具箱(Toolbox)的综合应用软件,不仅成为线性代数课程的标准工具,而且适合具有不同专业研究方向及工程应用需求的用户使用。
MATLAB最重要的特点是易于扩展。它允许用户自行建立完成指定功能的扩展MATLAB函数(称为M文件),从而构成适合于其它领域的工具箱,大大扩展了MATLAB的应用范围。目前,MATLAB已成为国际控制界最流行的软件,控制界很多学者将自己擅长的CAD方法用MATLAB加以实现,出现了大量的MATLAB配套工具箱,如控制系统工具箱(control systems toolbox),系统识别工具箱(system identification toolbox),鲁棒控制工具箱(robust control toolbox),信号处理工具箱(signal processing toolbox)以及仿真环境SIMULINK等。
(1) MATLAB的安装
本节将讨论操作系统为Microsoft Windows环境下安装MATLAB6的过程。
将MATLAB6的安装盘放入光驱,系统将自动运行auto-run.bat文件,进行安装;也可以执行安装盘内的setup.exe文件启动MATLAB的安装程序。启动安装程序后,屏幕将显示安装MATLAB的初始界面,根据Windows安装程序的常识,不断单击[Next],输入正确的安装信息,具体操作过程如下:
输入正确的用户注册信息码;
选择接收软件公司的协议;
输入用户名和公司名;
选择MATLAB组件(Toolbox);
选择软件安装路径和目录;
单击[Next]按钮进入正式的安装界面。安装过程界面如图1所示。
图1 MATLAAB安装过程界面
图2 MATLAAB启动过程界面
安装完毕后,选择[Restart my computer now]选项以重新启动计算机。
重新启动计算机后,用户就可以点击图标使用MATLAB6了。MATLAB启动过程界面如图2所示。
(2) MATLAB桌面系统
MATLAB的桌面系统由桌面平台以及桌面组件共同构成,如图3。桌面平台是各桌面组件的展示平台,它提供了一系列的菜单操作以及工具栏操作,而不同功能的桌面组件构成了整个MATLAB操作平台。其组件主要包含如下8个组件部分:
①命令窗口(Command Window)②历史命令窗口(Command History)③组件平台(Launch Pad)④路径浏览器(Current Directory Browser)⑤帮助浏览器(Help Browser)⑥工作空间浏览器(Workspace Browser)⑦数组编辑器(Array Editor)⑧M文件编辑调试器(Editor-Debugger)。
用户可以在View菜单下选择打开或关闭某个窗口。
图3 MATLAB桌面平台
(3) MATLAB命令窗口
MATLAB可以认为是一种解释性语言。在MATLAB命令窗口中,标志>>为命令提示符,在命令提示符后面键入一个MATLAB命令时,MATLAB会立即对其进行处理,并显示处理结果。
这种方式简单易用,但在编程过程中要修改整个程序比较困难,并且用户编写的程序不容易保存。如果想把所有的程序输入完再运行调试,可以用鼠标点击快捷或File|New|M-file菜单,在弹出的编程窗口中逐行输入命令,输入完毕后点击Debug|Run(或F5)运行整个程序。运行过程中的错误信息和运行结果显示在命令窗口中。整个程序的源代码可以保存为扩展名为“.m”的M文件。
在介绍MATLAB的强大计算和图象处理功能前,我们可以先运行一个简单的程序。
设系统的闭环传递函数为:
求系统的时域响应图,可输入下面的命令:
>> num=[1,4];
den=[1,2,8];
step(num,den)
图4 动态响应时域图
程序运行后会在一个新的窗口中显示出系统的时域动态响应曲线,如图4。用鼠标左键点击动态响应曲线的某一点,系统会提示其响应时间和幅值。按住左键在曲线上移动鼠标的位置可以很容易的根据幅值观察出上升时间、调节时间、峰值及峰值时间,进而求出超调量。如果想求根轨迹,可将程序的第三行变为rlocus(num,den),求伯德图可改为bode(num,den)。所不同的是,在根轨迹和伯德图中,G(s)为开环传递函数。
MATLAB的语法规则类似于C语言,变量名、函数名都与大小写有关,即变量A和a是两个完全不同的变量。应该注意所有的函数名均由小写字母构成。
MATLAB是一个功能强大的工程应用软件,它提供了相当丰富的帮助信息,同时也提供了多种获得帮助的方法。如果用户第一次使用MATLAB,则建议首先在>>提示符下键入DEMO命令,它将启动MATLAB的演示程序。用户可以在此演示程序中领略MATLAB所提供的强大的运算和绘图功能。
2 MATLAB基本操作命令
本节简单介绍与本书内容相关的一些基本知识和操作命令。
(1)简单矩阵的输入
MATLAB是一种专门为矩阵运算设计的语言,所以在MATLAB中处理的所有变量都是矩阵。这就是说,MATLAB只有一种数据形式,那就是矩阵,或者数的矩形阵列。标量可看作为11的矩阵,向量可看作为n1或1n的矩阵。这就是说,MATLAB语言对矩阵的维数及类型没有限制,即用户无需定义变量的类型和维数,MATLAB会自动获取所需的存储空间。
输入矩阵最便捷的方式为直接输入矩阵的元素,其定义如下:
(1) 元素之间用空格或逗号间隔;
(2) 用中括号([])把所有元素括起来;
(3) 用分号(;)指定行结束。
例如,在MATLAB的工作空间中,输入:
>>
则输出结果为:
矩阵a被一直保存在工作空间中,以供后面使用,直至修改它。
MATLAB的矩阵输入方式很灵活,大矩阵可以分成n行输入,用回车符代替分号或用续行符号(…)将元素续写到下一行。例如:
以上三种输入方式结果是相同的。一般若长语句超出一行,则换行前使用续行符号(…)。
在MATLAB中,矩阵元素不限于常量,可以采用任意形式的表达式。同时,除了直接输入方式之外,还可以采用其它方式输入矩阵,如:
(1) 利用内部语句或函数产生矩阵;
(2) 利用M文件产生矩阵;
(3) 利用外部数据文件装入到指定矩阵。
(2)复数矩阵输入
MATLAB允许在计算或函数中使用复数。输入复数矩阵有两种方法:
(1) a=[12;34]+i*[56;78]
(2) a=[1+5i 2+6i;3+7i 4+8i]
注意,当矩阵的元素为复数时,在复数实部与虚部之间不允许使用空格符。如1 +5i将被认为是1和5i两个数。另外,MATLAB表示复数时,复数单位也可以用j。
(3) MATLAB语句和变量
MATLAB是一种描述性语言。它对输入的表达式边解释边执行,就象BASIC语言中直接执行语句一样。
MATLAB语句的常用格式为:
变量=表达式[;]
或简化为:
表达式[;]
表达式可以由操作符、特殊符号、函数、变量名等组成。表达式的结果为一矩阵,它赋给左边的变量,同时显示在屏幕上。如果省略变量名和“=”号,则MATLAB自动产生一个名为ans的变量来表示结果,如:
1900∕81
结果为:
ans 是MATLAB提供的固定变量,具有特定的功能,是不能由用户清除的。常用的固定变量还有eps、pi、Inf、NaN等。其特殊含义可以用7.2.10节介绍的方法查阅帮助。
MATAB允许在函数调用时同时返回多个变量,而一个函数又可以由多种格式进行调用,语句的典型格式可表示为:
[返回变量列表]=fun-name(输入变量列表)
例如用bode()函数来求取或绘制系统的Bode图,可由下面的格式调用:
其中变量num、den表示系统传递函数分子和分母,W表示指定频段,mag为计算幅值,phase为计算相角。
(4)语句以“%”开始和以分号“;”结束的特殊效用
在MATLAB中以“%”开始的程序行,表示注解和说明。符号“%”类似于C++中的“//”。这些注解和说明是不执行的。这就是说,在MATLAB程序行中,出现“%”以后的一切内容都是可以忽略的。
分号用来取消打印,如果语句最后一个符号是分号,则打印被取消,但是命令仍在执行,而结果不再在命令窗口或其它窗口中显示。这一点在M文件中大量采用,以抑制不必要的信息显示。
(5)获取工作空间信息
MATLAB开辟有一个工作空间,用于存储已经产生的变量。变量一旦被定义,MATLAB系统会自动将其保存在工作空间里。在退出程序之前,这些变量将被保留在存储器中。
为了得到工作空间中的变量清单,可以在命令提示符>>后输入who 或 whos 命令,当前存放在工作空间的所有变量便会显示在屏幕上。
命令clear能从工作空间中清除所有非永久性变量。如果只需要从工作空间中清除某个特定变量,比如“x”,则应输入命令clear x。
(6)常数与算术运算符
MATLAB采用人们习惯使用的十进制数。如:
3 –99 0.0001 9.6397238
2i -3.14159i 3e5i
其中 。
数值的相对精度为eps,它是一个符合IEEE标准的16位长的十进制数,其范围为:。
MATLAB提供了常用的算术运算符:+,-,,∕(﹨),^(幂指数)。
应该注意:(∕)右除法和(﹨)左除法这两种符号对数值操作时,其结果相同,其斜线下为分母,如1∕4与4﹨1,其结果均为0.25,但对矩阵操作时,左、右除法是有区别的。
(7)选择输出格式
输出格式是指数据显示的格式,MATLAB提供format命令可以控制结果矩阵的显示,而不影响结果矩阵的计算和存储。所有计算都是以双精度方式完成的。
(1) 如果矩阵的所有元素都是整数,则矩阵以不带小数点的格式显示。
如输入:
则显示:
(2) 如果矩阵中至少有一个元素不是整数,则有多种输出格式。常见格式有以下四种:
① format short(短格式,也是系统默认格式)
② format short e(短格式科学表示)
③ format long(长格式)
④ format long e(长格式科学表示)
如:
对于以上四种格式,其显示结果分别为:
短格式5位表示
短格式科学表示
长格式16位表示
长格式科学表示
一旦调用了某种格式,则这种被选用的格式将保持,直到对格式进行了改变为止。
(8)MATLAB图形窗口
当调用了一个产生图形的函数时,MATLAB会自动建立一个图形窗口。这个窗口还可分裂成多个窗口,并可在它们之间选择,这样在一个屏上可显示多个图形。
图形窗口中的图形可通过打印机打印出来。若想将图形导出并保存,可用鼠标点击菜单File|Export,导出格式可选emp、bmp、jpg等。命令窗口的内容也可由打印机打印出来:如果事先选择了一些内容,则可打印出所选择的内容;如果没有选择内容,则可打印出整个工作空间的内容。
(9)剪切板的使用
利用Windows的剪切板可在MATLAB与其它应用程序之间交换信息。
(1) 要将MATLAB的图形移到其它应用程序,首先按Alt-Print Screen键,将图形复制到剪切板中,然后激活其它应用程序,选择edit(编辑)中的paste(粘贴),就可以在应用程序中得到MATLAB中的图形。当然还可以借助于copy to Bitmap 或copy to Metafile 选项来传递图形信息。
(2) 要将其它应用程序中的数据传递到MATLAB,应先将数据放入剪切板,然后在MATLAB中定义一个变量来接收。
如键入: q=[
然后选择Edit中的paste,最后加上“]”,这样可将应用程序中的数据送入MATLAB的q变量中。
(10)MATLAB编程指南
MATLAB的编程效率比BASIC、C、FORTRAN和PASCAL等语言要高,且易于维护。在编写小规模的程序时,可直接在命令提示符>>后面逐行输入,逐行执行。对于较复杂且经常重复使用的程序,可按7.1.3介绍的方法进入程序编辑器编写M文件。
M文件是用MATLAB语言编写的可在MATLAB环境中运行的磁盘文件。它为脚本文件(Script File)和函数文件(Function File),这两种文件的扩展名都是.m。
(1) 脚本文件是将一组相关命令编辑在一个文件中,也称命令文件。脚本文件的语句可以访问MATLAB工作空间中的所有数据,运行过程中产生的所有变量都是全局变量。例如下述语句如果以.m为扩展名存盘,就构成了M脚本文件,我们不妨将其文件名取为“Step_Response”。
% 用于求取一阶跃响应。
num=[1 4];
den=[1 2 8];
step(num,den)
当你键入help Step_Response时,屏幕上将显示文件开头部分的注释:
用于求取一阶跃响应。
很显然,在每一个M文件的开头,建立详细的注释是非常有用的。由于MATLAB提供了大量的命令和函数,想记住所有函数及调用方法一般不太可能,通过联机帮助命令help可容易地对想查询的各个函数的有关信息进行查询。该命令使用格式为:
help 命令或函数名
注意:若用户把文件存放在自己的工作目录上,在运行之前应该使该目录处在MATLAB的搜索路径上。当调用时,只需输入文件名,MATLAB就会自动按顺序执行文件中的命令。
(2) 函数文件是用于定义专用函数的,文件的第一行是以function作为关键字引导的,后面为注释和函数体语句。
函数就像一个黑箱,把一些数据送进去,经加工处理,再把结果送出来。在函数体内使用的除返回变量和输入变量这些在第一行functon语句中直接引用的变量外,其它所有变量都是局部变量,执行完后,这些内部变量就被清除了。
函数文件的文件名与函数名相同(文件名后缀为.m),它的执行与命令文件不同,不能键入其文件名来运行函数,M函数必须由其它语句来调用,这类似于C语言的可被其它函数调用的子程序。M函数文件一旦建立,就可以同MATLAB基本函数库一样加以使用。
例1 求一系列数的平均数,该函数的文件名为“mean.m”
function y=mean(x)
% 这是一个用于求平均数的函数
w=length(x); % length函数表示取向量x的长度
y=sum(x)/w; % sun函数表示求各元素的和
该文件第一行为定义行,指明是mean函数文件,y 是输出变量,x是输入变量,其后的%开头的文字段是说明部分。真正执行的函数体部分仅为最后二行。其中变量w是局部变量,程序执行完后,便不存在了。
在MATLAB命令窗口中键入
>> r=1:10; % 表示r变量取1到10共10个数
mean(r)
运行结果显示
ans =
5.5000
该例就是直接使用了所建立的M函数文件,求取数列r的平均数。
3 MATLAB在控制系统中的应用
MATLAB是国际控制界目前使用最广的工具软件,几乎所有的控制理论与应用分支中都有MATLAB工具箱。本节结合前面所学自控理论的基本内容,采用控制系统工具箱(Control Systems Toolbox)和仿真环境(Simulink),学习MATLAB的应用。
(1) 用MATLAB建立传递函数模型
1.有理函数模型
线性系统的传递函数模型可一般地表示为:
(1)
将系统的分子和分母多项式的系数按降幂的方式以向量的形式输入给两个变量和,就可以轻易地将传递函数模型输入到MATLAB环境中。命令格式为:
; (2)
; (3)
在MATLAB控制系统工具箱中,定义了tf() 函数,它可由传递函数分子分母给出的变量构造出单个的传递函数对象。从而使得系统模型的输入和处理更加方便。
该函数的调用格式为:
G=tf(num,den); (4)
例2 一个简单的传递函数模型:
可以由下面的命令输入到MATLAB工作空间中去。
>> num=[1,5];
den=[1,2,3,4,5];
G=tf(num,den)
运行结果:
Transfer function:
s + 5
-----------------------------
s^4 + 2s^3 + 3s^2 + 4s + 5
这时对象G可以用来描述给定的传递函数模型,作为其它函数调用的变量。
例3 一个稍微复杂一些的传递函数模型:
该传递函数模型可以通过下面的语句输入到MATLAB工作空间。
>> num=6*[1,5];
den=conv(conv([1,3,1],[1,3,1]),[1,6]);
tf(num,den)
运行结果
Transfer function:
6 s + 30
-----------------------------------------
s^5 + 12 s^4 + 47 s^3 + 72 s^2 + 37 s + 6
其中conv()函数(标准的MATLAB函数)用来计算两个向量的卷积,多项式乘法当然也可以用这个函数来计算。该函数允许任意地多层嵌套,从而表示复杂的计算。
2.零极点模型
线性系统的传递函数还可以写成极点的形式:
(5)将系统增益、零点和极点以向量的形式输入给三个变量、Z和P,就可以将系统的零极点模型输入到MATLAB工作空间中,命令格式为:
(6) (7) (8)
在MATLAB控制工具箱中,定义了zpk()函数,由它可通过以上三个MATLAB变量构造出零极点对象,用于简单地表述零极点模型。该函数的调用格式为:
G=zpk(Z,P,KGain) (9)
例4 某系统的零极点模型为:
该模型可以由下面的语句输入到MATLAB工作空间中。
>> KGain=6;
Z=[-1.9294;-0.0353+0.9287j;-0.0353-0.9287j];
P=[-0.9567+1.2272j;-0.9567-1.2272j;0.0433+0.6412j;0.0433-0.6412j];
G=zpk(Z,P,KGain)
运行结果:
Zero/pole/gain:
6 (s+1.929) (s^2 + 0.0706s + 0.8637)
----------------------------------------------
(s^2 - 0.0866s + 0.413) (s^2 + 1.913s + 2.421)
注意:对于单变量系统,其零极点均是用列向量来表示的,故Z、P向量中各项均用分号(;)隔开。
3. 反馈系统结构图模型
设反馈系统结构图如图5所示。
图5 反馈系统结构图
控制系统工具箱中提供了feedback()函数,用来求取反馈连接下总的系统模型,该函数调用格式如下:
G=feedback(G1,G2,sign); (10)
其中变量sign用来表示正反馈或负反馈结构,若sign=-1表示负反馈系统的模型,若省略sign变量,则仍将表示负反馈结构。G1和G2分别表示前向模型和反馈模型的LTI(线性时不变)对象。
例5 若反馈系统图5中的两个传递函数分别为:
,
则反馈系统的传递函数可由下列的MATLAB命令得出
>> G1=tf(1,[1,2,1]);
G2=tf(1,[1,1]);
G=feedback(G1,G2)
运行结果:
Transfer function:
s + 1
---------------------
s^3 + 3 s^2 + 3 s + 2
若采用正反馈连接结构输入命令
>> G=feedback(G1,G2,1)
则得出如下结果:
Transfer function:
s + 1
-----------------
s^3 + 3 s^2 + 3 s
例6 若反馈系统为更复杂的结构如图6所示。其中
,,
则闭环系统的传递函数可以由下面的MATLAB命令得出:
>> G1=tf([1,7,24,24],[1,10,35,50,24]);
G2=tf([10,5],[1,0]);
H=tf([1],[0.01,1]);
G_a=feedback(G1*G2,H)
得到结果:
Transfer function:
0.1 s^5 + 10.75 s^4 + 77.75 s^3 + 278.6 s^2 + 361.2 s + 120
--------------------------------------------------------------------
0.01 s^6 + 1.1 s^5 + 20.35 s^4 + 110.5 s^3 + 325.2 s^2 + 384 s + 120
图6 复杂反馈系统
4. 有理分式模型与零极点模型的转换
有了传递函数的有理分式模型之后,求取零极点模型就不是一件困难的事情了。在控制系统工具箱中,可以由zpk()函数立即将给定的LTI对象G转换成等效的零极点对象G1。该函数的调用格式为:
G1=zpk(G) (11)
例7 给定系统传递函数为:
对应的零极点格式可由下面的命令得出
>> num=[6.8, 61.2, 95.2];
den=[1, 7.5, 22, 19.5, 0];
G=tf(num,den);
G1=zpk(G)
显示结果:
Zero/pole/gain:
6.8 (s+7) (s+2)
-------------------------
s (s+1.5) (s^2 + 6s + 13)
可见,在系统的零极点模型中若出现复数值,则在显示时将以二阶因子的形式表示相应的共轭复数对。
同样,对于给定的零极点模型,也可以直接由MATLAB语句立即得出等效传递函数模型。调用格式为:
G1=tf(G) (12)
例8 给定零极点模型:
可以用下面的MATLAB命令立即得出其等效的传递函数模型。输入程序的过程中要注意大小写。
>> Z=[-2,-7];
P=[0,-3-2j,-3+2j,-1.5];
K=6.8;
G=zpk(Z,P,K);
G1=tf(G)
结果显示:
Transfer function:
6.8 s^2 + 61.2 s + 95.2
-------------------------------
s^4 + 7.5 s^3 + 22 s^2 + 19.5 s
5. Simulink建模方法
在一些实际应用中,如果系统的结构过于复杂,不适合用前面介绍的方法建模。在这种情况下,功能完善的Simulink程序可以用来建立新的数学模型。Simulink是由Math Works 软件公司1990年为MATLAB提供的新的控制系统模型图形输入仿真工具。它具有两个显著的功能:Simul(仿真)与Link(连接),亦即可以利用鼠标在模型窗口上“画”出所需的控制系统模型。然后利用SIMULINK提供的功能来对系统进行仿真或线性化分析。与MATLAB中逐行输入命令相比,这样输入更容易,分析更直观。下面简单介绍SIMULINK建立系统模型的基本步骤:
(1) SIMULINK的启动:在MATLAB命令窗口的工具栏中单击按钮或者在命令提示符>>下键入simulink命令,回车后即可启动Simulink程序。启动后软件自动打开Simullink模型库窗口,如图 7所示。这一模型库中含有许多子模型库,如Sources(输入源模块库)、Sinks(输出显示模块库)、Nonlinear(非线性环节)等。若想建立一个控制系统结构框图,则应该选择File| New菜单中的Model选项,或选择工具栏上new Model按钮,打开一个空白的模型编辑窗口如图 8所示。
图 7 simulink 模型库
图8 模型编辑窗口
(2) 画出系统的各个模块:打开相应的子模块库,选择所需要的元素,用鼠标左键点中后拖到模型编辑窗口的合适位置。
(3) 给出各个模块参数:由于选中的各个模块只包含默认的模型参数,如默认的传递函数模型为1/(s+1)的简单格式,必须通过修改得到实际的模块参数。要修改模块的参数,可以用鼠标双击该模块图标,则会出现一个相应对话框,提示用户修改模块参数。
(4) 画出连接线:当所有的模块都画出来之后,可以再画出模块间所需要的连线,构成完整的系统。模块间连线的画法很简单,只需要用鼠标点按起始模块的输出端(三角符号),再拖动鼠标,到终止模块的输入端释放鼠标键,系统会自动地在两个模块间画出带箭头的连线。若需要从连线中引出节点,可在鼠标点击起始节点时按住Ctrl键,再将鼠标拖动到目的模块。
(5) 指定输入和输出端子:在Simulink下允许有两类输入输出信号,第一类是仿真信号,可从source(输入源模块库)图标中取出相应的输入信号端子,从Sink(输出显示模块库)图标中取出相应输出端子即可。第二类是要提取系统线性模型,则需打开Connection(连接模块库)图标,从中选取相应的输入输出端子。
例9 典型二阶系统的结构图如图9所示。用SIMULINK对系统进行仿真分析。
图9 典型二阶系统结构图
按前面步骤,启动simulink并打开一个空白的模型编辑窗口。
(1) 画出所需模块,并给出正确的参数:
l 在sources子模块库中选中阶跃输入(step)图标,将其拖入编辑窗口,并用鼠标左键双击该图标,打开参数设定的对话框,将参数step time(阶跃时刻)设为0。
l 在Math(数学)子模块库中选中加法器(sum)图标,拖到编辑窗口中,并双击该图标将参数List of signs(符号列表)设为|+-(表示输入为正,反馈为负)。
l 在continuous(连续)子模块库中、选积分器(Integrator)和传递函数(Transfer Fcn)图标拖到编辑窗口中,并将传递函数分子(Numerator)改为〔900〕,分母(Denominator)改为〔1,9〕。
l 在sinks(输出)子模块库中选择scope(示波器)和Out1(输出端口模块)图标并将之拖到编辑窗口中。
(3)将画出的所有模块按图9用鼠标连接起来,构成一个原系统的框图描述如图10所示。
(4)选择仿真算法和仿真控制参数,启动仿真过程。
● 在编辑窗口中点击Simulation|Simulation parameters菜单,会出现一个参数对话框,在solver模板中设置响应的仿真范围StartTime(开始时间)和StopTime(终止时间),仿真步长范围Maxinum step size(最大步长)和Mininum step size(最小步长)。对于本例,StopTime可设置为2。最后点击Simulation|Start菜单或点击相应的热键启动仿真。双击示波器,在弹出的图形上会“实时地”显示出仿真结果。输出结果如图11所示。
图10 二阶系统的simulink实现
在命令窗口中键入whos命令,会发现工作空间中增加了两个变量――tout和yout,这是因为Simulink中的Out1 模块自动将结果写到了MATLAB的工作空间中。利用MATLAB命令plot(tout,yout),可将结果绘制出来,如图12所示。比较11和12,可以发现这两种输出结果是完全一致的。
图11仿真结果示波器显示
图12 MATLAB命令得出的系统响应曲线
(2) 利用MATLAB进行时域分析
1. 线性系统稳定性分析
线性系统稳定的充要条件是系统的特征根均位于S平面的左半部分。系统的零极点模型可以直接被用来判断系统的稳定性。另外,MATLAB语言中提供了有关多项式的操作函数,也可以用于系统的分析和计算。
(1)直接求特征多项式的根
设p为特征多项式的系数向量,则MATLAB函数roots()可以直接求出方程p=0在复数范围内的解v,该函数的调用格式为:
v=roots(p) (13)
例10 已知系统的特征多项式为:
特征方程的解可由下面的MATLAB命令得出。
>> p=[1,0,3,2,1,1];
v=roots(p)
结果显示:
v =
0.3202 + 1.7042i
0.3202 - 1.7042i
-0.7209
0.0402 + 0.6780i
0.0402 - 0.6780i
利用多项式求根函数roots(),可以很方便的求出系统的零点和极点,然后根据零极点分析系统稳定性和其它性能。
(2)由根创建多项式
如果已知多项式的因式分解式或特征根,可由MATLAB函数poly()直接得出特征多项式系数向量,其调用格式为:
p=poly(v) (14)
如上例中:
v=[0.3202+1.7042i;0.3202-1.7042i;
-0.7209;0.0402+0.6780i; 0.0402-0.6780i];
>> p=poly(v)
结果显示
p =
1.0000 -0.0000 3.0000 2.0000 1.0000 1.0000
由此可见,函数roots()与函数poly()是互为逆运算的。
(3)多项式求值
在MATLAB 中通过函数polyval()可以求得多项式在给定点的值,该函数的调用格式为:
polyval(p,v) (15)
对于上例中的p值,求取多项式在x点的值,可输入如下命令:
>> p=[1,0,3,2,1,1];
x=1
polyval(p,x)
结果显示
ans =
8
(4)部分分式展开
考虑下列传递函数:
式中,但是和中某些量可能为零。
MATLAB函数可将展开成部分分式,直接求出展开式中的留数、极点和余项。该函数的调用格式为:
(16)
则的部分分式展开由下式给出:
式中,,…, ,为极点,
,,…, 为各极点的留数,为余项。
例11 设传递函数为:
该传递函数的部分分式展开由以下命令获得:
>> num=[2,5,3,6];
den=[1,6,11,6];
[r,p,k]=residue(num,den)
命令窗口中显示如下结果
r= p= k=
-6.0000 -3.0000 2
-4.0000 -2.0000
3.0000 -1.0000
中留数为列向量r,极点为列向量p,余项为行向量k。
由此可得出部分分式展开式:
该函数也可以逆向调用,把部分分式展开转变回多项式之比的形式,命令格式为:
[num,den]=residue(r,p,k) (17)
对上例有:
>> [num,den]=residue(r,p,k)
结果显示
num=
2.0000 5.0000 3.0000 6.0000
den=
1.0000 6.0000 11.0000 6.0000
应当指出,如果p(j)=p(j+1)=…=p(j+m-1),则极点p(j)是一个m重极点。在这种情况下,部分分式展开式将包括下列诸项:
例12 设传递函数为:
则部分分式展开由以下命令获得:
>> v=[-1,-1,-1]
num=[0,1,2,3];
den=poly(v);
[r,p,k]=residue(num,den)
结果显示
r=
1.0000
0.0000
2.0000
p=
-1.0000
-1.0000
-1.0000
k=
[ ]
其中由poly()命令将分母化为标准降幂排列多项式系数向量den, k=[]为空矩阵。
由上可得展开式为:
(5)由传递函数求零点和极点。
在MATLAB控制系统工具箱中,给出了由传递函数对象G求出系统零点和极点的函数,其调用格式分别为:
Z=tzero(G)
展开阅读全文
相关搜索