MATLAB:经典控制系统的分析和设计

9.3.1 基本操作及命令
1. 访问和退出MATLAB

在大多数系统中,一旦安装了MATLAB,在调用时,应执行命令MATLAB。退出MATLAB应执行命令exit或quit。

2. 如何应用MATLAB

通常以命令驱动方式应用MATLAB。当输入单个命令时,MATLAB会立即对其进行处理,并且显示处理结果。MATLAB也能够执行存储在文件中的命令序列。

通过键盘输入的命令,应用向上箭头键可以被存取。通过输入某个最新命令和调用特定的命令行,可以使屏幕内容向上滚动。

3. MATLAB的变量

MATLAB的一个特点是变量在应用之前不必是维数确定的。在MATLAB中,变量一旦被采用,会自动产生(如果必要,变量的维数以后还可以改变)。在命令exit或quit输入之前,这些变量将保留在存储器中。

为了得到工作空间内的变量清单,可以通过键盘输入命令who,当前存放在工作空间内的所有变量便会显示在屏幕上。

命令clear能从工作空间中清除所有非永久性变量。如果只需要从工作空间中清除某个特定变量,比如“x”,则应输入命令clear x。

4. 以“%”开始的程序行

在 本书中,许多MATLAB程序在编写时附有注解和说明,这些注解和说明阐明了发生在程序中的具体进程。在MATLAB中以“%”开始的程序行,表示注解和 说明。符号“%”类似于BASIC中“REM”。以“%”开始的行,用来存储程序的注解或说明,这些注解和说明是不执行的。这就是说,在MATLAB程序 行中,出现在“%”以后的一切内容都是可以忽略的。如果注解或说明需要一行以上程序行,则每一行均需以“%”为起始。

5. 应用分号操作符

分号用来取消打印。如果语句的最后一个符号是分号,则打印被取消,但是命令仍在执行,而结果不再显示。这是一个有益的特性,因为打印中间结果可能不必要。此外,在输入矩阵时,除非最后一行,分号用来指示一行的结束。

6. 应用冒号操作符

冒号操作符在MATLAB中起着重要作用。该操作符用来建立向量,赋予矩阵下标和规定叠代。例如,j:k表示[j j+1 … k],A(:,j)表示矩阵A的第j列,A(i,:)表示矩阵A的第i行。

7. 输入超过一行的长语句

一个语句通常以回车键或输入键终结。如果输入的语句太长,超出了一行,则回车键后面应跟随由3个或3个以上圆点组成的省略号(…),以表明语句将延续到下一行。下面是一个例子:

x = 1.234+2.345+3.456+4.567+5.678+6.789…

+7.890+8.901-9.012

符号=、+和-前后的空白间隔可以任选。这种间隔通常可以起到改善语句清晰度的效果。

8. 在一行内输入数个语句

如果在一行内可以把数个语句用逗号或分号隔开,则可以把这数个语句放在一行内。

例如

plot(x,y,’o’), text(1,20,’System 1’), text(1,15,’System 2’)

plot(x,y,’o’);text(1,20,’System 1’);text(1,15,’System 2’)

9. 选择输出格式

MATLAB中的所有计算都是以双精度方式完成的,但是显示输出可以是具有4个小数位的定点输出。例如,对于向量

x = [1/3 0.00002]

MATLAB有下列输出:

x=

0.3333 0.0000

如果在矩阵中至少有一个元素不是严格的整数,则有4种可能的输出格式。显示的输出量可以利用下列命令加以控制:

format short

format long

format short e

format long e

一旦调用了某种格式,则这种被选用的格式将保持,直到对格式进行了改变为止。

在控制系统分析中,format short和format long是经常采用的格式。一旦调用了MATLAB,即使没有输入格式命令,MATLAB也将以format short格式显示数值结果。如果矩阵或向量的所有元素都是严格的整数,则format short和format long的结果是相同的。

10. 退出MATLAB时如何保存变量

当键入“exit”或“quit”时,MATLAB中的所有变量将消失。如果在退出以前输入命令save,则所有的变量被保存在磁盘文件matlab.mat中。当再次进入MATLAB时,命令load将使工作空间恢复到以前的状态。

9.3.2 MATLAB函数
在当前的MATLAB5.0及以上版本中,MATLAB函数的调用格式和其它编程语言是不同的,其典型的调用格式为

[返回变量列表] = func_name(输入变量列表)

其中等号左边的变量为返回变量,等号右边的变量为输入变量。MATLAB允许在函数调用时同时返回多个变量。而一个函数又可以由多种格式进行调用,例如bode( )函数可以由下面的格式调用

[mag, phase] = bode(num, den, w)

其中bode( )函数用来求取或绘制系统的Bode图,而系统在这里由传递函数分子num和分母den表示,还可以用下面的格式调用此函数

[mag, phase] = bode(A,B,C,D,w)

其中(A,B,C,D)为系统的状态方程模型。尽管两种调用格式是完全不同的,MATLAB函数还是会自动识别到底是用哪种格式调用该函数的,从而得出正确的结论。

在当前版本的控制系统工具箱中还允许用线性模型对象变量G来描述系统,例如

[mag, phase] = bode(G, w)

MATLAB函数在返回变量的格式上可以不同,例如若上面的语句中若没有返回变量,则将自动地绘制系统的Bode图,否则将返回计算结果数据。

9.3.3 绘制响应曲线
MATLAB具有丰富的获取图形输出的程序集。命令plot可以产生线性x-y图形(用命令loglog、semilogx、semilogy或 polar取代plot,可以产生对数坐标图和极坐标图)。所有这些命令的应用方式都是相同的,它们只对如何对坐标轴进行分度和如何显示数据产生影响。

1. x-y图

如果x和y是同一长度的向量,则命令

plot(x, y)

将画出y值对于x值的关系图。

2. 画多条曲线

为了在一幅图上画出多条曲线,采用具有多个自变量的plot命令:

plot(X1, Y1, X2, Y2, … , Xn, Yn)

变量X1, Y1, X2, Y2等等是一些向量对。每一个x-y对都可以图解表示出来,因而在一幅图上形成多条曲线。多重变量的优点是它允许不同长度的向量在同一幅图上显示出来。每一对向量采用不同的线型。

在一幅图上画一条以上的曲线时,也可以利用命令hold。hold命令可以保持当前的图形,并且防止删除和修改比例尺。因此,随后的一条曲线将会重叠地画在原曲线图上。再次输入命令hold,会使当前的图形复原。

3. 加进网格线、图形标题、x轴标记和y轴标记

一旦在屏幕上显示出图形,就可以画出网格线,定出图形标题,并且标定x轴标记和y轴标记。MATLAB中关于网格线、标题、x轴标记和y轴标记的命令如下:

grid(网格线)

title(图形标题)

xlabel(x轴标记)

ylabel(y轴标记)

应当指出,一旦恢复命令display,通过依次输入相应的命令,就可以将网格线、图形标题、x轴标记和y轴标记叠加在图形上。

4. 在图形屏幕上书写文本

为了在图形屏幕的点(x,y)上书写文本,采用命令:

text(X, Y, ’text’)

例如,利用语句

text(3, 0.45, ’sin t’)

将从点(3, 0.45)开始,水平地写出sin t。另外,下列语句:

plot(x1, y1, x2, y2), text(x1, y1, ’1’), text(x2, y2, ’2’)

标记出两条曲线,使它们很容易地区分开来。

5. 图形类型

下列语句:

plot(X, Y, ’x’)

将利用标记符号x画出一个点状图,而语句:

plot(X1, Y1, ’:’, X2, Y2, ’+’)

将用虚线画出第一曲线,用加法符号(+)画出第二条曲线。MATLAB能够提供的线和点的类型如下:

线的类型点的类型
实线-圆点.
短划线--加号+
虚线星号*
点划线-.圆圈o
   ×号
×

6. 颜色

下列语句

plot(X, Y, ’r’)

plot(X, Y, ’+g’)

表明,第一幅图采用红线,第二幅图采用绿色“+”号标记。MATLAB提供的颜色如下:

红色r
绿色g
蓝色b
白色w
无色i

7. 自动绘图算法

在MATLAB 中,图形是自动定标的。在另一幅图形画出之前,这幅图形作为现行图将保持不变,但是在另一幅图形画出后,原图形将被删除,坐标轴自动地重新定标。关于暂态 响应曲线、根轨迹、伯德图、奈魁斯特图等的自动绘图算法已经设计出来,它们对于各类系统具有广泛的适用性,但是并非总是理想的。因此,在某些情况下,可能 需要放弃绘图命令中的自动坐标轴定标特性,改用手工选择绘图范围。

8. 手工坐标轴定标

如果需要在下列语句指定的范围内绘制曲线:

v = [x-min x-max y-min y-max]

则应输入命令axis(v),式中v是一个四元向量。axis(v)把坐标轴定标建立在规定的范围内。对于对数坐标图,v的元素应为最小值和最大值的常用对数。

执行axis(v)会把当前的坐标轴定标保持到后面的图中,再次键入axis恢复自动定标。

axis(‘square’)把图形的范围设定在方形范围内。对于方形长宽比,斜率为1的直线恰位于45o上,它不会因屏幕的不规则形状而变形。axis(‘normal’)将使长宽比恢复到正常状态。

9.3.4 MATLAB语言的联机帮助功能
本书中将广泛应用MATLAB语言和其控制系统工具箱作为辅助工具,并将介绍相关函数的使用。但是以当前的篇幅想全面介绍MATLAB和控制系统工具箱是不可能的,不妨使用MATLAB的联机帮助功能。

MATLAB的联机帮助既可以由help命令来直接获得,又可以由MATLAB图形界面下的Help菜单来查询。例如,可以由help lyap命令得出lyap()函数的联机帮助信息如下:

》help lyap

LYAP Lyapunov equation.

X = LYAP(A,C) solves the special form of the Lyapunov matrix equation:

A*X + X*A’ = -C

X = LYAP(A,B,C) solves the general form of the Lyapunov matrix equation:

A*X + X*B = -C

See also DLYAP.

可见,由这种方法得出的帮助信息包括该函数的解释,函数的调用格式和相关函数名等等,进一步的帮助内容可以查阅MATLAB或相应工具箱手册。

还可以用lookfor命令在MATLAB路径下查询有关的关键词,例如若想查询关键词‘Hankel’,则可以由下面的命令完成:

》lookfor hankel

HANKEL Hankel matrix.

BHRDEMO Demo of model reduction techniques (Hankel, Balanced, BST).

HKSV Hankel singular values and grammians P, Q.

OHKAPP Optimal Hankel norm approximation (stable plant).

OHKDEMO Demo of optimal Hankel model reduction technique.

OHKLMR Optimal Hankel norm approximation (unstable plant).


9.4.1 控制系统模型
1) 传递函数模型:

在MATLAB中,直接用分子/分母的系数表示,即

num=[b1,b2,…,bm+1];

den=[a1,a2,…,an+1];

而printsys命令则用于显示传递函数,例如:

num=[1 1];den=[1 5 9]

printsys(num,den)

执行后,其结果为:

num/den=

2) 零极点增益模型

在MATLAB中,用[z,p,k]矢量表示,即

z=[b1,b2,…,bm];

p=[b1,b2,…,bm];

k=[k];

3) 状态空间模型

在MATLAB中,系统可用(a,b,c,d)矩阵组表示。

说明:在本书中将不涉及状态方程。

4) 模型之间的转换

同一个系统可用三种不同的模型表示,为分析系统的特性,有必要在三种模型之间进行转换。MATLAB的信号处理和控制系统工具箱中,都提供了模型变换的函数:ss2tf, ss2zp, tf2ss, tf2zp, zp2ss, zp2tf, 它们的作用可用图9-1来表示。

图9-1 三种模型之间的转换

 

图9-1 三种模型之间的转换

5) 系统建模

对简单系统的建模可直接采用三种基本模型:传递函数、零极点增益、状态空间模型。但实际中经常遇到几个简单系统组合成一个复杂系统。常见形式有:并联、串联、闭环及反馈等连接。

l 并联:将两个系统按并联方式连接,在MATLAB中可用parallel函数实现。

l 串联:将两个系统按串联方式连接,在MATLAB中可用series函数实现。

l 闭环:将系统通过正负反馈连接成闭环系统,在MATLAB中可用cloop函数实现。

l 反馈:将两个系统按反馈方式连接成闭环系统,在MATLAB中可用feedback函数实现。

9.4.2 时域分析
控制系统最常用的时域分析方法是,当输入信号为单位阶跃和单位脉冲函数时,求出系统的输出响应,分别称为单位阶跃响应和单位脉冲响应。在MATLAB中, 提供了求取连续系统的单位阶跃响应函数step,单位脉冲响应函数impulse,零输入响应函数initial及任意输入下的仿真函数lsim。

1) step命令

功能:求阶跃响应

格式:[y,x]=step(num,den,t)

2) impluse命令

功能:求脉冲响应

格式:[y,x]=impluse(num,den,t)

3) lsim命令

功能:对任意输入的连续系统进行仿真

格式:[y,x]=lsim(num,den,u,t)

其中输入信号为矢量u。输入信号u的行数决定了计算的输出点数。对于单输入系统,u是一个列矢量。对于多输入系统,u的列数等于输入变量数。例如:计算斜坡响应,t为输入矢量。可以输入如下命令

》ramp=t; y=lsim(num,den,rmp,t)

4) initial命令

功能:求连续系统的零输入响应

格式:[y,x,t]=initial(a,b,c,d,x0)

功能:[y,x,t]=initial(a,b,c,d,x0,t)

initial函数可计算出连续时间线性系统由于初始状态所引起的响应(故而称零输入响应)。当不带输出变量引用函数时,initial函数在当前图形窗口中直接绘制出系统的零输入响应。

9.4.3 根轨迹
根轨迹法是分析和设计线性定常控制系统的图解方法,使用十分简便。特别是适用于多回路系统的研究,应用根轨迹比其它方法更为方便。

通 常来说,要绘制出系统的根轨迹是很繁琐很难的事,因此在教科书中经常以简单系统的图示解法得到。但在现代计算机技术和软件平台的支持下,绘制系统的根轨迹 变得轻松自如了。在MATLAB中,专门提供了绘制根轨迹有关的函数:rlocus,rlocfind,pzmap等。

1) pzmap命令

功能:绘制线性连续系统的零极点图

格式:[p,z]=pzmap(num,den)

用"x"号表示极点,用"o"号表示零点

2) rlocus命令

功能:绘制根轨迹

格式:[r,k]=rlocus(num,den)

[r,k]=rlocus(num,den,k)

3) rlocfind命令

功能:找出给定的一组根对应的根轨迹增益

格式:[k,poles]=rlocfind(num,den)

[k,poles]=rlocfind(num,den,p)

K为选点处的根轨迹增益;Pole为此点处的闭环特征根。

4) sgrid命令

功能:在连续系统根轨迹图和零极点图中绘制出阻尼系数和自然频率栅格。

格式:sgrid或sgrid('new')或sgrid(Z,Wn)

9.4.4 频域分析
频域分析法是应用频率特性研究控制系统的一种经典方法。采用这种方法可直观地表达出系统的频率特性,分析方法比较简单,物理概念比较明确,对于诸如防止结 构谐振、抑制噪声、改善系统稳定性和暂态性能等问题,都可以从系统的频率特性上明确地看出其物理实质和解决途径。

频率分析法主要包括三种方法:bode图(幅频/相频特性曲线)、nyquist曲线、nichols图。

1) bode命令

功能:绘制波特图

格式:[mag,phase,w]=bode(num,den)

[mag,phase,w]=bode(num,den,w)

2) nyquist命令

功能:绘制乃奎斯特图

格式:[re,im,w]=nyquist(num,den)

[re,im,w]=nyquist(num,den,w)

3) nichols命令

功能:绘制尼科尔斯图

格式:[M,P]=nichols(num,den)

4) margin命令

功能:求幅值和相角裕量及幅值和相位交界频率

格式:[GM,PM,wcg,wcp]=margin(M,P)


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值