计算机仿真技术与CAD
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 MATLAB的基本操作

1.语言结构

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

表1-1 MATLAB中的算术运算符

MATLAB语句的一般形式为

变量名=表达式

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

MATLAB中使用的算术运算符如表1-1所示。对于矩阵来说,这里左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于标量,两种除法运算的结果相同,如1/4和4\1有相同的值0.25。常用的十进制数符号如小数点、负号等,在MATLAB中也可以同样使用,表示10的幂次要用符号e或E,如3,-99,0.0001,1.6e-20,6.2e23。

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

表1-2 MATLAB中的特殊变量

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

      >>a=5;
      >>b=6;
      >>c=a*b,
      >>d=c+2

其中第3、4条命令的执行结果分别显示如下

      c=
        30
      d=
        32

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

MATLAB语句既可由分号结束,也可由逗号或换行号结束,但它们的含义是不同的。如果用分号“;”结束,则说明除了这一条命令外还有下一条命令等待输入,MATLAB这时将不立即显示运行的中间结果,而等待下一条命令的输入,如上面例子的前两条命令;如果以逗号“,”或回车结束,则将把左边返回的内容全部显示出来,如上面例子的后两条命令。当然在任何时候也可输入相应的变量名来查看其内容。例如:

      >>a

结果显示:

      a=
        5

在MATLAB中,几条语句也可出现在同一行中,只要用分号或逗号将它们分割开来。例如:

      >>a=5;b=6;c=a*b,d=c+2

这时可得与上面相同的结果。

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

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

注意,这一命令中不能使用逗号,不同的元素之间只能用空格来分隔。例如,想把工作空间中的a,b,c变量存到mydat.mat文件中去,则可用下面的命令来实现:

      >>save mydat a b c

这里将自动地使用文件扩展名“.mat”。如果想将整个工作空间中所有的变量全部存入该文件,则应采用下面的命令:

      >>save mydat

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

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

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

如果想查看目前的工作空间中都有哪些变量名,则可以使用who命令来完成。例如,当MATLAB的工作空间中有a,b,c,d四个变量名时,使用who命令将得出如下的结果:

      >>who
        your variable are:
        a  b  c  d

想进一步了解这些变量的具体细节,则可以使用whos命令来查看。

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

      >>clear a b

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

      >>clear

在MATLAB命令窗口中,利用上下方向键可以回调已输入的命令,向上和向下方向键“↑”和“↓”分别用于回调上一行和下一行命令。回调后的命令也可进行编辑等操作。

但仅靠一条一条地输入语句,MATLAB难以实现复杂功能,为了实现诸如循环、条件、分支等功能,MATLAB利用了M文件,M文件由一系列的MATLAB语句组成。

MATLAB实际上可以认为是一种解释性语言,用户可以在MATLAB工作环境下一条一条地键入命令,也可以直接键入用MATLAB语言编写的M文件名,或将它们结合起来使用。这样MATLAB软件对此命令或M文件中各条命令进行翻译,然后在MATLAB环境下对它进行处理,最后返回运算结果。所以说MATLAB语言的结构可用下式进行描述:

MATLAB语言=窗口命令+M文件

2.磁盘文件

因为MATLAB本身可以被认为是一种高效的语言,所以用它可编写出具有特殊意义的磁盘文件来。这些磁盘文件由一系列的MATLAB语句组成,它既可能是由一系列窗口命令语句构成的文本文件(简称为MATLAB的程序),又可以是由各种控制语句和说明语句构成的函数文件(简称为MATLAB的函数)。由于它们都是由ASCII码构成的,其扩展名均为“.m”,故统称为M文件。

由于M文件具有普通的文本格式,因而可以用任何编辑器建立和编辑。但一般最常用、而且最为方便的是使用MATLAB自带的编辑器,即利用MATLAB命令窗口中的菜单命令File→New→M-File或File→Open打开的M文件编辑窗口对M文件进行建立和编辑。MATLAB为了进一步方便用户对M文件的建立和编辑,在窗口中也设置了快捷工具“”和“”。

(1)文本文件

文本文件由一系列的MATLAB语句组成,它类似于DOS下的批处理文件,在MATLAB的提示符下直接键入文本文件名,回车后便可自动执行文件中的一系列命令,直至给出最终结果。文本文件在工作空间中运算的变量为全局变量。

例1-1】 利用MATLAB的文本文件,求函数

x1 =-2,x2 =3,x3 =1时的值。

①首先在MATLAB的命令窗口中,利用菜单命令File→New→M-File,打开M文件编辑器,然后在编辑器中根据例题中所给函数编写以下文本文件,并以ex1_1_1为文件名进行保存(后缀.m自动追加)。

            %ex1_1_1.m
            x1=-2;x2=3;x3=1;
            y1=3*x1.^2+x2+x3
            y2=3*x1.^2-x2-x3

其中,带%的语句为说明语句,不被MATLAB所执行,它可以在命令窗口中利用help ex1_1_1命令来显示%后的内容。

②当以上文本文件ex1_1_1.m建立后,在MATLAB命令窗口中输入

      >>ex1_1_1

回车后显示:

      y1=
          16
      y2=
          8

由于文本文件中的变量为全局变量,故以上变量x1x2x3的值,也可在文本文件外先给定,此时的文本文件为

            %ex1_1_2.m
            y1=3*x1.^2+x2+x3
            y2=3*x1.^2-x2-x3

当以上文本文件ex1_1_2.m建立后,利用以下命令,同样可以得到以上结果。

      >>x1=-2;x2=3;x3=1;ex1_1_2

以上两种方式下,文本文件中变量的值都被保存下来,这与下面的函数文件是不同的。

(2)函数文件

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

                          function [f1,f2,f3,…] =fun(x,y,z,…)
                          注释说明语句
                          函数体语句

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

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

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

[y1,y2,y3,…] =fun(a,b,c,…)

其中,a,b,c,…是相应的实际输入参数的值;而y1,y2,y3,…是相应的实际输出参数的值。

例1-2】 利用MATLAB的函数文件,求函数

x1 =-2,x2 =3,x3 =1时的值。

①由于函数文件的建立与文本文件完全一样,故与例1-1一样首先根据例题中所给函数在MATLAB的M文件编辑器下,建立以下函数文件ex1_2.m。

            %ex1_2.m
            function [b1,b2] =ex1_2(a1,a2,a3)
            b1=3*a1.^2+a2+a3;
            b2=3*a1.^2-a2-a3;

②当以上函数文件ex1_2.m建立后,在MATLAB命令窗口中输入命令:

      >>x1=-2;x2=3;x3=1;[y1,y2] =ex1_2(x1,x2,x3)

结果显示:

      y1=
          16
      y2=
          8

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

global<变量>

来定义一个全局变量。

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

3.库函数和数值显示格式

(1)库函数

为了方便用户,MATLAB提供了丰富的库函数,库函数是根据系统已经编制好了的,提供用户直接使用的函数,MATLAB中常用的基本数学函数,如表1-3所示。

表1-3 MATLAB的基本函数

除了基本函数外,不同版本的MATLAB还增加了具有不同功能的库函数,也称工具箱。例如控制系统工具箱、模糊逻辑工具箱、神经网络工具箱和模型预测控制工具箱等。

对于各种函数的功能和调用方法可使用MATLAB的联机帮肋help来查询,例如:

      >>help sin   %得到正弦函数的使用信息;
      >>help [     %显示如何使用方括号。

(2)数值显示格式

尽管MATLAB计算中所有的量为双字长浮点数,但为了方便显示应遵循下面的规则。

在默认情况下,当结果为整数时,MATLAB将它作为整数显示;当结果为实数时,MATLAB以小数点后4位的精度近似显示;如果结果中的有效数字超出了这一范围,MATLAB以科学计数法显示结果。MATLAB可以使用format命令来改变显示格式,其调用格式为

format控制参数

其中,控制参数决定显示格式,控制参数如表1-4表示。

表1-4 format命令的控制参数

4.基本输入输出函数

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

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

这里提示信息可以为一个字符串显示,它用来提示用户输入什么样的数据,input()函数的返

回值赋给等号左边的变量名。

例如,用户想输入x的值,则可以采用下面的命令来完成:

      >>x=input(′Enter matrix x=>′)

执行该命令时首先给出Enter matrix x=>提示信息,然后等待用户从键盘按MATLAB格式输入值,并把此值赋给x

如果在input()函数调用时采用了′s′选项,则允许用户输入一个字符串,此时需用单引号将所输字符串括起来。

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

disp(变量名)

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

      >>s=′Hello World′

结果显示:

            s=
              Hello World
            >>disp(s)

结果显示:

            Hello World

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

MATLAB提供了较实用的字符串处理及转换的函数,例如int2str()函数就可以方便地将一个整形数据转换成字符串形式,该函数的调用格式为

cstr=int2str(n)

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

例如num的数值为num=15,而在输出中还想给出其他说明性附加信息,则可利用语句:

      >>num=15;disp([′The value of num is′,int2str(num),′! ok′])

结果显示:

            The value of num is 15 ! ok

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

      >>c=(70-32)/1.8;title([′Room temperature is′,num2str(c),′degrees C′])

则会在当前图形上加上题头标注:

            Room temperature is 21.1111 degrees C

5.外部程序调用

MATLAB允许在其命令窗口中调用可执行文件,其调用方法是在MATLAB提示符下键入惊叹号“!”,后面直接跟该可执行文件即可。MATLAB也允许采用这样的方式来直接使用DOS命令,如磁盘复制命令copy可以由!copy来直接使用,而文件列表命令dir可以由!dir来调用。事实上,为了给用户提供更大的方便,MATLAB已经把一些常用的DOS命令做成了相应的MATLAB命令,表1-5列出了MATLAB中提供的一些文件管理命令。

表1-5 文件管理命令

当然由C或FORTRAN编译产生的可执行文件可采用上述方法直接调用,但此时MATLAB和该程序之间的数据传递是由读写文件的方式来完成的,这种调用格式虽然直观,但其缺点是速度相当慢;此外由于调用方式的原因,使用起来不是特别规范。故MAT-LAB还提供了对C或FORTRAN语言编写的程序的另一种调试方式,它是通过MATLAB提供的MEX功能来实现的。它由所调用的C或FORTRAN源码编译、连接而成MEX文件或EXE文件,这种可执行文件的速度较快,因为它和MATLAB之间的数据传递是通过指针来完成的,而不涉及对文件的读写,且其调用格式和MATLAB本身的函数调用格式完全一致,就如同这些子程序是MATLAB本身的程序一样。