《系统分析与控制(共14页).doc》由会员分享,可在线阅读,更多相关《系统分析与控制(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上系统分析与控制实验指导书石油大学机电教研室二年四月第三篇 MATLAB语言应用一、概述MATLAB是以复数矩阵作为基本编程单元的一种程序设计语言,它提供了矩阵的运算与操作。并有较强的绘图功能,已成为国际上最流行的控制系统CAD的软件工具。不仅流行于控制界,在生物医学语言图像处理,分析,计算机技术等各行各业也有广泛应用。MATLAB是一个功能极强的高度集成化程序设计语言。它具备一般程序设计语言的基本语句结构。但功能更强,这是C或FORTRAN语言无法比拟的。由于MATLAB提供了强大的矩阵处理和绘图功能,控制界学者将自己擅长的CSCAD方法用MATLAB加以实现,出现了
2、大量的MATLAB配套工具箱。如控制界流行的控制系统工具箱(control systems toolbox),系统辨识工具箱(system identification toolbox),鲁棒控制工具箱(robust control toolbox),多变量频域设计工具箱(multivariable frequency design toolbox),最优化工具箱(optimization toolbox),信号处理工具箱(signal processing toolbox)以及仿真环境SIMULINK。这使得MATLAB风靡国际控制界。值得一提的是,1990年MathWorks软件公司为MA
3、TLAB提供了新的控制系统模型图形输入与仿真工具,原名为SIMULAB,该工具很快在控制界就有了广泛的使用。1992年以来正式改名为SIMULINK,这一名字的含义是相当直观的,因为它较明显地表明此软件的两个显著的功能:SIMU(仿真)与LINK(连接),亦即可以利用鼠标器在模型窗口上“画出所需的控制系统模型,然后利用SIMULINK提供的功能来对系统进行仿真或线性化分析。这种做法的一个优点是,可以使得一个很复杂系统的输入变得相当容易且直观。MATLAB 4.x 版本运行在microsoft windows 环境,在MATLAB语言环境下,标志为MATLAB的命令提示符,MATLAB命令窗口的
4、界面下,有一个菜单条,其中提供了很多功能,在命令行键入DEMO命令,它将启动演示程序,从而领略MATLAB的强大运算和绘图功能。二、MATLAB的基本语句结构MATLAB实际上可以认为是一种解释性语言,在MATLAB工作环境下,键入一个命令或程序,MATLAB对它进行处理,最后返回运算结果。2.1 MATLAB语言最基本的赋值语言结构为:变量名列表表达式左边为返回值,右边是表达式定义,可以是矩阵运算,也可以包含MATLAB下的函数调用。表达式可以由分号结束,也可以由逗号或换行符结束,但含义不同,如以分号结束则左边变量结果将不显示,否则将把左边返回矩阵的内容全部显示出来。和C语言类似,MATLA
5、B是区分大小写的(case-sensitive)。MATLAB 和C语言不同,在调用函数时MATLAB可以返回多个结果(亦即多个矩阵),这时等号左边是由 括起来的矩阵列表,例如:m, p = bode(n, d, w)中调用了控制系统工具箱的bode( )函数来求取传递函数n, d在指定的频率段w内的幅值响应m和相位响应p。MATLAB 函数调用时输入输出变量分别在等号两边列出,这种记号很容易记忆。也可以采用下面格式调用m, p = bode(a, b, c, d, 1, w)其中a, b, c, d, 为系统的状态方程描述,MATLAB会自动地从输入参数个数上判定给出的是传递函数还是状态方程
6、模型,从而进行正确计算,这类似于C中重载的观念。2.2 矩阵的输入输入格式为 A=1,2,3;4,5,6;7,8,0A 1 2 3 4 5 6 7 8 0其中同一行中的内容用逗号分隔,而采用分号来表示换行。上述格式输入矩阵A后,矩阵内容将在屏幕上显示出来。如在上面赋值表达式的末尾加一个分号,这矩阵内容就不显示了。这由用户通过在语句末尾加分号的方式来决定是否显示运算结果。同一行中分隔的逗号也可以由空格来代替。如下方式也是许可的 A=1 2 3; 4 5 6 7 8 9;或 A=1 2 3; 4,5, 6;7 8,9;向量的输入是一般矩阵输入的特殊情况,下面的两条命令分别定义了行和列向量 V1=1
7、 2 3,4 V2=1;2;3;4学会了矩阵的基本表示方法后,就容易理解下面的输入方式和结果了 A=A;1 3 5MATLAB 定义了两个基本的复数常量,i和j, 这些值为数学上的。如果它们不被赋值,则将保留这种定义。如果重新赋值,将保留新的值,如采用MATLAB命令a=sqrt(-1)则也定义了a 为复数常量。在MATLAB下43*i的赋值命令将得出4.0000+3.0000i的结果,而利用前面的A矩阵,在输入命令A+ones(size(A)*i 后得到一个复数矩阵,注意不能在一个复数元素之内加空格,如1 +2*i, 2 赋值表达式因在1和 +2*i之间无意多留一个空格,将被错误解释成含有三
8、个元素的向量。 A+ones (size(A)*ians=在变量赋值语句中,等号左边的矩阵名列表和等号一起可以省略,这时将把返回的矩阵名设置为ans变量。 ans 是保留的MATLAB字符串,它表示上面一个式子的返回结果。其它保留字符有:判断0元素的误差限eps, 其默认值eps=2.220410-16,用户可以用eps=eps10修正。pi表示圆周率pinf 表示无穷大,MATLAB允许最大数值为1.10308, inf的一个计算方法为1/0,这种计算在MATLAB中是允许的。NaN常量,它是一个不定式(Not a Number),由inf/inf或 0/0产生的。在MATLAB中这样的矩阵
9、赋值A1 2 inf; 1 2 5是允许的。 A=1 2 inf;1 2 5它与列向量B1;2;3乘积为A*Bans=inf202.3 矩阵的基本运算与控制语句矩阵的加减:CAB和CAB ,如A和B 矩阵维数相同这执行运算。矩阵的转置:BA,即BAT,这一运算包括复数矩阵的运算。A=5+i,2-i,1;6*i,4,9-i; B=A矩阵的翻转处理:Bfliplr(A); Cflipud(A); Drot90(A),分别表示左右、上下和旋转90度的翻转处理。矩阵的乘法:CA*B;A为nm矩阵,B为mr矩阵,C为nr矩阵。矩阵的乘方运算:BAx,A矩阵为方阵。 A2A0.1A=1 2 3;4 5 6
10、;7 8 0;B=2 3 4;5 6 7;8 9 0矩阵的点运算:CA.*B,表示A和B矩阵的元素直接相乘。方阵的求逆:Binv(A)矩阵的除法:左除AB,表示线性方程AXB的解X,即XA-1B。右除A/B,其定义为BA-1。单个矩阵元素的赋值与运算:A(2,3)=100;它只改变该元素的值,不影响其它元素的值。如行或列数大于原来矩阵范围,这时MATLAB自动扩展原来矩阵,将扩展后没赋值的矩阵元素置为0。A(4,5)=8命令执行结果就可从屏幕看到。冒号表达式:s1:s2:s3,其中s1为起始值,s2为步距,s3为终止值,此命令产生一个行向量,如s2 不给出,认为步距为1,A(: , j)表示A
11、矩阵第j列全部元素,A(i , :) 表示A矩阵第i行全部元素,A(1:2 , 2:4 )表示对A矩阵取第一行和第二行内,并在第二列到第四列中的所有元素构成的子矩阵,观察下面命令运行结果。A(2:3, 1:2:5)逻辑运算:MATLAB支持逻辑运算及不定式处理,它使用逻辑运算符&,| 和 分别表示“与”,“或”和“非”等逻辑运算。MATLAB控制语句有循环语句(for语句、while 语句)和if条件转移语句与C语言大同小异。如for 语句为:for 循环变量表达式1:表达式2:表达式3循环语句组endwhile (条件式)循环语句组endMATLAB的多项式函数:多项式求值polyval(p
12、,x0); 多项式求导polyder(p);求解多项式方程的根roots(p)。其中输入向量p是多项式系数降幂排列构成的向量。MATLAB提供了丰富的编程语句结构和实用函数,MATLAB本身编写出来的具有特殊目的程序(或M函数),其文件后缀名均为.M,这些文件都是由纯ASCII字符构成的,MATLAB下的M文件可以直接执行,这时只需在命令提示符下键入该文件名即可,MATLAB下的大多数应用程序都是由M函数形式给出, 如求取矩阵特征多项式的函数poly()和求取伴随矩阵的函数compan()等,除了M函数外,MATLAB还提供了大量底层的内部函数,如求取特征值的函数eig(),奇异值分解的函数s
13、vd()等,这类文件是不可读的。MATLAB允许用户调用可执行文件.exe,调用方式为在提示符下键入惊叹号!,后面直接跟可执行文件的文件名或DOS命令即可,如可由!chkdsk命令来直接大于DOS 下的chkdsk.exe文件。其它DOS命令也一样直接调用。MATLAB已把一些常用的DOS命令做成相应的MATLAB命令,如DIR命令。在规定的格式下,MATLAB也支持用户用C语言或FORTRAN语言编写的程序。MATLAB工作空间及变量管理:MATLAB以复数矩阵为基本编程单元,用户可以直接使用一个矩阵,不必显式指明矩阵的维数。一个矩阵维数可用size()函数来测取,调用格式为n,m=size
14、(A)如等号左边只返回一个参数,这返回的参数是一个12的行向量,两个元素分别为矩阵A的行数和列数。同样的n=length(A)返回A向量的元素个数或A矩阵行列数中的最大值,等效于max(size(A)。如用户查看目前工作空间的变量名,可用who命令来完成。who了解这些变量的具体细节,则可用whos命令查看whos分别列出变量名(Name),矩阵大小(Size),元素个数(Element),字节数(Bytes),表现密度(Density: 完整FULL或稀疏度),有无复数(Complex)等,用户可用clear命令删除一些不再使用的变量,clear a c将删除工作空间中的a和c变量。a和c之
15、间不能加逗号,否则将被解释成删除a变量后,显示变量c内容,而不是删除c变量。exist()函数查询工作空间是否存在一个变量,格式为:i=exit(字符串),如i=exist(A);i的值不是A存在形式,1表示一个变量名为A的矩阵,2表示工作路径下存在一个A.m的文件,3表示MEX文件,4表示SIMULINK文件,5表示一个内部函数A(),0表示不存在和A有关的变量和文件。MATLAB下数值显示精度默认值为 4位有效数字,这一显示精度可用format 命令来控制。输入输出语句:Ainput(提示信息,选项);如Ainput(enter matrix A =);表示首先给出提示后,等待用户输入A矩
16、阵,input()如常用s选项,则允许用户输入一个字符串。disp(A)其中A既可用为 字符串也可以为矩阵,如A=Hello,world”;disp(A)工作空间变量通过调用函数save命令可被保存到文件中,格式为save 文件名 变量列表 其它选项save mydat a b c 表示将工作空间的a,b,c变量保存到mydat.mat,mat为系统自动使用的数据文件扩展名,如保存全部工作空间变量应该用save mydat 命令。load 文件名此命令可以把矩阵数据从文件中调到工作空间来。MATLAB还提供了低级文件打开和处理命令,如fopen(), fclose(), sprintf(),这
17、同C语言几乎一致。MATLAB的联机帮助系统MATLAB提供了大量的函数和命令,通过help 命令可查询各个函数的有关信息,其格式为help 命令或函数名MATLAB还提供了关键词查询命令lookfor,例如若查出和矩阵分解(decomposition)有关的MATLAB和工具箱函数,则可运行 lookfor decomposition命令 lookfor decomposition2.4 MATLAB的绘图功能二维曲线绘制plot(x,y)x,y向量分别存放着X和Y轴的数据t=0:.1:2*pi;y=sin(t);plot(t,y)将绘制出正弦曲线。t=0:.1:2*pi;y=sin(t);
18、cos(t);plot(t,y)将绘制出正余弦两组曲线。在彩色显示器下,MATLAB自动用不同颜色将图形显示出来。MATLAB提供了一些图形选项如下表所示:表 MATLAB绘图命令的各项选择选项意义选项意义-:rb*o实线点线红色蓝色用星号绘制各个数据点用圆圈绘制各个数据点-.gy.x虚线点划线绿色黄色用点号绘制各个数据点用叉号绘制各个数据点调用格式为plot(x轴变量1,y轴变量1,选项1,x轴变量2,y轴变量2,选项2,)t=0:.1:2*pi;y1=sin(t);y2=cos(t);y3=sin(t).*cos(t);plot(t,y1,-,t,y2,:,t,y3,x)grid,xlab
19、el(This is my X axis),ylabel(my Y axis),title(my own plot)ginput()函数允许用户用鼠标来点选屏幕点,其格式为x,y,button=ginput(n)n为选择点的数目,返回的向量x,y存储点中的n个点的坐标,button为n维向量其分量为 鼠标键的标号,如buttoni=1,则说明第次按下的是鼠标左键,2或3分别对应中键和右键。其它低级命令如line()和text()函数类似C语言函数的调用。格式为text(x1,y1,chStr,选项)line(x,y)或line(x,y,z)分别表示二维或三维上由向量x,y(,z)定义的折线。解
20、读下面程序:clgaxis(0,10,0,5)hold on; x=;y=;for i=1:10x1,y1,button=ginput(1);if(button=1) break;endchStr= (, num2str(x1), ,num2str(y1) ,); text(x1,y1,chStr);plot(x1,y1,o)x=x,x1; y=y,y1;endline(x,y); hold offhold 命令用来保护原来图形不被删除。MATLAB下特殊坐标:MATLAB还允许绘制极坐标曲线、对数坐标曲线和直方图等。极坐标曲线绘制函数:polar(theta,rho,选项)其中theta,
21、rho分别为角度向量和幅值向量,选项内容和plot()函数基本一致。直方图绘制函数bar():bar(x,y,选项) 或xx,yy = bar(x,y)前一种调用将直接由给定的(x,y)向量绘制出直方图;后一种只进行数据变换供plot(xx,yy)函数使用来绘制直方图。例如t1 =0:0.2:2*pi; y1=sin(t1);t2 =0:0.5:2*pi; y2=sin(t2);bar(t1,y1); axis(0,2*pi,-1,1); hold ont3,y3= bar(t2,y2); plot(t3,y3); hold off对数坐标曲线绘制函数:semilogx(x,y,选项),sem
22、ilogy(x,y,选项),loglog(x,y,选项)分别对横坐标、纵坐标和纵横坐标进行对数变换。MATLAB允许将一个窗口分隔多个部分来绘制多个图形,这可通过函数subplot(n,m,k)来设置,n,m表示窗口分隔的行列数,k表示绘图部分代号。例theta= 0:0.1:6*pi; r= cos(theta/3)+1/9;subplot(2,2,1); polar(theta, r);subplot(2,2,2); plot(theta,r);subplot(2,2,3); semilogx(theta,r); gridsubplot(2,2,1); semilogy(theta,r);
23、 gridMATLAB还提供了实用函数logspace()按对数等间距地分布来产生一个向量,其调用格式x=logspace(x1,x2,n)n表示向量点个数,默认值为50。其它绘图及图形属性函数参见附录。三维曲线绘制:plot3(x,y,z,选项)可绘制三维曲线,如t=o:pi/50:10pi;x = sin(t); y=cos(t); z=t;plot3(x,y,z,g-)mesh(x,y,z,c)可绘制三维曲面,c为颜色矩阵表示不同高度下的颜色范围,约定c=z,即颜色正比于图形的高度。例:选择一定区域,绘制函数的三维曲面图。 x,y=meshgrid(-3:1/8:3);z= 3*(1-x
24、).2.*exp(-(x.2)-(y+1).2)-10*(x/5-x.3-y.5).*exp(-x.2-y.2)-1/3*exp(-(x+1).2-y.2); mesh(x,y,z) axis(min(min(x), max(max(x),min(min(y), max(max(y),min(min(z),max(max(z)其它还有表面函数surf(),surfc(),surf1(),等高线绘制函数contour(),调用方法同前。三、数值线性代数方法及MATLAB功能设多项式首一化处理的新多项式其伴随矩阵(companion matrix) 函数调用:Bcompan(p)生成伴随矩阵,其中
25、p为一个多项式向量。设一序列C,各个元素满足c1,c2,cn,Vandermonde 矩阵构成为:函数调用格式为 V=vander(c)c为一向量。矩阵的行列式|A|:函数调用格式Ddet(A)D为一标量,A为方阵。矩阵的秩:函数调用格式k=rank(A,tol)tol为误差限,默认eps,即k=rank(A)。矩阵特征多项式:函数调用格式Ppoly(A)返回向量P为 降幂排列多项式系数。矩阵特征根(特征方程的解)Vroots(P)P为特征多项式系数向量。矩阵特征值:若对矩阵A存在非零向量X,且有一标量l满足:Axlx则分别称x,l为矩阵A的特征向量和特征值函数调用格式V, D=eig(A)D
26、为特征值构成的对角矩阵,V为特征向量矩阵。函数调用z=eig(A)只返回特征值矩阵求逆:函数调用格式Binv(A)线性方程Ax=B的解可以由x=ina(A)*B求出,也可以简单由x=A/B求出。3.1 矩阵的非线性运算MATLAB提供了两类函数,其中一类是对矩阵的各个元素进行运算的,第二类是对整个矩阵进行运算的;第一类函数调用格式为:B函数名(A)如Bsin(A),其它如下表表 面向矩阵元素的非线性函数表函数名意义函数名意义abs()求模(绝对值)asin(),acos()反正,余弦函数sqrt()求平方根log(),log10()自然,常用对数exp()指数函数real(),imag(),c
27、onj()求实虚部及共轭sin(),cos()正,余弦函数round(),floor(),ceil()取整,尾函数MATLAB还允许调用fplot()函数来直接绘制出基本函数曲线图形,函数调用格式为:fplot(函数名,绘图区间,样本点数 N)函数名为上表给出的任意名称,绘图区间为 12的向量,元素是自变量的最小值与最大值,样本点数可省略,约定N25。如fplot(sin, 0,2*pi); 将绘制出一个周期内的正弦曲线。第二类面向矩阵的非线性运算函数MATLAB 提供了求取矩阵指数eA的4个函数:expm(), expm1(),expm2(), expm3(), 分别采用不同算法实现。其中常
28、用的函数还有logm()(矩阵求对数)sqrtm()(矩阵求平方根)funm()(矩阵求任意函数),funm()调用方法为:funm(矩阵名,函数名)如求矩阵A的正弦矩阵命令为 Bfunm(A,sin)。矩阵函数运算是基于矩阵特征值和特征向量而完成的,有时会出现错误。这时矩阵的非线性函数运算可以通过幂级数的方法简单求出。数据分析处理介绍一组数据的最大和最小值可分别采用下面函数求出xM,i=max(x); 或xm,i=min(x);其中xM, xm分别为向量x的最大值和最小值,i为所在的位置,这两个函数也可返回一个参数,而不返回i。如x不是向量而是矩阵则返回矩阵列向量的最小值和最大值构成的行向量
29、。MATLAB还提供了对数据大小进行排序的函数sort(),调用后向量元素值从小到大进行排列。其它如mean()求向量平均值,std()求向量标准方差,median()求向量的中间值,等等。函数的定积分即的计算函数调用格式:y=quad(函数名, a, b, tol)函数quad8()调用方法一样,但算法不同。其中a, b为定积分上下限,tol为变步长积分用的误差限。后者的精度和效率高些。非线性方程求解及最优化由前面的介绍可以看出,线性代数方程和多项式方程均可以在MATLAB下通过一个函数的调用而直接求出,并且求出的结果可以保证很高的精度。非线性方程组的求解方法比较复杂,在MATLAB中给出了
30、一个函数fzero(),可以用来求解含有一元方程的解。在MATLAB的早期版本中还提供了求解多元方程的求解函数fsolve(),该函数的基本调用格式为x=fsolve(函数名,初值);其中x为返回的解,函数名是由引号括起来的,在该函数中对非线性方程组有一个一般的描述,而初值为求根过程的起始点。但在MATLAB40中没有提供此函数,如果需要也可以将早期版本的fsoleve.m文件及其组成部分的ne*.m文件复制到MATLAB40的funfun目录下来执行。MATLAB提供了的单纯形算法求解最优化的函数fmin()和fmins(),它们分别对应于单变量和多变量的最优化问题的求解,其调用格式是接近的
31、x=fmin(函数名,初值,选项)或x=fmins(函数名,初值)其中函数名的定义和其它函数是一致的,而初值的大小往往能决定最后解的精度和收敛速度。选项是由一些控制变量构成的向量,比如它的第一个分量不为o表示在求解时显示整个动态过程(其默认值为0),第二个分量表示求解的精度(默认值为1e4,用户可以指定这些多数来控制求解的条件。微分方程初值问题的数值求解对微分方程组的初值求解,MATLAB提供了求解函数ode23()和ode45()。微分方程组的编写形式为: function xdot=函数名 (t,x)具体使用方法可由help 命令查询,或参考其它资料。3.2 控制系统数学模型表示及转换对传
32、递函数 MATLAB表示为num=b1, b2, , bm+1; den=1, a1, a2, ,an;多项式乘法处理运算的函数调用格式:c= conv(a, b)a, b分别表示一个多项式,c是两个多项式的乘积。conv()允许多级嵌套。系统状态方程是由矩阵A,B,C,D来表示。控制系统零极点模型可由系统增益K,零点向量Z和极点向量P表示。控制系统工具箱提供转换函数ss2zp(),函数调用格式为:Z, P, K=ss2zp(A, B, C, D, iu);A, B, C, D=zp2ss(Z, P, K);输出分别为系统的零点,极点和增益矩阵。iu是MIMO系统要求的输入序号。零极点模型与传
33、递函数模型的转换Z, P, K=tf2zp(num, den);num, den=zp2tf(Z, P, K);如果已知线性系统状态方程模型(A, B, C ,D),则其系统传递函数模型G(s)=CsI-A-1B+A函数ss2tf()可以进行这种转换,函数调用格式为num, den=ss2tf(A, B, C, D, iu)相反的变换函数是A, B, C, D=tf2ss(num, den)控制系统的连接串联u2=y1处理函数A, B, C, D=series(A1, B1, C1, D1, A2, B2, C2, D2);并联u1=u2, y=y1+y2处理函数 parallel();反馈(
34、u1=r-y2, u2=y1)处理函数feedback();对SISO系统可由下面格式调用各个函数:num, den=series(num1, den1, num2, den2)控制系统结构图描述转换的介绍省略。控制系统稳定性分析MATLAB通过函数调用直接求出控制系统的极点和零点,可以直接判断系统的稳定性,判定系统是否为最小相位系统。函数调用ss2zp()和tf2zp()可以得到系统的零极点值, ii=find(real(P)0);n=length(ii); if (n0), disp(System is Unstable);函数find()调用其含义是找出P数组(矩阵)这满足实部大于0所有
35、元素的下标,并将结果返回到ii数组中去。如果ii的元素个数大于0,则认为找到了不稳定极点。同样方法可以判定系统是否为最小相位系统。状态方程模型相似变换系统状态方程模型(A,B,C,D),经过变换矩阵T变换后模型的各个矩阵可以写成ATTAT-1, BT=TB , CT=CT-1, DTD这种变换称为相似变换,如果变换矩阵T为常数系数矩阵,这种变换又称为线性变换,线性变换并不会改变系统的特征多数及结构。MATLAB的控制系统工具箱给出了一个完成线性变换的函数ss2ss(),该函数的调用方法为AT, BT, CT, DT = ss2ss(A, B, C, D, T)系统频率响应及系统辨识MATLAB
36、提供了freqs()函数可由从已知的线性模型和给定的频率范围求出系统的频率响应数据。函数调用格式为:H=freqs(B,A,W)其中W为 给定的频率范围向量,B和A分别为线性系统的传递函数分子和分母的系数向量。在信号处理工具箱中,给出了一个辨识系统传递函数模型MATLAB函数invfreqs(),函数调用格式B,A = invfreqs(H, W, n, m)其中W为 离散频率点构成的向量,n, m分别为待辨识系统的分子和分母阶次;H为 复向量。如果给出系统的幅频mag和相频phase响应数据,则可由下式的调用得到传递函数B,A = invfreqs(mag.*exp(sqrt(-1)*pha
37、se), W, n, m)类似的可由阶跃响应及脉冲响应(G(jw)与g(t)的拉氏变换关系)数据进行系统辨识。四、控制系统计算机辅助时域和频域分析频率响应曲线绘制MATLAB提供了多种求取并绘制系统频率响应曲线的函数,如Bode图绘制函数bode(),Nyquist曲线绘制函数nyquist(),以及Nichols曲线绘制函数nichols()等,其中bode()函数的调用格式为m,p=bode(num,den,w); 或m, p=bode(A, B, C, D, iu, w);w为频率点给出的向量,最好由logspace()函数产生;m, p分别为幅值响应和相位响应。和前面的叙述一样,iu为
38、一个数值,反映要求取的输入信号标号,当然对单输入系统来说,iu=1。bode()函数本身可以通过输入元素的个数来自动地识别给出的是传递函数模型还是状态方程模型,从而可以正确地求出Bode响应的幅值向量m与相位向量P,有了这些数据之后就可以由下面的MATLAB命令subplot(211); semilogx(w,20*log10(m)subplot(212); semilogx(w,p)在同一个窗口上同时绘制出系统的Bode响应曲线了,其中前面一条命令中对得出的m向量求取分贝(dB)值。如果用户只想绘制出系统的Bode图,而对获得幅值和相位的具体数值并不感兴趣,则可以由如下更简洁的格式调用bod
39、e()函数bode(A,B,C,D,iu,w);或bode(num,den,w);可以缺省w,这时该函数会自动地根据模型的变化情况选择一个比较合适的频率范围。 值得注意的是,除了前面给出的最基本调用格式之外,根据实际需要的不同,求取系统的频率响应数据还有很多的变形方式,如求取系统的Nyquist响应数据的函数nyquist(),求Nichols特性数据的函数nichols()等,这些函数的调用格式和bode()一样也是十分直观的。在分析系统性能的时候经常涉及到系统的幅值与相位裕度的问题,使用控制系统工具箱提供的margin( )函数可以直接求出系统的幅值与相位裕度,该函数的调用格式为Gm, P
40、m, Wcg, Wcp = margin(A, B, C, D);或Gm, Pm, Wcg, Wcp = margin(num, den)可以看出,该函数能直接由系统的状态万程或传递函数模型来求取系统的幅值裕度Gm和相位裕度Pm,并求出幅值裕度和相位裕度处相应的频率值Wcg和Wcp。此外,控制系统工具箱中还提供了由幅值和相位响应数据来求取裕度的方法,这时函数的调用格式为Gm, Pm, Wcg, Wcp = margin(MAG, PHASE, w);线性系统时域分析系统仿真实质上就是对描述系统的数学模型进行求解,对控制系统来说,系统的数学模型实际上是某种微分方程或差分方程模型,因而在仿真过程中
41、需要以某种数值算法从给定的初始值出发,逐步地计算出每一个时刻系统的响应,最后绘制出系统的响应曲线,由此来分析系统的性能。一般常微分方程的数值解法是系统仿真的基础。MATLAB的控制系统工具箱提供了很多线性系统在特定输入下仿真的函数,例如连续时间系统在阶跃输入激励下的仿真函数step(),脉冲激励下的仿真函数impulse() 及任意输入表激励下的仿真函数Islm()等,其中阶跃响应函数step()的调用格式为y,x=step(num, den, t)或y, x=step(A,B,C,D,iu, t)其中第一种调用方式下num和den分别为线性系统传递函数模型的分子和分母多项式系数,t为选定的仿
42、真时间向量。此函数的返回值y为系统在各个仿真时刻的输出所组成的矩阵,而x为自动选择的状态变量的时间响应数据,同样一个函数还可以由不同的方式来调用,这里如果给出系统的状态方程模型,并指定输入变量的序号iu,则同样可以计算出系统的阶跃响应数据。类似于前面介绍的bode()函数,如果用户对具体的响应数值不感兴趣,而只想绘制出系统的阶跃响应曲线,则可以由无返回值的step()函数调用完成曲线绘制。求取脉冲响应的函数jmpulse()和step()函数的调用格式是完全一致的,而任意输入下的仿真函数lsim()的调用格式稍有不同,因为在此函数的调用时还应该给出一个输入表向量,该函数的调用格式为y,x=ls
43、im(num, den, u, t)或y,x=lsim(A, B, C, D, u, t)式中u为给定输入构成的列向量,它的元素个数应该和t的个数是一致的。当然该函数若调用时不返回多数,则也可以直接绘制出响应曲线图形。五、控制系统工具箱函数模型变换c2d变连续系统为离散系统residue部分分式展开c2dm利用指定方法变连续为离散系统ss2tf变状态空间表示为传递函数表示c2dt带一延时变连续为离散系统ss2zp变状态空间表示为零极点表示d2c变离散为连续系统tf2ss变传递函数表示为状态空间表示d2cm利用指定方法变离散为连续系统tf2zp变传递函数表示为零极点表示poly变根值表示为多项式
44、表示zp2tf变零极点表示为传递函数表示zp2ss变零极点表示为状态空间表示建模append追加系统动态特性destim从增益矩阵中形成离散状态估计器augstate变量状态作为输出dreg从增益矩阵中形成离散控制器和估计器blkbuild从方框图中构造状态空间系统drmodel产生随机离散模型cloop系统的闭环estim从增益矩阵中形成连续状态估计器connect方框图建模feedback反馈系统连接conv两个多项式的卷积ord2产生二阶系统的A、B,C,Drmodel产生随机连续模型reg从增益矩阵中形成连续控制器和估计器series串行系统连接parallel并行系统连接ssselect从大系统中选择子系统ssdelete从模型中删除输入、输出或状态pade时延的Pade近似模型特性 covar相对于白噪声的连续协方差响应ddamp离散阻尼系数和固有频率ctrb可控性矩阵ddcgain离散稳态(直流)增益damp阻尼系数和固有频率dgram离散可控性和可观性 dcgain连续稳态(直流)增益dsort按幅值排序离散特征值dcovar相对于白噪声