2019/8/12第七章控制系统的综合与校正1控制工程基础第十章Matlab软件工具在控制系统分析和综合中的应用主讲人:赵治国副教授2019/8/12第七章控制系统的综合与校正2主要内容Matlab基本特点控制系统在Matlab中的描述进行部分分式展开控制系统的时间响应分析控制系统的频域响应分析控制系统的根轨迹图系统稳定性分析Simulink仿真工具2019/8/12第七章控制系统的综合与校正3Matlab基本特点(1)Matlab简介:1980年前后,美国moler博士构思并开发;最初的matlab版本是用fortran语言编写,现在的版本用c语言改写;1992年推出了具有划时代意义的matlab4.0版本;并于1993年推出了其windows平台下的微机版,现在比较新的版本是7.1版2019/8/12第七章控制系统的综合与校正4Matlab基本特点(2)Matlab以复数矩阵为最基本的运算单元,既可以对它整体地进行处理,也可以对它的某个或某些元素进行单独地处理。在Matlab中,数据的存储/输入/输出都是以矩阵为基础的,矩阵和其它变量不需要预先定义。Matlab语言最基本的赋值语句结构为变量名列表=表达式2019/8/12第七章控制系统的综合与校正5matlab基本特点(3)等号右边的表达式可以由分号结束,也可以由逗号或换行结束,但它们的含义是不同的。如果用分号结束,则左边的变量结果将不在屏幕上显示出来,否则将把左边返回矩阵的内容全部显示出来。如»A=[1,0,1;1,0,0;2,1,0];»B=[1,0,2;2,1,1;1,0,1]B=1022111012019/8/12第七章控制系统的综合与校正6matlab基本特点(4)在Matlab下,矩阵A和矩阵B的乘积(假定其中A,B矩阵是可乘的)可以简单地由运算C=A*B求出»C=A*BC=2031024152019/8/12第七章控制系统的综合与校正7而D=A.*B称点乘积运算,即表示A和B矩阵的相应元素之间直接进行乘法运算,然后将结果赋给D矩阵,点乘积运算要求A和B矩阵的维数相同。»D=A.*BD=102200200matlab基本特点(5)Matlab下提供了两种文件格式:m文件,matlab函数M文件是普通的ascii码构成的文件,在这样的文件中只有由matlab语言所支持的语句,类似于dos下的批处理文件,它的执行方式很简单,用户只需在matlab的提示符下键入该m文件的文件名,这样matlab就会自动执行该m文件中的各条语句。它采用文本方式,编程效率高,可读性很强。Matlab函数是最常用的特殊m文件,这样的函数是由function语句引导,其基本格式如下Function返回变量列表=函数名(输入变量列表)注释说明语句段函数体语句调用时在matlab的提示符下键入函数名,并包括输入变量。类似于c语言的子程序调用。如Functionplot_sin(xmin,xmax)X=xmin:min(0.01,(xmax-xmin)/100):xmax;Plot(x,sin(x));%Thisisademo2019/8/12第七章控制系统的综合与校正9控制系统在Matlab中的描述要分析系统,首先需要能够描述这个系统。例如用传递函数的形式描述系统11211121)(nnnnmmmmasasasabsbsbsbsG在matlab中,用num=[b1,b2,…,bm,bm1]和den=[a1,a2,…,an,an1]分别表示分子和分母多项式系数,然后利用下面的语句就可以表示这个系统sys=tf(num,den)其中tf()代表传递函数的形式描述系统,还可以用零极点形式来描述,语句为sys1=zpk(sys)而且传递函数形式和零极点形式之间可以相互转化,语句为[z,p,k]=tf2zp(num,den)[num,den]=zp2tf(z,p,k)当传递函数复杂时,应用多项式乘法函数conv()等实现。例如den1=[1,2,2]den2=[2,3,3,2]den=conv(den1,den2)2019/8/12第七章控制系统的综合与校正11进行部分分式展开(1)对于下列传递函数nnnnnnnnioasasasbsbsbsbsXsX11111102019/8/12第七章控制系统的综合与校正12num和den分别表示传递函数的分子和分母的系数,即num=[bo,bl,…,bn]den=[1,al.…,an]命令[r,p,k]=residue(num,den)将求出传递函数的部分分式展开式中的留数、极点和余项,即得到skpsrpsrpsrsXsXnnio2211进行部分分式展开(2)例:对于下列系统传递函数分子分母表示为num=[0,1,3]den=[1,3,2]采用命令[r,p,k]=residue(num,den)得到[r,p,k]=residue(num,den)r=2.0000-1.0000p=-1.0000-2.0000k=[]即21122332ssssssXsXio2332ssssXsXio反之,利用下列命令[num,den]=residue(r,p,k)可以将部分分式展开式返回到传递函数多项式之比的形式,即得到[num,den]=residue(r,p,k)num=0.00001.00003.0000den=1.00003.00002.0000当包含m重极点时,部分分式展开式将包括下列m项:mjmjjjjjpsrpsrpsr121例对于下列系统传递函数分子分母表示为num=[0,1,2,3]den=[1,3,3,1]采用命令[r,p,k]=residue(num,den)1333213223232sssssssssXsXio得到num=[0123];den=[1331];[r,p,k]=residue(num,den)r=1.00000.00002.0000p=-1.0000-1.0000-l.0000k=[]即32121011ssssXsXio2019/8/12第七章控制系统的综合与校正17线性系统的时间响应分析(1)Matlab的Control工具箱提供了很多线性系统在特定输入下仿真的函数,例如连续时间系统在阶跃输入激励下的仿真函数step(),脉冲激励下的仿真函数impulse()及任意输入激励下的仿真函数lsim()等,其中阶跃响应函数step()的调用格式为[y,x]=step(sys,t)或[y,x]=step(sys)其中sys可以由tf()或zpk()函数得到,t为选定的仿真时间向量,如果不加t,仿真时间范围自动选择。此函数只返回仿真数据而不在屏幕上画仿真图形,返回值y为系统在各个仿真时刻的输出所组成的矩阵,而x为自动选择的状态变量的时间响应数据。如果用户对具体的响应数值不感兴趣,而只想绘制出系统的阶跃响应曲线,则可以由如下的格式调用step(sys,t)或step(sys)2019/8/12第七章控制系统的综合与校正18线性系统的时间响应分析(2)求取脉冲响应的函数impulse()和step()函数的调用格式完全一致,而任意输入下的仿真函数lsim()的调用格式稍有不同,因为在此函数的调用时还应该给出一个输入表向量,该函数的调用格式为[y,x]=lsim(sys,u,t)式中,u为给定输入构成的列向量,它的元素个数应该和t的个数是一致的。当然该函数若调用时不返回参数,也可以直接绘制出响应曲线图形。例如t=0:0.01:5;u=sin(t);lsim(sys,u,t)为单输入模型sys对u(t)=sin(t)在5秒之内的输入响应仿真。2019/8/12第七章控制系统的综合与校正19线性系统的时间响应分析(3)MATLAB还提供了离散时间系统的仿真函数,包括阶跃响应函数dstep(),脉冲响应函数dimpulse()和任意输入响应函数dlsim()等,它们的调用方式和连续系统的不完全一致,读者可以参阅MATLAB的帮助,如在MATLAB的提示符下键入helpdstep来了解它们的调用方式。时域分析常用函数如下:step-阶跃响应impulse-脉冲响应lsim-对指定输入的连续输出gensig-对LSIM产生输入信号stepfun-产生单位阶跃输入例对于下列系统传递函数下列MATLABPrograml1.1将给出该系统的单位阶跃响应曲线。该单位阶跃响应曲线如图1所示。----MATLABPrograml1.1----num=[0,0,50];den=[25,2,1];step(num,den)gridtitle(‘Unit-StepResponseofG(s)=50/(25s^2+2s+1)’)1225502sssXsXio图1G(s)=50/(252s+2s+1)的单位阶跃响应曲线例对于下列系统传递函数下列MATLABPrograml1.2将给出该系统的单位脉冲响应曲线。该单位脉冲响应曲线如图2所示。----MATLABPrograml1.2----num=[0,0,50];den=[25,2,1];impulse(num,den)gridtitle(‘Unit-ImpulseResponseofG(s)=50/(25s^2+2s+1)’)1225502sssXsXio图2G(s)=50/(252s+2s+1)的单位脉冲响应曲线在MATLAB中没有斜坡响应命令,可利用阶跃响应命令求斜坡响应,先用s除G(s),再利用阶跃响应命令。例如,考虑下列闭环系统:对于单位斜坡输入量则1225502sssXsXio21ssXissssssssssssXo1225501122550112255023222下列MATLABPrograml1.3将给出该系统的单位斜坡响应曲线。该单位斜坡响应曲线如图3所示。----MATLABPrograml1.3----num=[0,0,0,50];den=[25,2,1,0];t=0:0.01:100;step(num,den,t)gridtitle(‘Unit-SteprampResponseofG(s)=50/(25s^2+2s+1)’)图3G(s)=50/(252s+2s+1)的单位斜坡响应曲线2019/8/12第七章控制系统的综合与校正27控制系统的频域响应分析已知系统的传递函数模型如第2节所示,则该系统的频率响应为可以由下面的语句来实现,如果有一个频率向量w,则Gw=polyval(num,sqrt(-1)*w)./polyval(den,sqrt(-1)*w);其中num和den分别为系统的分子分母多项式系数向量。11211121)()()()()()()(nnnnmmmmajajajabjbjbjbjG频率响应曲线绘制MATLAB提供了多种求取并绘制系统频率响应曲线的函数,如Bode图绘制函数bode(),Nyquist曲线绘制函数等,其中bode()函数的调用格式为[m,p]=bode(num,den,w)这里,num,den和前面的叙述一样,w为频率点构成的向量,该向量最好由logspace()函数构成。m,p分别代表Bode响应的幅值向量和相位向量。如果用户只想绘制出系统的Bode图,而对获得幅值和相位的具体数值并不感兴趣,则可以由以下更简洁的格式调用bode()函数bode(num,den,w)或更简洁地bode(num,den)这时该函数会自动地根据模型的变化情况选择一个比较合适的频率范围。Nyquist曲线绘制函数nyquist()类似于bode()函数,可以利用helpnyquist来了解它的调用方法。在分析系统性