730 likes | 889 Views
控制工程基础 (第十一章). 清华大学. 第十一章 Matlab 软件工具 在控制系统分析和综合中的应用. Matlab 基本特点 控制系统在 Matlab 中的描述 进行部分分式展开 控制系统的时间响应分析 控制系统的频域响应分析 控制系统的根轨迹图 系统稳定性分析 Simulink 仿真工具. 1、 matlab 基本特点. Matlab 简介: 1980年前后,美国 moler 博士构思并开发; 最初的 matlab 版本是用 fortran 语言编写,现在的版本用 c 语言改写;
E N D
控制工程基础(第十一章) 清华大学
第十一章 Matlab软件工具在控制系统分析和综合中的应用 • Matlab基本特点 • 控制系统在Matlab中的描述 • 进行部分分式展开 • 控制系统的时间响应分析 • 控制系统的频域响应分析 • 控制系统的根轨迹图 • 系统稳定性分析 • Simulink仿真工具
1、matlab基本特点 Matlab简介: • 1980年前后,美国moler博士构思并开发; • 最初的matlab版本是用fortran语言编写,现在的版本用c语言改写; • 1992年推出了具有划时代意义的matlab 4.0版本;并于1993年推出了其windows平台下的微机版,现在比较新的版本是6.5版
Matlab语言特点: Matlab以复数矩阵为最基本的运算单元,既可以对它整体地进行处理,也可以对它的某个或某些元素进行单独地处理。在matlab中,数据的存储/输入/输出都是以矩阵为基础的,矩阵和其它变量不需要预先定义。matlab语言最基本的赋值语句结构为 变量名列表=表达式
等号右边的表达式可以由分号结束,也可以由逗号或换行结束,但它们的含义是不同的。如果用分号结束,则左边的变量结果将不在屏幕上显示出来,否则将把左边返回矩阵的内容全部显示出来。如等号右边的表达式可以由分号结束,也可以由逗号或换行结束,但它们的含义是不同的。如果用分号结束,则左边的变量结果将不在屏幕上显示出来,否则将把左边返回矩阵的内容全部显示出来。如 »A=[1,0,1;1,0,0;2,1,0]; » B=[1,0,2;2,1,1;1,0,1] B = 1 0 2 2 1 1 1 0 1
在matlab下,矩阵A和矩阵B的乘积(假定 其中A,B矩阵是可乘的)可以简单地由运 算C=A*B求出 »C=A*B C = 2 0 3 1 0 2 4 1 5
而D=A.*B称点乘积运算,即表示A和B矩阵 的相应元素之间直接进行乘法运算,然后 将结果赋给D矩阵,点乘积运算要求A和B矩 阵的维数相同。 »D=A.*B D= 1 0 2 2 0 0 2 0 0
Matlab下提供了两种文件格式: m文件, matlab函数 • M文件是普通的ascii码构成的文件,在这样的文件中只有由matlab语言所支持的语句,类似于dos下的批处理文件,它的执行方式很简单,用户只需在matlab的提示符>>下键入该m文件的文件名,这样matlab就会自动执行该m文件中的各条语句。它采用文本方式,编程效率高,可读性很强。
Matlab函数是最常用的特殊m文件,该函数是由function语句引导,其基本格式如下Matlab函数是最常用的特殊m文件,该函数是由function语句引导,其基本格式如下 Function 返回变量列表=函数名(输入量列表) 注释说明语句段 函数体语句 调用时在matlab的提示符下键入函数名,并包括输入变量。类似于c语言的子程序调用。如 Function plot_sin(xmin,xmax) X=xmin:min(0.01,(xmax-xmin)/100):xmax; Plot(x,sin(x)); % This is a demo
2、控制系统在matlab中的描述 要分析系统,首先需要能够描述这个系统。例如用传递函数的形式描述系统
在matlab中,用num=[b1,b2,…,bm,bm1]和den=[a1,a2,…,an,an1]在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)
3、进行部分分式展开 对于下列传递函数
num和den分别表示传递函数的分子和分母的系数,即num和den分别表示传递函数的分子和分母的系数,即 num=[bo,bl,…,bn] den=[1,al.…,an] 命令 [r,p,k]=residue(num,den) 将求出传递函数的部分分式展开式中的留数、极点和余项,即得到
分子分母表示为 num=[0,1,3] den=[1,3,2] 采用命令 [r,p,k]=residue(num,den) 得到 [r,p,k]=residue(num,den)
r=2.0000 -1.0000 p= -1.0000 -2.0000 k= [] 即
反之,利用下列命令 [num,den]=residue(r,p,k) 可以将部分分式展开式返回到传递函数多项式之比的形式,即得到 [num,den]=residue(r,p,k) num= 0.0000 1.0000 3.0000 den= 1.0000 3.0000 2.0000
当包含m重极点时,部分分式展开式将包括下列m项:当包含m重极点时,部分分式展开式将包括下列m项:
例 对于下列系统传递函数 分子分母表示为 num=[0,1,2,3] den=[1,3,3,1] 采用命令 [r,p,k]=residue(num,den)
得到 num=[0 1 2 3]; den=[1 3 3 1]; [r,p,k]=residue(num,den)
r= 1.0000 0.0000 2.0000 p= -1.0000 -1.0000 -l.0000 k= [] 即
4、线性系统的时间响应分析 Matlab的Control工具箱提供了很多线性系统在特定输入下仿真的函数,例如连续时间系统在阶跃输入激励下的仿真函数step(),脉冲激励下的仿真函数impulse()及任意输入激励下的仿真函数lsim()等,其中阶跃响应函数step()的调用格式 [y,x]=step(sys,t) 或[y,x]=step(sys)
求取脉冲响应的函数impulse()和step()函数的调用格式完全一致,而任意输入下的仿真函数lsim()的调用格式稍有不同,因为在此函数的调用时还应该给出一个输入表向量,该函数的调用格式为求取脉冲响应的函数impulse()和step()函数的调用格式完全一致,而任意输入下的仿真函数lsim()的调用格式稍有不同,因为在此函数的调用时还应该给出一个输入表向量,该函数的调用格式为 [y,x]=lsim(sys,u,t)
式中,u为给定输入构成的列向量,它的元素个数应该和t的个数是一致的。当然该函数若调用时不返回参数,也可以直接绘制出响应曲线图形。例如式中,u为给定输入构成的列向量,它的元素个数应该和t的个数是一致的。当然该函数若调用时不返回参数,也可以直接绘制出响应曲线图形。例如 sys=tf(num,den) t = 0:0.01:5; u = sin(t); lsim(sys,u,t) 为单输入模型sys对u(t)=sin(t)在5秒之内的输入响应仿真。
MATLAB还提供了离散时间系统的仿真函数,包括阶跃响应函数dstep(),脉冲响应函数dimpulse()和任意输入响应函数dlsim()等,它们的调用方式和连续系统的不完全一致,读者可以参阅MATLAB的帮助,如在MATLAB的提示符>>下键入help dstep来了解它们的调用方式
时域分析常用函数如下: step - 阶跃响应 impulse - 脉冲响应 lsim - 对指定输入的连续输出 gensig - 对LSIM产生输入信号 stepfun - 产生单位阶跃输入
例 对于下列系统传递函数 下列MATLAB Programl1.1将给出该系统的单位阶跃响应曲线。该单位阶跃响应曲线如图1所示。
----MATLAB Programl1.1---- num=[0,0,50]; den=[25,2,1]; step(num,den) grid title('Unit-Step Response of G(s)=50/(25s^2+2s+1)')
例 考虑下列系统试求该系统的单位阶跃响应曲线。 虽然用MATLAB求该系统的单位阶跃响应曲线时,不需要求它的传递函数表达式,这里导出这种表达式,以便作为参考。 对于给定的系统,传递矩阵G(s)为
该系统包含两个输入量和两个输出量,根据考虑不同的输入信号和输出信号,可以定义4个传递函数。当考虑信号u1为输入量时,我们假设u2为零,反之亦然。这4个传递函数为该系统包含两个输入量和两个输出量,根据考虑不同的输入信号和输出信号,可以定义4个传递函数。当考虑信号u1为输入量时,我们假设u2为零,反之亦然。这4个传递函数为
利用下列命令:step(A,B,C,D)可以画出4个单独的阶跃响应曲线,程序如下:A=[-1 -1;6.5 0]; B=[1 1;1 0]; C=[1 0;0 1]; D=[0 0;0 0];step(A,B,C,D)
例 对于下列系统传递函数 下列MATLAB Programl1.2将给出该系统的单位脉冲响应曲线。该单位脉冲响应曲线如图2所示。
----MATLAB Programl1.2---- num=[0,0,50]; den=[25,2,1]; impulse(num,den) grid title('Unit-Impulse Response of G(s)=50/(25s^2+2s+1)')
在MATLAB中没有斜坡响应命令,可利用阶跃响应命令求斜坡响应,先用s除G(s),再利用阶跃响应命令。例如,考虑下列闭环系统: 对于单位斜坡输人量 下列MATLAB Programl1.3给出该系统单位斜坡响应曲线。该单位斜坡响应曲线如图3所示。
----MATLAB Programl1.3---- num=[0,0,0,50]; den=[25,2,1,0]; t = 0:0.01:100; step(num,den,t) grid title('Unit-Step ramp Response of G(s)=50/(25s^2+2s+1)')
5、控制系统的频域响应分析 已知系统的传递函数模型如第2节所示, 则该系统的频率响应为 可以由下面的语句来实现,如果有一个频率向量w,则Gw=polyval(num, sqrt(-1)*w)./polyval(den,sqrt(-1)*w); 其中num和den分别为系统的分子分母多项式系数向量。
频率响应曲线绘制 MATLAB提供了多种求取并绘制系统频率响应曲线的函数,如Bode图绘制函数bode(),Nyquist曲线绘制函数nyquist()等,其中bode()函数的调用格式为 [m,p]=bode(num,den,w) 这里,num,den和前面的叙述一样,w为频率点构成的向量,该向量最好由logspace()函数构成。m,p分别代表Bode响应的幅值向量和相位向量。
如果用户只想绘制出系统的Bode图,而对获得幅值和相位的具体数值并不感兴趣,则可以由以下更简洁的格式调用bode()函数如果用户只想绘制出系统的Bode图,而对获得幅值和相位的具体数值并不感兴趣,则可以由以下更简洁的格式调用bode()函数 bode(num,den,w) 或更简洁地 bode(num,den) 这时该函数会自动地根据模型的变化情况选择一个比较合适的频率范围。
Nyquist曲线绘制函数nyquist()类似于bode()函数,可以利用help nyquist来了解它的调用方法。 在分析系统性能的时候经常涉及到系统的幅值裕量与相位裕量的问题,使用Control工具箱提供的margin()函数,可以直接求出系统的幅值裕量与相位裕量,该函数的调用格式为[Gm,Pm,wcg,wcp]=margin(num,den)
可以看出,该函数能直接由系统的传递函数来求取系统的幅值裕量Gm和相位裕度裕量Pm,并求出幅值裕量和相位裕量处相应的频率值wcg和wcp。可以看出,该函数能直接由系统的传递函数来求取系统的幅值裕量Gm和相位裕度裕量Pm,并求出幅值裕量和相位裕量处相应的频率值wcg和wcp。
常用频域分析函数如下: bode - 频率响应伯德图 nyquist - 频率响应乃奎斯特图 nichols - 频率响应尼柯尔斯图 freqresp - 求取频率响应数据 margin - 幅值裕量与相位裕量 pzmap - 零极点图 使用时可以利用他们的帮助,如help bode。 另外,命令ltiview可以画时域响应和频域响应图,利用help ltiview查看使用说明。
例 对于下列系统传递函数 下列MATLAB Programl1.4将给出该系统对应的伯德图。其伯德图如图4所示。
----MATLAB Programl1.4---- num=[0,0,50]; den=[25,2,1]; bode(num,den) grid title('Bode Diagram of G(s)=50/(25s^2+2s+1)')