资源描述
附录一 MATLAB 软件简介 MATLAB语言是美国Mathworks公司研制开发的大型计算软件,自1985年问世以来,特别是1993年4.x Windows版本的出现,使得MATLAB语言的使用获得了巨大的发展。它的强大的矩阵处理与运算功能、丰富的图形绘制能力深受用户的青睐。控制领域的研究者与工程技术人员对此给予了极大关注,国际上众多的知名学者在此基础上先后开发出一系列的相关工具箱(toolbox),如控制系统工具箱(Control System Toolbox)、神经网络工具箱(Neural Network Toolbox)、系统辨识工具箱(Systerm Identification Toolbox)、最优化工具箱(Optimization Toolbox)、鲁棒控制工具箱(Robust Control Toolbox)等,以及集成在 MATLAB上的面向结构图的系统分析平台Simulink。从而使得MATLAB的功能得到了全面提高,几乎覆盖了控制领域各个研究分支,成为国际控制领域最为重要与流行的对控制系统进行分析研究的软件工具。本节将简要介绍一些MATLAB的最基本知识,为没有接触过MATLAN语言的控制领域的人员提供一定的基础知识。对于更加详细的内容请读者参阅相关的文献书籍与在线帮助。值得说明的是在本书前面各章节中提到的MATLAB是广义上的MATLAB含义,它将包括相关的工具箱等方面的知识与内容。1 变量与附表达式在MATLAB中变量名与C语言一样,要求以字母开头的字符串可以是字母、数字或下画线。例如, namestring, string_12等都是合法的变量名。变量名的长度以不超过 25个字符为限。在MATLAB中对变量名是区分大小写字母的,即同一个字母不同的大小写代附表着不同的变量。当用户在MATLAB工作空间输入一个新变量后,MATLAB将自动分配给该变量相应的内存,不需要在输入变量时加以声明。变量是MATLAB的基本运算单元,是其进行运算和编写程序的基础,由变量构成的基本语句就是赋值语句,其典型格式为 变量名=附表达式 下述示例给出了最简单的赋值语句,在MATLAB的命令窗口中输入 name_1= 4则定义了一个变量name1,并实现了对它的赋值,这可以通过在命令窗口上键入该变量名来检查变量是否已经被定义和赋值。得到结果为 name_1= 4上例证实了变量name_1已经建立并且已被赋值。在MATLAB的变量中有一类变量允许作用在多个函数中,这类变量就是全局变量。对于全局变量是需要声明的,即在该变量名前冠以关键宇“global”,如在命令窗口键入 global HE HE=0.124; 则这样HE就变成了全局变量。 如果需要求解一个附表达式并将运算结果存于某一变量,可由下述语句实现 A=3*16+10-27/3运行上述语句可得到 A= 49 若直接输入附表达式,而没有将运算结果赋值给变量,MATLAB将自动将结果存于内部“ans”中并加以显示,例如输入 3*1610-27/3运行得到 ans 49 如果在表达式的最后应用“;结束,虽然不会影响对变量赋值的结果,但运算结果将不在屏幕上显示。 另外MATLAB自身具有一些内部常数或准内部变量(函数),允许用户直接加以使用,如附表1-1 所示。 附表1-1内部常数与变量内部常数(函数)名功 能内部常数(函数)名功 能i虚数单位flops计算浮点运算次数j虚数单位clock时间pi圆周率date日期inf无穷大tic,toc时间间隔nan不定值etime时间间隔2 基本运算符 MATLAB语言具有强大的运算功能,它能够为用户提供所需计算的各种算术与逻辑运算。附表12给出了MATLAB的主要算术与逻辑关系运算符及其相应的功能解释。 附表1-2 算术与逻辑运算符 运算符 功能解释 运算符 功能解释 + 加 = 等于 - 减= 不等于 * (矩阵)乘 大于 .* 数组乘 = 大于等于 . 数组乘方 = 小于等于 (矩阵)左除 & 逻辑与 . 数组左除 | 逻辑或 / (矩阵)右除 逻辑非 ./ 数组右除 3 M文件 所谓M文件就是用MATLAB语言编写的磁盘文件,该文件均以“m”作为文件的扩展名,它们都是ASCII码的文件格式,因此可以采用任何能够生成ASCII码文件格式的编辑器加以编辑。M文件分为脚本(script)文件与函数(function)文件两大类。 1M脚本文件 M脚本文件就是根据用户要求,使用MATLAB语言组成的具有一定功能的MATLAB指令集合。M脚本文件运行后,所产生的变量驻留在MATLAB的工作空间中,只要用户不对其使用clear命令加以清除(或关闭MATLAB命令窗口),则这些变量将会一直保留在MATLAB的工作空间中。下述MATLAB语句如果以. m为扩展名存盘,就构成了M脚本文件。 num=2* 1,2; den=conv(conv(1,0,3),1,2,2); G1=tf(num,den); G=ss( G1); a,b,c,d=ssdata(G); Ab= a-b*c Bb= b Cb= c Db=0 Step(Ab,Bb,Cb,Db) 2.M函数文件 从结构上看M函数文件的第一行一定具有函数声明行,该行是以function作为该行的关键字,它是M函数文件必须具有的内容。在该行中,函数名与函数的相关变量均被加以定义;而M函数文件的另一关键内容是M函数体,这也是M函数文件不可缺少的一部分内容,由它实现该M函数文件的相应功能。在这两部分之间可以插入各种注释与说明,这些注释与说明的内容放在后面,该部分内容不作为程序加以执行,而为在线帮助和阅读程序提供必要的信息。在M函数文件中所定义的变量都是内部变量,函数执行完毕后这些变量将随之消失,不会影响MATLAB的整个工作空间,M函数文件就是建立一个函数,而这个函数可以同ATLAB的基本库函数一样加以使用,附表13给出了MATLAB的常用基本数学函数。 附表13 基本数学函数函数名功能函数名功能sin(x)正弦函数ln(x)自然对数ln(x)cos(x)余弦函数log10(x)以10为底的对数函数tan(x)正切函数abs(x)模或绝对值cot(x)余切函数angle(x)复相角sec(x)正割函数conj(x)共轭复数csc(x)余割函数imag(x)复数虚部asin(x)反正弦函数real(x)复数实部acos(x)反余弦函数fix(x)近似0的整数atan(x)反正切函数floor(x)近似小于自身的最大整数acot(x)反余切函数ceil(x)近似大于自身的最小整数asec(x)反正割函数round(x)四舍五入acsc(x)反余割函数rem(x,y)x除以y的余数exp(x)指数ex函数sign(x)符号函数考查下述例子。 function y mean(x) This is a M function file m=length(x); ysum(x)/m; 将上述程序存入meanl.m的磁盘文件,从而构造了一个M函数文件,该函数文件能够实现对平均数的求取。现在如果需要即可对其加以使用,在MATLAB命令窗口中键入 r=1:99; mean (r)运行得到 ans 50 该例就是直接使用了所建立的M函数文件,对数列r求出相应的平均数。4 矩阵、数组与基本数值运算功能 矩阵与数组在形式上有相似之处,但概念是不同的。矩阵表示的是一种线性变换关系,它有着严格的线性代数运算规则,而数组运算则是由MATLAB软件定义的。41矩阵的建立 在MATLAB中一个矩阵不但可以表示为数学意义上的矩阵,也可表示为一个向量。对于一个向量可以认为是一个 1 n或n 1的矩阵,显然标量就是向量的特殊形式。在 MATLAB中矩阵的建立有多种方法,主要可以通过下述途径加以实现。 1直接输入法 对于一个矩阵一般可以直接输入得到,如键入 A=1 2 3;4 5 6;7 8 9会得到相应的矩阵为 A 1 2 3 4 5 6 7 8 9 对于较大的矩阵也可分行输入,如键入 A=1.0,2.0,3.0,4.0 5.0,6.0,7.0,8.0 9.0,10,11,12 13,14,15,16得到相应的矩阵为 A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 可以看出在建立矩阵时,元素之间空格和“,”的意义相同,“;”的意义是起换行符的作用。 2在M文件中构建矩阵 M文件是一类含有MATLAB合法代码的文本文件。用户可以通过采用M文件构造所需要的矩阵。在MATLAB中建立下述M文件,并将其存盘,取tempm作为该M文件名。 B=1 2 3 4 4 3 2 1 5 6 7 8 8 7 6 5当在MATLAB的 命令窗口中敲入 temp将会得到运行结果为 temp B= 1 2 3 4 4 3 2 1 5 6 7 8 8 7 6 5 3 由MATLAB函数构造矩阵 在MATLAB中可以利用特殊函数构造相关矩阵。 zeros函数用以产生指定维数的全0元素矩阵。 ones函数用以产生指定维数的全1元素矩阵。 rand函数用以产生指定维数的随机元素矩阵。 eye函数用以产生指定维数的单位矩阵,往往与size函数结合使用。 diag(函数)用以产生对角矩阵。 若在MATLAB命令窗口中键入D=zeros(3,2)得到 D 0 0 0 0 1 0输入 E=ones(2,3)得到 E 1 1 1 1 1 1 在MATLAB中运行 w=ones(3) q=size(w) eye(size(w)得到 W= 1 1 1 1 1 1 1 1 1 q= 3 3 ans 1 0 0 0 1 0 0 0 1输入 R=rand(3,2)得到 R 0.0099 0.1987 0.1389 0.6038 0.2028 0.2722R为一个3行2列的随机矩阵,当rand函数不带参数时将产生一个随机数。42矩阵与数组的运算 1基本运算 矩阵的算术运算是严格按照线性代数的法则定义的,而数组运算则是按元素进行的。在MATLAB中,算术运算允许采用运算符与运算函数两种形式加以进行。为了清晰地表示它们之间的区别,在此以对照的方式加以介绍。这些基本运算可由下述相应指令加以实现。 (1)加、减运算。如果假设A、B阵分别为则在MATLAB中进行下述运算 H= A+B或 H= plus(A, B)得到 H 5 5 5 5若 HAB或H= minu(A, B)得到 H= - 3 -1 1 3 (2)乘法运算。在乘法运算中,矩阵与数组的乘法格式是有区别的,分别给出在MATLAB中的格式为 矩阵乘: A* B 或 mtimes(A,B) 数组乘: A.* B 或 times(A,B) 若已知A、B同前,则矩阵运算 HA* B得到 H 8 5 20 13执行数组乘法运算 HA*B得到运算结果为 H 4 6 6 4 由上述运算结果可以看出,矩阵乘法运算与线性代数的矩阵运算完全一致,而数组乘法运算是按照元素相乘的方法进行的。 (3)矩阵的求逆运算。如果已知矩阵A为则其相应逆阵为 IA inv(A)运算结果为 IA= -2.0000 1.0000 1.5000 -5.000 (4)矩阵的除法运算。矩阵左除在MATLAB中表示为H=AB或H= mldivide(A,B) 如果 A是n阶矩阵, B是n 维向量或相应的矩阵,则可以利用 X=A B求取方程 AX= B的解。如已知 AX B其中 B1 1 运行 XA B 得 X= -1 1 如果应用矩阵求逆的方法也可求解上述方程,即 X inv(A)* B 得 X= - 1.0000 1.0000 与矩阵左除相类似的还有矩阵右除 B/ A或 mrdivide(A,B),它基本相当于 B* inv(A)的功能,用以求取方程 XA=B的解。另外在 MATLAB中还可十分容易地应用 det(A)函数求取行列式|A|值,在此不再详述。 (5)数组除法。数组除法运算的基本指令与矩阵除法相类似,分别为 A./B 或rdivide(A,B) 数组右除 A.B 或ldivide(A,B) 数组左除 数组除法与矩阵除法的根本区别在于;数组除是A、B数组元素相除,即数组右除就是A(i,j)/B(i,j);而数组左除就是 B(i,j) A(i,j)。 2方次运算 矩阵的方次运算的基本运算格式为 Ak 这里k足为正整数时,矩阵自乘K次;K为负整数时,则先求逆,然后矩阵再自乘k次。 若已知矩阵A同前,当 UA2 运算得到 U=7 10 15 22 数组方次运算的基本运算格式为: A.B 数组的乘方就是A 、B对应元素的乘方,即进行A(i,j)的B(i,j)次方。如果B为标量,则对应A(i,j)的B次方运算。 对于二次开方运算,在MATLAB中特别提供了专门的函数。如果已知矩阵A为 可以应用sqrtm函数对其进行开平方运算。 运行sqrtm(A)得到 ans 0.5537+0.4644i 0.8070-0.2124i 1.2104-0.3186i 1.7641+0.1458i 3矩阵的转置运算 在MATLAB中矩阵的转置运算可按下述形式进行。 已知矩阵A同前,则当 T=A得到 T= 1 3 2 4 4矩阵的其他翻转变换 l)T=fliplr(A) 进行A阵关于垂直轴沿左右方向翻,得到 T 2 1 4 3 2)T=flipud(A) 进行A阵关于水平轴沿上下方向翻转,得到 T 3 4 1 2 3)T= rot90(A)矩阵A逆时针方向旋转90 ,得到 T 24 1343矩阵的特征值与特征向量 在MATLAB中,eig函数用以计算矩阵的特征值与特征向量。其基本格式如下。 1)D=eig(x) 返回变量为D,是方阵x的特征值,在此x必须是方阵。 2)V,Deig(x) 同时返回特征值D和特征向量V。其中D为对角阵,矩阵V的每一列代表一个特征向量,与相应的特征值对应。即存在X* V= V* D关系。 例11已知矩阵 试求取矩阵A的特征值与特征向量。 解:应用eig函数进行求取,即 V,D= eig(A)得到 V= -0.8246 -0.4160 0.5658 -0.9094 D= -0.3723 0 0 5.3723如果只求特征值,则可以运行 L=eig(A)得到特征值为 L= -0.3723 5.372344向量与下标 1向量的生成 (1) 利用“:”可以生成向量。其基本格式为 An:i:m当nm、i0时,将得到递增向量,其增量为 i;当nm、i0时,将得到递减向量,其增量为i。 如输入 A1:0.2:2得到向量 A= 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000 又如输入 A8:2:0得到向量 A 8 6 4 2 0 i1时,增量i可略去。例如输入 A0:5得到增向量 A 0 1 2 3 4 5 (2) linspace函数生成向量。linspace函数生成线性等分向量,其基本格式为 A=linspace(m,n) 采用上述格式可以生成由100个元素构成的向量A,元素在m、n之间线性分布。当欲指定向量元素数量时可以采用下述格式 Alinspace(m,n,k)在这种格式中是指定了向量的元素个数,例如输入 Alinspace(1,10,6)将构造出由6个元素组成的向量A,得 A= 1.0000 2.8000 4.6000 6.4000 8.2000 10.0000 (3) logspace函数生成向量。由logspsce函数生成对数等分的向量,其基本格式为 A logspace(m,n) 上述格式可以生成由50个元素构成的对数等分向量A。当要指定向量元素个数时,可采用下述格式 A logspace( m, n, k)上式可以生成由k个元素组成的向量。例如输入 A=Iogspace( 1, 1, 5)将生成由5个元素组成的按对数等分的向量A,即 A 0.1000 0.3162 1.0000 3.1623 10.0000 2下标的使用 对于矩阵,利用下标可以标记元素的位置,例如A(3,2)表示矩阵A的第3行第2列的元素,这里的3与2称为矩阵的下标。利用下标可以完成多种功能的运算,如给定矩阵为执行下述运算 A(3,3)A(1,3)A(3,1)得 A 1 2 3 4 5 6 7 8 10实现了对A矩阵指定元素相应的运算。 下标也可以是一个向量,如给定矩阵为从A阵中取出一个由第4列构成的子阵B,应输入 BA(1:5,4)此时“1:5”就构成了向量下标,指定了所选取的A阵中的1到5行元素。得 B= 4 5 6 7 8 利用下标还可以对矩阵重新进行赋值。如输入 A(:,2 4 6)=B(:,2:4)表示矩阵A的第2、4、6列分别用B阵的第2、3、4列取代。 利用下标还可以对矩阵进行特殊情况的赋值,即利用空阵删除矩阵指定的元素。如 A(:,3)执行上述运算将利用空阵删除了A阵中的第3列元素。 由此可以看出在下标中“:”的功能十分重要。考虑“:”的另一种应用,如果给定矩阵为则执行 B A(:)得到 B= 1 3 2 4B是按列重新排列的矩阵。如果A阵仍为上述二阶矩阵,则运行下述语句 A(:) 9:12得到 A= 9 11 10 12 3矩阵的01下标 由关系运算中建立的0-1向量可以用于建立子矩阵,若L是一个m维的0-1向量,则 A(L,:)将给出L中非零元素所对应A阵的行元素矩阵。如果在MATLAB中建立 A=1 2 3;4 5 6;7 8 9 L=1;1;0 则运行 Mlogical(L) A(M,:)得到结果 M 1 1 0 ans 1 2 3 4 5 6 如果在MATLAB中建立 A=10 20 130 ;100 200 30;50 500 1则运行 L=A(:,3)100; BA(L,:)得到结果 B 10 20 130 在这里一定会注意到上述两个例子中01下标处理的差异。显然可以看出,此处的01应属于逻辑值而并非是数量上的概念。5 多项式运算 MATLAB为用户提供了许多标准多项式运算函数,以求取(矩阵)多项式的系数或多项式的根等。 1多项式求根函数 利用多项式求根函数可以方便地求取多项式的全部根,其基本格式为 R= roots(p)p为描述多项式的系数向量。 如已知方程式为则方程左边的多项式系数向量为 p=1 -11 41 -61 30应用求根函数可以方便地求出方程的全部根。 运行 r = roots(p)得 r 5.0000 3.0000 2.0000 1.0000 2 Poly函数 利用Poly(A)函数可以由已知方程的根向量A建立对应的多项式,如果A为一矩阵,则可由poly函数求出A阵的特征多项式的系数。 考虑上例中已知方程的根为r= 5 3 2 1 ,利用 poly(r) 函数农出对应多项式系数。 运行 ppoly(r) 得 p= 1.0000 -11.0000 41.0000 -61.0000 30.0000 显然可以看出poly函数与roots函数是一对互为逆运算功能的函数。如果已知矩阵 可以应用poly函数求取相应特征多项式的系数。运行 p=poly(A) 得 p= 1.0000 -5.0000 -2.0000当然可以利用roots函数求出原矩阵A的特征根,即运行r roots(A) 得 r= 5.3723 -0.3723 比较利用eig函数的运算结果。运行 eig(A)得 ans=-0.3723 5.3723结果完全一致。 表 14给出了MATLAB中的主要多项式运算函数。 附表14多项式运算函数函数名函数功能函数名函数功能poly求取多项式系数polyfit多项式曲线拟合roots求取多项式(方程)的根polyder多项式求导polyval多项式求值conv多项式乘法运算polyvalm矩阵多项式求值deconv多项式除法运算residue展开部分分式6 MATLAB的控制流程语句 MATLAB语言在进行编程时,语句是它的基本单位,除了最常使用的赋值语句(赋值语句用“”描述)外, 各种条件语句、循环语句和While语句也十分重要,其语法和C语言十分相似,但效率较高。61条件语句(ifelse) 编程时经常会根据需要的条件运行不同的语句,以完成不同的工作任务。而(ifelse)条件语句就为用户提供了这种选择。条件语句有几种不同的基本格式。 1基本格式1 if 条件 语句段 end 如果if后面的条件为真,则将执行条件后面的语句段,直到程序结束,否则程序将跳过if与end之间的内容向下执行。 2基本格式2 if条件 语句段1 else 语句段2 end 对于基本格式2,如果满足if后的条件,程序将执行语句段1的内容,否则执行语句段2,直至程序结束。 3基本格式3 if条件1 语句段1 elseif条件 2 语句段2 . . . elself条件n 语句段n else 语句段n+1 end 对于基本格式3,首先判断 if后的条件1,若为真,则执行语句段1;否则将跳至elseif条件2,对条件 2进行判断,为真则执行语句段 2;若不为真则跳至elseif条件 n,再判断条件 n是否满足,满足则执行语句段 n;不满足则执行语句段 n1,直至程序结束。 例1-2 如果当X500,则M=10;若50X500,则M= -10;当10X50,则M=1,否则 M0,应用 MATLAB编制相应的程序。 解:程序如下。 if x500 M 10; elseif x 50 M -10; elseif x10 M=1; else M0; end62 for循环语句 for循环语句用于循环次数可以确定的情况,而根据循环的次数确定程序的执行走向。该语句的基本格式为 for变量=表达式 语句段 end 当执行该段程序时,表达式的值在每循环一次将根据运算结果进行改变,并把计算结果赋值给指定的变量,同时执行一次语句段的内容,表达式的一般形式为k:n,当然这类循环语句是允许嵌套的,语句段的内容可以使用任何MATLAB语句。 例1-3 n5;m4; for i=1:n for j=1:m A(i, j)=1/(i+j-1); end end运算结果 A 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 0.2000 0.1667 0.1429 0.1250在循环语句中,表达式往往与length函数联合使用,以根据不同情况确定循环终止变量。 例14根据已知A阵的最大维数构建方阵B,要求B阵所有行和列元素均按递增变化。编写相应的程序。 解:程序如下。 A= 1 2 3 4 5;9 8 7 6 5 ;6 7 8 9 0; klength(A); for i1:k for j1:k B(i,j)=(i+j-1); end end 由length函数确定A阵的最大维数并将维数值赋给变量k,作为循环终止值,构造指定要求维数的矩阵B,从而得到运算结果为 B= 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 963 while循环语句 当循环次数不能确定时,前述的for循环无法应用了,可以考虑使用while循环方式。其基本格式为 While条件 语句段 end 在While循环中关键应注意,只有当条件不满足时循环才会跳出;如果条件满足,则该循环将一直进行下去不会跳出,所以应用该语句时应特别注意,以免造成死循环。 例 15 试编写相应的程序,计算自然数1,2,3,n累加求和小于1000时的最大值 n。 解:程序如下。 sum=0; k=0; while sum 1000 kk+1; sum=sum+k; end kk-1运算结果 k= 4464 break 语句利用break语句,程序可以随时从循环体内跳出。该语句虽然可跳出循环,但并不终止程序运行。 例1-6 求取面积小于100,半径为整数的圆面积,放到S中,并将半径小于10中的面积大于100的一个最小圆面积存入Q数组中。 解:程序如下。 for r1:10 area= pl* r* r if area100 Q(r)area; break; end s(r)=area; end运行结果 S 3.1416 12.5664 28.2743 50.2655 78.5398 Q 0 0 0 0 0 113.097365 switch 语句 switch语句的基本格式为 switch 变量 case l 语句段1 case 2 语句段2. . otherwise 语句段n end当变量为 1时,执行case l下面的语句段,以此类推,从而实现所要求的程序运算。7 MATLAB的典型时域响应函数 对于一个系统的动态特性,经常采用某一典型输入信号下的响应来加以描述。在MATLAB中为用户提供了求取基本输入信号下的时域响应函数,下面分别对其加以简单介绍。 1求取系统阶跃响应的函数step 它的基本格式为 step(sys) step(sys,T) step(numden,T) step(A, B, C, D, T)其中sys为所研究的系统的状态方程或传递函数形式的模型,num、den分别为系统传递函数多项式的分子、分母多项式系数向量,A、B、C、D为系统状态方程系数阵,T表示系统阶跃响应过程(时间),T可以指定阶跃响应终了时间也可指定计算间隔。对于多输入系统还可指定输入点,由以下格式给出 step(A,B,C,D,iu,T) 例17 已知系统传递函数为试求取20秒的单位阶跃响应。 解:首先建立系统模型,然后再利用step函数求取阶跃响应。 num= 16 ; den= 1 4 36 18 17; T 20: sys= tf(num,den) step(sys, T)如果要指定阶跃响应的计算间隔,则可将T表示成向量形式,如 T=0:0.01:20; 图 1 1给出了运行结果。在MATLAB中一般函数都可以设置返回变量,对于阶跃响应函数同样如此。此时函数执行完毕后不会将结果直接绘制出相应曲线,而是将结果存于相应的变量中,从而可以对运行的结果数据进行分析处理。如下述形式 y,x=step(sys,T)返回变量y为系统仿真时刻计算出的各出值,x为各输出值所对应的时间序列。 对所研究系统的输入信号不是典型信号的情况,MATLAB为用户提供了任意输入信号下的时域响应函数,其基本格式为 lsim(sys,U,T) lism( SyS, U, T,XO) lslm(num,den,U,T) lsim(A, B, C, D, U, T)其中XO为系统初值,而系统的输入信号由U、T描述,时间序列T与输入信号阵U中的元素具有相互对应关系。如 t=0:001:5; u=sin(t); lsim(sys,u,t)则可以实现系统 sys在输入为;u(t)=sin(t)作用下的 5秒钟的仿真过程。 与前面类似,对于不直接要求给出仿真结果曲线时,可以设置返回变量将结果存于相应的返回变量中。例18 已知系统系数阵为 试研究系统输入为 u(t) 200.4sin(t)时的系统响应。 解:由于该系统为一特定的输入信号,因此可以应用lsim函数对该系统进行仿真研究。 A0 1 1;0 0 1;4 3 2; B=0 0 5 C1 0 0 D0: sys ss(A,B,C,D); t=0:0.001:10; u=20+0.4*sin(t); lsim(sys,u,t) grid由此可以得到在特定的输入信号作用下系统的仿真结果,如附图12所示。值得注意的是,即使当输入信号是一常值信号,在应用lsim函数时也必须保证输入变量u的信号特征。附图1-2 u(t)=20+0.4sin(t)信号下的响应在MATLAB中除了前面所介绍的这两类时域响应函数外,还为用户提供了丰富的系统时域分析函数。附表15列出了相关函数与它的基本功能,更加详细的内容可参见帮助或有关文献。 附表15 时城分析函数函数名功能说明initial连续系统零初始响应dinitial离散系统零初始响应impulse连续系统脉冲响应dimpulse离散系统脉冲响应lsim连续系统对任意输入信号的响应dlsim离散系统对任意输入信号的响应step连续系统的阶跃响应dstep离散系统的阶跃响应8 MATLAB的图形绘制81基本平面图在MATLAB中提供了图形绘制的基本函数plot,对于不同的要求,该函数有不同的格式。1对于单参数绘图 以给定的参数作为图形的纵坐标,横坐标与给定参数维数相同,由MATLAB自动生成。若执行 y1 2 5 3 8 4 5 plot(y) grid on则可以得到附图1-3所示的曲线,显然横坐标是由MATLAB自动线性等分生成的,grid附图1-3 plot(y)单参数基本折线图命令指定了在所绘制的图形中构成网格状。 2用户已指定了图形坐标可以采用plot(x,y)形式的绘图函数加以进行, x为横坐标向量,y为纵坐标向量。如果有 x=0:0.01:4*pi; y=sin(x); plot(x,y) grid on则运行上述语句可以得到相应的正弦曲线如图14所示。在这里x和y均为向量,而且它们应具有相同的向量长度。当要绘制在同一横坐标下的多条曲线时,同样可以使用该函数,此时y由多个与x长度相同的肉量构成。例如运行下述语句 x=0:0.01:4*pi; ysin(x);cos(x); plot(x,y) grid on附图1-5给出了运行结果,将两条不同的曲线绘制在同一坐标系上。图14 polt( x,y)函数基本图形 附图1-5 应用polt(x,y)绘制多条曲线利用plot(,y)函数也可以在同一窗口上绘制不同横坐标下的多条曲线,其基本格式为 plot(x1,y1,x2, y2,)在MATLAB的绘图函数中还可以对各种线型、颜色等图形特性进行设置。其基本格式为 plot(x,y,选项)利用这些选项可以将同一窗口中的不同曲线设置为所希望的线型和颜色。具体的选项内容由附表16给出。 例如语句 plot(x,y,-g)表示所绘出的曲线为绿色虚线。 附表1-6 线型选项颜 色线 型y黄色.点m紫红色o圆c青色xX符号r红色+加号g绿色-实线b蓝色*星号w白色-.点画线k黑色- - :虚线3同一窗口的多图幅曲线的绘制 在实际工作中经常需要在同一个窗口内绘制几个图幅曲线,这可以通过subplot函数将图形窗口分割为若干个子窗口。其基本格式为 subplot(m,n,i)上述函数的功能就是将图形窗口分割为m行n列个子窗口,i指定了当前窗口。 例如运行下述程序: x0:0.01:4*pi; ysin(x) ; subplot(2,2,1) plot(x,y) grid subplot(2,2,2) plot( x, 2* y) grid ysin(x);cos(x);
展开阅读全文