1.2 拓展知识
1.2.1 MATLAB语言简介
MATLAB已经成为国际上流行的控制系统计算机辅助设计软件,可以进行高级数学分析与运算,用作动态系统的建模与仿真。MATLAB是以复数矩阵作为基本编程单元的一种程序设计语言,它提供了各种矩阵运算与操作,并具有强大的绘图功能,如控制系统、信号处理、最优控制、强健性控制及模糊控制工具箱等。
本节主要介绍MATLAB常用的命令、控制系统工具箱及SIMULINK仿真工具软件。在控制科学的发展进程中,控制系统的计算机辅助设计对于控制理论的研究和应用一直起着很重要的作用。
1.2.2 MATLAB的数值运算基础
1.常量
MATLAB中使用的常量有实数常量与复数常量两类。在MATLAB中,虚数单位j或i=sqrt(-1),在工作空间显示为
复数常量的生成可以利用如下语句:
Z=a+bj 或 z=r*exp(θ*j)
式中:r是复数的模,θ是复数幅角的弧度数。
2.变量
MATLAB里的变量无须事先定义。一个程序中的变量,以其名称在语句命令中第一次合法出现定义。请注意MATLAB变量名称的命名不是任意的,其命名规则如下:
①变量名可以由英语字母、数字和下画线组成。
②变量名应以英文开头。
③组成变量名的字符长度不大于31个。
④MATLAB区分英文字母大小写。
MATLAB的部分特殊变量与常量:
ans 默认变量名以应答最近一次操作运算结果
i,j 虚数单位,定义为
pi 圆周率
eps 浮点数的相对误差
realmax 最大的正实数
realmin 最小的正实数
MATLAB中还可以设置全局变量。只要在该变量前添加MATLAB的关键字“global”就可以将该变量设定为全局变量了。全局变量必须在使用前声明,即这个声明必须放在主程序的首行;而且作为一个惯用的规则,在MATLAB程序中尽量用大写英语字母书写全局变量。
3.运算符
MATLAB可完成基本代数运算操作+、-、*、\、/、^(平方)、标准三角函数、双曲线函数、超越函数(log为自然对数,log10为以10为底的对数)及开平方等。MAT-LAB可进行多种矩阵运算。
矩阵的加、减、乘、除和乘方运算:
在矩阵A、B满足维数条件时,可直接用下列指令进行:
矩阵加、减运算
C=A+B C=A-B
矩阵乘、除运算
C=A*B C=A/B
矩阵乘方
B=A^2 C=A^(-1) D=A^(0.5)
MATLAB还可以完成其他的矩阵函数运算,例如求行列式(det)、矩阵求反(inv)、求矩阵特征值(eig)、求秩(rank)、求迹(trace)和模方(norm)等。强大的矩阵运算函数是MATLAB运算功能的核心。其他运算功能还有,求一个数的实部(real),求一个数的虚部(imag),求一个数的绝对值(abs)(复数的绝对值或幅值)和求共轭运算(conj)。如矩阵求反
1.2.3 矩阵及矩阵函数
MATLAB的基本元素是双精度的复数矩阵。这不仅是它的一般表达方法,而且也包含了实数、复数与常数。它也间接地包含了多项式与传递函数。在MATLAB环境下,输入一行矢量很简单,只需要使用方括号,并且每个元素之间用空格或用逗号隔开即可。矩阵元素定位地址方式为
A(m,n)
其中,m为行号,n为列号。例如,A(3,4)表示第三行第四列元素;A(:,2)表示所有的第二列元素;A(1:2,1:3)表示从第一行到第二行和第一列到第三列的所有元素。
如果在原矩阵中一个不存在的地址位置设定一个数,则该矩阵自动扩展行列数,并在该位置上添加这个数,而在其他没有指定的位置补0。
1.一维数组
用户可以在MATLAB工作环境中键入命令,也可以由它定义的语言编写一个或多个应用程序,MATLAB基本的赋值语句结构为
输出结果:
2.多维数组
在MATLAB中输入数组需要遵循以下基本规则:
①把数组元素列入括号[]中。
②每行内的元素间用逗号或空格分开。
③行与行之间用分号或回车隔开。
例如:输入矩阵
矩阵的转制用A'表示,例如:
ans是英文单词answer的缩写。在MATLAB中,冒号“:”是很有用的命令符。例如:
>>t=[0:0.1:10]
它将产生一个从0到10的行矢量,而且元素之间间隔为0.1。如果增量为负值,可以得到一个递减的顺序矢量。
矩阵的输入需要逐行输入,每个行矢量之间要用分号隔开或者回车。例如:
每个数据之间的空格数可以任意设定。
3.矩阵函数
多项式表示以降阶排列含有多项式系数的矢量。利用求根(root)命令,可以求得多项式的根。例如,求2s3+3s2+4s+5=0的根可用下列命令:
求多项式(poly)命令的功能是由多项式的根求得一多项式。其结果是由多项式系数组成的行矢量。其命令如下:
如果poly的命令输入参数为矩阵,则可得到那个矩阵的特征多项式(行矢量)特征多项式是A=det(λI-A)。
1.2.4 MATLAB的绘图功能
MATLAB具有较强的绘图功能,只需键入简单的命令,就可绘制出用户所需要的图形。下面介绍几种常用的绘图命令。
1.plot命令
plot(x,y)命令是绘制y对应x的轨迹的命令。y与x均为矢量,且具有相同的元素数量。如果其中有一个参数为矩阵,则另一个矢量参数分别对应该矩阵的行或者列的元素可绘制出一簇曲线(究竟是对应行还是列绘制函数曲线,取决于哪个参数排在前面)。如果两个参数都是矩阵,则x的列对应y的列绘制出一簇曲线。
如果y是复数矢量,那么plot(y)将绘制该参数虚部与实部对应的曲线。该命令的这个特点在绘制奈魁斯特图时是很有用的。
在MATLAB中通过函数Polyval(p,v)可以求得多项式在给定点的值,该函数的调用格式为
Polyval(p,v)
例1-1 画出在t=0:0.1:10范围内的正弦曲线。
应用如下命令:
>>t=0:0.1:10;
>>y=sin(t);
>>plot(t,y)
运行结果如图1-10所示。
图1-10 例1-1的图
如果在同一坐标内绘制多条曲线(对应某一坐标轴,具有相同的取值点),可以由数据组成一个矩阵来同时绘制多条曲线。如下例共有三套数据,要求在同一坐标轴内同时绘制三条曲线。其命令格式如下:
plot(t,[x1 x2 x3])
如果多重曲线对应不同的矢量绘制,可使用如下命令格式:
plot(t1,x1,t2,x2,t3,x3)
式中表示x1对应t1,x2对应t2,等等。在这种情况下,t1、t2和t3可以具有不同的元素数量,但要求x1、x2和x3必须分别与t1、t2和t3具有相同的元素数量。
2.semilogx和semilogy命令
命令semilogx绘制半对数坐标图形,x轴取以10为底的对数,y轴为线性坐标。
命令semilogy绘制半对数坐标图形,y轴取以10为底的对数,x轴为线性坐标。
例1-2 如图1-11所示,代码如下:
>>w=logspace(-1,3,100);
>>y=log10(x);
>>semilogx(x,y)
运行结果如图1-11所示。
图1-11 例1-2的图
3.其他常用命令
subplot命令使得在一个屏幕上可以分开显示n个不同坐标,且可分别在每一个坐标中绘制曲线。其命令格式如下:
subplot(r,c,p)
该命令将屏幕分成r×c个窗口,而p表示在第几个窗口。例如:subplot(2,1,2),将屏幕分成两个窗口。subplot(2,1,1)与subplot(2,1,2)命令常用于控制系统伯德图(Bode)的绘制。窗口的排号是从左到右,自上而下。
执行如下命令可以在图中加入题目、标号、说明和分格线等。这些命令有title、xlabel、ylabel、gtext和text等。其命令格式如下:
title'(MyTitle'),xlabel('My X-axis Label')
ylabel('My X-axis Label')
gtext('Text for annotation')
text(x,y,'Text for annotation').grid
gtext命令是使用鼠标定位的文字注释命令。当你输入命令后,可以在屏幕上得到一个光标,然后使用鼠标控制它的位置。单击即可确定文字设定的位置。该命令使用起来非常方便。
shg和clg是显示与清除显示屏图形的命令。hold是图形保持命令,可以把当前图形保持在屏幕上不变,同时在这个坐标内绘制另外一个图形。hold命令是一个交替转换命令,即执行一次,转变一个状态(相当于ho ldon、hold off)。
MATLAB可以自动选择坐标轴的定标尺度,也可以使用axis命令定义坐标轴的特殊定标尺度。其命令格式如下:
axis([x-min,x-max,y-min,y-max])
可设置坐标轴为特殊刻度。设置坐标轴以后,plot命令必须重新执行才能有效。axis命令的另一个作用是控制纵横尺度的比例。例如,输入axis('square')后,可得到一个显示方框。此时再在该框内绘制一个圆形时(如plot(sin(x),cos(x)),在屏幕上可以看到一个标准的圆(一般情况下,由于屏幕的不规则原因,只能看到一个椭圆)。再次输入axis('normal')命令,屏幕返回到一般状态。