控制系统的模拟试验与MATLAB仿真
1 MATLAB简介
(略)
2 MATLAB基本操作命令
本节简单介绍与本书内容相关的一些基本知识和操作命令。
(1)简单矩阵的输入
MATLAB是一种专门为矩阵运算设计的语言,所以在MATLAB中处理的所有变量都是矩阵。这就是说,MATLAB只有一种数据形式,那就是矩阵,或者数的矩形阵列。标量可看作为1×1的矩阵,向量可看作为n×1或1×n的矩阵。这就是说,MATLAB语言对矩阵的维数及类型没有限制,即用户无需定义变量的类型和维数,MATLAB会自动获取所需的存储空间。
输入矩阵最便捷的方式为直接输入矩阵的元素,其定义如下: (1) 元素之间用空格或逗号间隔;
(2) 用中括号([])把所有元素括起来; (3) 用分号(;)指定行结束。
例如,在MATLAB的工作空间中,输入:
5 6 9] >> a?[2 3 4; 则输出结果为:
a?234
569矩阵a被一直保存在工作空间中,以供后面使用,直至修改它。
MATLAB的矩阵输入方式很灵活,大矩阵可以分成n行输入,用回车符代替分号或用续行符号(?)将元素续写到下一行。例如:
a?[1, 2, 3; 4, 5, 6; 7, 8, 9]
a?[ 1 2 3 4 5 6 7 8 9]a?[1, 2, 3; 4, 5, ???
6; 7, 8, 9]以上三种输入方式结果是相同的。一般若长语句超出一行,则换行前使用续行符号(?)。
在MATLAB中,矩阵元素不限于常量,可以采用任意形式的表达式。同时,除了直接输入方式之外,还可以采用其它方式输入矩阵,如:
(1) 利用内部语句或函数产生矩阵; (2) 利用M文件产生矩阵;
- 1 -
(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? 23.4568
ans 是MATLAB提供的固定变量,具有特定的功能,是不能由用户清除的。常用的固定
变量还有eps、pi、Inf、NaN等。其特殊含义可以用7.2.10节介绍的方法查阅帮助。
MATAB允许在函数调用时同时返回多个变量,而一个函数又可以由多种格式进行调用,语句的典型格式可表示为:
[返回变量列表]=fun-name(输入变量列表)
例如用bode()函数来求取或绘制系统的Bode图,可由下面的格式调用:
[mag,phase]?bode(num,den,W)
其中变量num、den表示系统传递函数分子和分母,W表示指定频段,mag为计算幅值,phase为计算相角。
(4)语句以“%”开始和以分号“;”结束的特殊效用
在MATLAB中以“%”开始的程序行,表示注解和说明。符号“%”类似于C++中的“//”。这些注解和说明是不执行的。这就是说,在MATLAB程序行中,出现“%”以后的一切内容都是可以忽略的。
分号用来取消打印,如果语句最后一个符号是分号,则打印被取消,但是命令仍在执行,而结果不再在命令窗口或其它窗口中显示。这一点在M文件中大量采用,以抑制不必要的信息显示。
(5)获取工作空间信息
MATLAB开辟有一个工作空间,用于存储已经产生的变量。变量一旦被定义,MATLAB系统会自动将其保存在工作空间里。在退出程序之前,这些变量将被保留在存储器中。
为了得到工作空间中的变量清单,可以在命令提示符>>后输入who 或 whos 命令,当
- 2 -
前存放在工作空间的所有变量便会显示在屏幕上。
命令clear能从工作空间中清除所有非永久性变量。如果只需要从工作空间中清除某个特定变量,比如“x”,则应输入命令clear x。
(6)常数与算术运算符
MATLAB采用人们习惯使用的十进制数。如: 3 –99 0.0001 9.6397238 1.60210e?20 6.62252e23 2i -3.14159i 3e5i 其中 i??1。
数值的相对精度为eps,它是一个符合IEEE标准的16位长的十进制数,其范围为:
10?308~10308。
MATLAB提供了常用的算术运算符:+,-,?,∕(﹨),^(幂指数)。 应该注意:(∕)右除法和(﹨)左除法这两种符号对数值操作时,其结果相同,其斜线下为分母,如1∕4与4﹨1,其结果均为0.25,但对矩阵操作时,左、右除法是有区别的。
(7)选择输出格式
输出格式是指数据显示的格式,MATLAB提供format命令可以控制结果矩阵的显示,而不影响结果矩阵的计算和存储。所有计算都是以双精度方式完成的。
(1) 如果矩阵的所有元素都是整数,则矩阵以不带小数点的格式显示。 如输入:
0 1] x?[?1 则显示:
x? -1 0 1
(2) 如果矩阵中至少有一个元素不是整数,则有多种输出格式。常见格式有以下四
种:
① format short(短格式,也是系统默认格式) ② format short e(短格式科学表示) ③ format long(长格式)
④ format long e(长格式科学表示) 如:
1.2345e?6] x?[4/3 对于以上四种格式,其显示结果分别为:
x?
1.3333 0.0000x? 短格式5位表示
1.3333e?00 1.2345e?06
短格式科学表示
x? 1.33333333333333 0.00000123450000- 3 -
长格式16位表示
x? 1.33333333333333 e?00 1.234500000000000e?06(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
- 4 -
的搜索路径上。当调用时,只需输入文件名,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.有理函数模型
线性系统的传递函数模型可一般地表示为:
b1sm?b2sm?1?????bms?bm?1 G(s)? n?m (1)
sn?a1sn?1?????an?1s?an将系统的分子和分母多项式的系数按降幂的方式以向量的形式输入给两个变量num和den,就可以轻易地将传递函数模型输入到MATLAB环境中。命令格式为:
num?[b1,b2,???,bm,bm?1]; (2) den?[1,a1,a2,???,an?1,an]; (3)
在MATLAB控制系统工具箱中,定义了tf() 函数,它可由传递函数分子分母给出的变量构造出单个的传递函数对象。从而使得系统模型的输入和处理更加方便。
该函数的调用格式为:
- 5 -