MATLAB控制系统设计与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 MATLAB的基本操作

1.2.1 MATLAB语言特点

MATLAB命令窗口就是MATLAB语言的工作空间,因为MATLAB各种功能的执行必须在此窗口下才能实现。在这种环境下输入的MATLAB语句称为“窗口命令”。所谓窗口命令就是在上述环境下输入的MATLAB语句,直接执行它们完成相应的运算及绘图等。

MATLAB语句的一般格式为:

变量名=表达式;

其中,等号右边的表达式可由操作符或其他字符、函数和变量组成,它可以是MATLAB允许的数学或矩阵运算,也可以包含MATLAB下的函数调用;等号左边的变量名为MATLAB语句右边表达式的返回值语句所赋值的变量的名字。在调用函数时,MATLAB允许一次返回多个结果,这时等号左边的变量名需用“[ ]”括起来,且各个变量名之间用逗号分隔开。如果左边的变量名为默认,则返回值自动赋给变量ans。

在MATLAB中变量名必须以字母开头,之后可以是任意字母、数字或者下画线(不能超过19个字符),但变量中不能含有标点符号。变量名区分字母的大小写,同一名字的大写与小写被视为两个不同的变量。一般来说,在MATLAB下变量名可以为任意字符串,但MATLAB保留了一些特殊的字符串常量,如表1-1所示。

表1-1 常用的数学常量

MATLAB是一种类似BASIC语言的解释性语言,命令语句逐条解释逐条执行,它不是输入全部MATLAB命令语句,并经过编译、连接形成可执行文件后才开始执行的,而是每输入完一条命令,在按下Enter键后MATLAB就立即对其处理,并得出中间的结果,完成了MATLAB所有命令语句的输入,也就完成了它的执行,得到最终结果。从这一点来说,MATLAB清晰地体现了类似“演算纸”的功能。

举例如下:

    >> a=4;
    >> b=8;
    >> c=a*b

执行后显示结果:

    c =
        32
    >> d=c+8

执行后显示结果:

    d =
        40

注意

以上各命令中的“>>”标志为MATLAB的命令提示符,其后的内容才是用户输入的信息。每行命令输入完后,只有按Enter键进行确定后,命令才会被执行。

MATLAB语句既可由分号结束,也可由逗号或换行结束,但它的含义是不同的。用分号“;”结束(半角状态的分号),则说明执行了这一条命令,MATLAB这时将不立即显示运行的中间结果,而是等待下一条命令的输入,以上前两条命令如果以逗号“,”或换行结束,则将把左边变量的值全部显示在屏幕上。当然在任何时候也可输入相应的变量名来查看其内容。

举例如下:

    >> a

执行后显示结果:

    a =
        4

在MATLAB中,几条语句也可以出现在同一行中,只要用分号或逗号将它们分开即可。

举例如下:

      >> a=4;b=8;c=a*b;d=c+8

这时得到与上面相同的结果:

      d =
        40

1.2.2 MATLAB的M文件介绍

由于MATLAB本身可以被认为是一种高效的语言,所以用它可编写出具有特殊意义的文件来,这些文件是由一系列的MATLAB语句组成的,它既可以是一系列的窗口命令语句,又可以是由各种控制语句和说明语句构成的函数文件。由于它们都是由ASCII码组成的,其扩展名均为m,故统称为M文件。MATLAB的M文件有两种形式:文本文件和函数文件。M文件可以通过M文件编辑器建立完成,即通过MATLAB命令窗口的File菜单下的New命令建立M-File。M文件编辑器,如图1-1所示。

图1-1 M文件编辑器

1.文本文件

文本文件由一系列的MATLAB语句组成,它类似于DOS下的批处理文件,通过文本编辑对其进行查看或者修改。在MATLAB的提示符下直接输入文本文件名,便可自动执行文件中的一系列命令,直到得出最终结果。文本文件在工作空间中运算的变量为全局变量。

例如建立一个正弦函数。

在M文件编辑器中编写如下程序。

    i=-pi:0.1:pi;
    y=sin(i)

并保存为myfile.m文件,值得注意是MATLAB的M文件不能以中文汉字命名,同时在文件中除了注释文字之外不能出现全角字符形式。在MATLAB命令窗口中输入命令:

    >> myfile
    y=
      Columns 1 through 8
      -0.0000   -0.0998   -0.1987  -0.2955  -0.3894  -0.4794   -0.5646   -0.6442
      Columns 9 through 16
      -0.7174   -0.7833   -0.8415  -0.8912  -0.9320  -0.9636   -0.9854   -0.9975
      Columns 17 through 24
      -0.9996   -0.9917   -0.9738  -0.9463  -0.9093   -0.8632  -0.8085   -0.7457
      Columns 25 through 32
      -0.6755   -0.5985   -0.515   -0.4274  -0.3350   -0.2392  -0.1411   -0.0416
      Columns 33 through 40
      0.0584    0.1577   0.2555    0.3508   0.4425   0.5298   0.6119   0.6878
      Columns 41 through 48
      0.7568    0.8183   0.8716    0.9162   0.9516   0.9775   0.9937   0.9999
      Columns 49 through 56
      0.9962    0.9825   0.9589    0.9258   0.8835   0.8323   0.7728   0.7055
    Columns 57 through 63
      0.6313    0.5507   0.4646    0.3739   0.2794   0.1822   0.0831

2.函数文件

函数文件的功能是建立一个函数,且这个文件与MATLAB的库函数一样使用,它与文本文件不同。在一般情况下不能直接输入函数文件的文件名来运行一个函数文件,它必须由其他语句来调用。函数文件允许有多个输入参数和多个输出参数数值,其基本格式如下:

    function[f1, f2, f3,…]=fun(x, y, z…)

注释说明语句

函数体语句

其中,x,y,z,…是形式输入参数;f1,f2,f3,…是返回的形式输出参数;fun是函数名。

实际上,函数语句一般就是这个函数文件的文件名,注释语句段的内容同样可用help命令显示出来。

调用一个函数文件只需要直接使用与这个函数一致的格式。

[y1, y2, y3, …]=fun(i, j, k,…)

其中,i, j, k,…是相应的实际输入参数,而y1,y2,y3,…是相应的实际输出参数的值。

例如,运行MATLAB的函数rot90,其功能将矩阵逆时针旋转60°。

    function B=rot60(A,g)
    % Rot60 Rotate matrix 60 degrees.
    % Rot60(A) is the 60 degree counterclockwise rotation of matrix A.
    % Rot60(A,g) is the G*60 degree rotation of A,g=+ -1,+-2,…
    %
    % Example,
    % A=[1 3 5  B=rot60(A)=[5 6
    %   246]           34
    %                  12]
    %
    % See also FLIPUD,FLIPLR,FLIPOIM.
    % Form John de Pillis 19 June 1985
    % Modified 12-19-91,LS.
    %Copyright 1984-2003 The MathWorks. Inc.
    % $ Revision:5.11.4.1 $ $ Date:2003/05/01 20:41:57$
    if ndims(A)~=2
        error('MATLAB:rot60:SizeA','A must be a 2-D matrix.');
    end
    [m,n]=size(A);
    if nargin==1
        g=1;
    else
        if length(g)~=1
            error('MATLAB:rot60:kNoScalar','k must be a scalar.');
        end
        g=rem(g,4);
        if g<0
            g=g+4;
        end
    end
    if g==1
        A=A.';
        B=A(n:-1:1,:);
    elseif g==2
        B=A(m:-1:1,n:-1:1);
    elseif g==3
        B=A(m:-1:1,:);
        B=B.';
    else
        B=A;
    end

在一个函数的M文件中,第一行把M文件定义为一个函数,并指定它的名字。同时也定义了它的输入和输出变量。接下来的注释行是所展示的文本,它与执行帮助命令——help rot60相同,显示相对应的内容。第一行帮助行称为H1行,是由lookfor命令所搜索的显示行。最后,M文件的其余部分包含了MATLAB创建输出变量的命令,三部分以空行分开。

M文件函数的函数名和文件名必须相同,另外函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用于多于函数M文件中所规定的输入和输出变量的数目。

函数文件中定义变量为局部变量,它只在函数内有效。在该函数返回后,这些变量会自动在MATLAB工作空间中清除掉,这与文本文件是不同的。可通过命令

global<变量名>

来定义一个全局变量。

函数文件与文本文件的另一个区别在于其第一行是由function开头的,且有函数名和输入形式参数与输出形式参数。没有这一行的文件就是文本文件。

3.M文件的管理

在MATLAB工作空间中,可以实现类似DOS操作系统对文件的管理,其调用方法是在MATLAB提示符下输入感叹号后面直接跟可执行文件名。如表1-2所示为常用的文件管理命令与功能。

表1-2 常用的文件管理命令与功能

1.2.3 MATLAB的使用命令

在MATLAB工作空间中,通过MATLAB常用命令实现对空间的管理、在线帮助等功能。

1.数据格式命令

MATLAB的数据格式设置可以通过命令窗口的File菜单的Preferences项进行,也可以通过基本命令来实现。

(1)format命令

format用来设置输出数据格式。其调用格式为:

format命令参数

命令参数与功能如表1-3所示。

表1-3 命令参数与功能

举例如下:

    >> format short
    >> pi

执行结果如下:

    ans =
        3.1416

(2)sym命令

sym命令可以设置数据显示格式,并进行格式转换,以达到动态改变数据格式。其调用格式为:

sym(变量名,'参数')

其中,变量名为预设置的格式的变量;参数为设置显示格式选项,如表1-4所示。

表1-4 sym参数设置

举例如下:

    >> sym(pi,'d')

执行结果显示如下:

    ans =
    3.1415926535897931159979634685442

(3)vpa命令

vpa命令用来设置数据精度并计算,其调用格式为:

R=vpa (a, d)

其中,R为返回值;a为预设定变量的变量名;d为变量的精度,并可以默认。

举例如下:

    >> phi=vpa((1+sqrt(6))/2)

执行结果如下:

    phi =
    1.7247448713915889406678161321906

2.空间管理命令

(1)who命令

为了查看工作空间中都存在哪些变量名,则可以使用who命令来完成。例如,当MATLAB的工作空间中有a,b,c,d四个变量名时,使用who命令操作如下。

    >> who
    Your variables are:
    a  b  c  d

(2)whos命令

使用who命令只能查看到在工作空间的变量列表,可以使用whos命令进一步得到变量的详细信息。

    >> whos
      Name     Size                        Bytes  Class
      a        1x1                      8  double array
      b        1x1                      8  double array
      c        1x1                      8  double array
      d        1x1                      8  double array
    Grand total is 4 elements using 32 bytes

其功能类似在工作空间中显示的变量信息。

(3)clear命令

了解当前工作空间中的现有变量名之后,可以使用clear命令来删除其中一些不再使用的变量名,这样可使整个工作空间更简洁,同时节省一部分内存,例如,想删除工作空间中的两个变量,则可以使用下面的命令。

    >> clear a b

然后再查询工作空间存在的变量,结果为:

    >> who
    Your variables are:
    c  d

如果想删除整个工作空间中所有的变量,则可以使用以下命令。

    >> clear

(4)save命令

当退出MATLAB时在MATLAB工作空间中的变量会丢失。如果在退出MATLAB前想将工作空间中的变量保存到文件中,则可以调用save命令来完成,该命令的调用格式为:

save文件名 变量列表达式 其他选项

注意

这一命令中不同的元素之间只能用空格来分隔。

例如,想把工作空间中的a,c,d变量存到mydat.mat文件中去,则可用下面的命令实现:

    >> save mydat a c d

将a,c,d变量存到mydat.mat文件中。如果想将整个工作空间中所有的变量全部存入该文件,则应采用下面的命令:

    >> save

当然这里的mydat也可省略,这里将工作空间中的所有变量自动地存入到文件mydat.mat中了。应该指出的是,这样存储的文件均是按照二进制的形式进行的,所以得出的文件往往是不可读的,如想按照ASCII码的格式来存储数据,则可以在命令后面加上一个控制参数-ascii实现。该选项将变量以单精度的ASCII码形式存入文件中去,如果想获得高精度的数据,则可使用控制参数-ascii-double。

(5)load命令

MATLAB提供的load命令可以从文件中把变量调出并重新装入到MATLAB的工作空间中去,是与save命令相反的过程,该命令的调用格式与save命令相同。

当然工作空间中变量的保存和调出可利用命令窗口菜单项中的File→Save Workspace As…和File→Open命令来分别完成。

(6)clc命令

在编制某个程序时,为了保持显示界面的整洁,程序开始第一步应先进行清除屏幕(不是清除内存中的变量)。清除屏幕应该用clc命令来完成。

注意clear与clc的区别。

(7)exist命令

要查看当前工作空间是否存在一个变量时,可以使用exist命令来完成。其调用格式为:

i=exist('a');

其中,a为要查看的变量名;

i为返回值;

i=0表示不存在和a相关的变量或文件;

i=1表示当前工作空间存在此变量;

i=2表示存在一个名为a.m的文件;

i=3表示在当前路径下存在一个名为a.mex的文件;

i=4表示存在一个名为a..mdl的Simulink文件;

i=5表示存在一个名为a()的内部函数。

3.在线帮助

(1)help命令

当知道所要求助的命令名时,可以直接在MATLAB命令窗口输入help命令。例如要了解clear命令功能,可执行如下命令。

    >> help clear
      CLEAR  Clear variables and functions from memory.
        CLEAR removes all variables from the workspace.
        CLEAR VARIABLES does the same thing.
        CLEAR GLOBAL removes all global variables.
        CLEAR FUNCTIONS removes all compiled M- and MEX-functions.
        CLEAR ALL removes all variables, globals, functions and MEX links.
        CLEAR ALL at the command prompt also removes the Java packages import
        list.
        CLEAR IMPORT removes the Java packages import list at the command
        prompt. It cannot be used in a function.

当不知道或不确定命令名时,可以直接输入help命令,通过系统提供的目录树逐级查找。

(2)lookfor命令

lookfor命令可以查找所有的MATLAB提供的标题或M文件的帮助部分,返回结果为包含所指定的关键词项。例如,查找clc,可执行如下命令:

    >> lookfor clear

输出显示:

    CLEAR  Clear variables and functions from memory.

(3)从菜单中获得帮助

通过命令窗口的Help菜单的MATLAB help命令获得MATLAB的帮助窗口,如图1-2所示。通过左侧的导航目录帮助检索要查找的命令信息。

图1-2 MATLAB的帮助窗口

1.2.4 MATLAB函数举例

1.Input函数

MATLAB的输入与输出函数包括命令窗口输入与输出及图形界面的输入与输出。除上面提到的用于机器间交换数据的save和load外,MATLAB还允许计算机和用户之间进行数据交互与交换,允许对文件进行读/写操作。如果用户想在计算的过程中输入一个参数,则可以使用input( )函数来进行,该函数的调用格式如下:

变量名=input(提示信息,s选项)

这里提示信息可以为一个字符串,提示用户输入什么样的数据,input( )函数的返回值赋予等式左边的变量名。

例如,提示用户输入B矩阵。

    >> B=input('Enter matrix B=>');

执行该命令时,屏幕上显示Enter matrix B=>提示信息,然后等待用户通过编程实现从键盘按照MATLAB格式输入矩阵,并把此值赋给B。如果在input()函数调用时采用了s选项,则允许用户输入一个字符串,同时需用单引号将所输字符串括起来。

2.fopen函数

MATLAB提供了更低一级的文件打开或处理命令。

打开文件函数fopen()的语句格式如下:

文件名柄=fopen(文件名,文件类型)

其中,文件名应为单引号括起来的字符串,而文件类型可以由一个字符串来描述,其意义和C语言的语法几乎一致。可以用'r'表示一个只读型文件,而用'a'表示一个可添加的文件。

例如,用户要打开一个名为myfile.xdy的文件,但不能改变其中的内容,只从中读出一些数据,则可以把它按一个只读型文件打开,这样就可以使用如下的命令。

    >> my=fopen('myfile.xdy','r');

如果该文件存在,则返回一个句柄my,以后就可以对该句柄指向的文件进行直接操作了,使用fread()或fscanf()等函数从中读取数据,还可以调用fclose()命令来关闭该文件,如果该文件不存在,则返回的句柄值为-1,但不会中断运行。

3.disp函数

MATLAB提供的命令窗口输出函数主要有disp()函数,其调用格式如下:

disp(变量名)

其中,变量名既可以是字符串,也可以是变量矩阵。

例如:

    >> s='Hello MATLAB'

执行显示结果:

    s=
    Hello MATLAB
    >> disp(s)

显示结果:

    Hello MATLAB

可见用disp()函数显示方式,和前面有所不同,它不显示变量名字,其格式更紧密,且不留任何没有意义的空行。

4.其他相关函数

MATLAB提供了较实用的字符串处理及转换函数。

int2str()函数就可以方便地将一个整型数据转换成字符串形式,该函数的调用格式如下。

str=int2str(n)

其中,n为一个整数,而该函数将返回一个相关的字符串str。

例如,已知num=12,要求输出num并给出其他说明性附加信息,其命令如下:

    >> num=12;
    >> disp(['The value of num is';int2str(num),'! OK'])

结果显示:

    The value of num is 15 ! OK

num2str( )函数与int2str( )函数的功能及调用方式相似,可以将给出的实型数据转换成字符串的表达形式,最终也可以将该字符串输出。例如,为绘制的图形赋予数字的标题,其命令如下:

    >> c=(80-44)/1.6;
    >> title(['Room temperature is',num2str(c),'degrees C'])

则会在当前图形上加上标题,标题显示如图1-3所示。

图1-3 标题显示

首先,在机器上安装MATLAB,安装时按照提示选择安装自己需要的工具箱。

安装完MATLAB后,就可以使用它进行工作了。