1.1MATLAB概述
MATLAB是美国Mathworks公司于 1984 年推出的一套数值分析和矩阵运算软件,经过几十年的发展,现已成为一种高度集成的计算机语言,是当今科技领域内最具影响力、最有活力的软件之一,被广泛应用于数据处理、科学绘图、控制系统仿真、数字图像处理、通信系统设计以及财务金融等领域。
1.1.1 操作界面
MATLAB软件安装完成后,可通过创建的桌面快捷方式;也可以到 “开始” 菜单里查找安装的软件;还可以到软件的安装目录里,打开bin文件夹,单击其中的matlab.exe文件,都可启动 MATLAB 软件,启动后MATLAB操作界面如图1-1所示。
操作界面包括当前文件夹、命令行和工作区等3个窗口。
图1-1MATLAB操作界面
1.当前文件夹
当前文件夹是指MATLAB运行文件的工作文件夹,只有在当前文件夹或搜索路径下的文件及函数可以被直接运行或调用,如果没有特殊指明,数据文件也将存储在当前文件夹下。通常很多人都习惯于建立自己的工作文件夹,便于文件和数据的管理,因此在运行文件前要将该文件所在的文件夹设置为当前文件夹。
2.命令行窗口
命令行窗口用于输入MATLAB命令、函数、矩阵及表达式等信息,并显示除图形以外的所有计算结果,是MATLAB的主要交互窗口。当命令行窗口出现提示符>>时,表示MAT-LAB已准备好,可以输入命令、变量或函数,按 〈Enter〉 键后就可执行。
【例1-1】 计算A=512/8-50×2+120。
命令行窗口显示结果如下:
【例1-2】 计算2sin(π/4)+3cos(π/2)。
命令行窗口显示结果如下:
MATLAB语法规定,百分号 “%” 后面的语句为注释语句。注释语句不参与执行,只用来说明程序或算法,增加程序的可读性。ans表示在缺省变量名时,系统默认的变量名。
此外,在命令行窗口中单击方向键 〈↑〉,可以调出已经输入的前一条命令;单击方向键 〈↓〉,可调出当前命令之后的一条命令。
3.工作区
工作区是MATLAB用于存储各种变量和运算结果的内存空间。在命令行窗口中输入的变量、运行文件建立的变量、调用函数返回的计算结果等,都将被存储在工作区中,直到使用了clear命令清除工作区或关闭了MATLAB系统为止。需要注意的是:函数在运行中调用的一些临时变量,不会占用工作区,这些变量在函数运行结束后将被释放。
通过工作区窗口可以观察数据名称、尺寸及数据类型等信息,为了对变量的内容进行观察、编辑与修改,可以打开变量编辑器。打开变量编辑器有两种方法:
1)双击变量名;
2)将鼠标指向要观察的变量名,单击鼠标右键,在弹出的菜单中选择 “打开所选内容” 选项。变量编辑器如图1-2所示。
在命令行窗口中,输入 “whos” 命令,可以显示保存在工作区的所有变量的名称、大小、数据类型等信息;输入 “who” 命令则只显示变量的名称。输入 “clear” 命令,可以清除工作区内所有变量,并释放系统内存空间;输入 “clc” 命令则只清除命令行窗口的屏幕显示内容,而保留工作区内容。
图1-2 变量编辑器
【例1-3】 分别用whos、who检查 【例1-1】 和 【例1-2】 运行后的工作空间。
命令行窗口显示结果如下:
命令行窗口显示结果如下:
1.1.2 帮助系统
MATLAB提供了数目繁多的函数和命令,要把它们全部记下来是不现实的。可行的办法是先掌握一些基本内容,然后在实践中不断总结和积累。因此,通过软件本身提供的帮助来学习软件是一个重要的学习方法,MATLAB提供了功能强大的帮助系统,可以很方便地获得有关函数或命令的使用方法。
1.函数浏览器
在命令行窗口内单击鼠标,使光标停留在命令行窗口,再单击按键 〈Shift+F1〉,MAT-LAB将打开函数浏览器窗口,如图1-3所示。
在函数浏览器窗口内,用鼠标指向某个函数,停留片刻,就会弹出对该函数的解释,使用起来非常方便。
2.help函数
在命令行窗口输入 “help” 函数,也是MATLAB寻求帮助的一种方便快捷的方法,help函数的用法主要有以下3种:
(1)显示当前函数信息。在命令行窗口执行完某个函数或命令后,直接输入 “help”函数,会显示该函数的用法。例如在命令行窗口输入如下函数:
图1-3 函数浏览器窗口
命令行窗口显示结果如下:
此MATLAB函数清除命令行窗口中的所有文本,让屏幕变得干净。运行clc后,用户不能使用命令行窗口中的滚动条查看以前显示的文本,但可以在命令行窗口中使用向上箭头键〈↑〉 从命令历史记录中重新调用语句。
(2)显示某类函数信息。在 “help” 函数后,输入某类函数的名称(需要知道某类函数的名称或在 “帮助” 文档中检索)。例如在命令行窗口输入如下函数:
命令行窗口部分显示结果如下:
(3)显示具体函数的帮助信息。在 “help” 函数后,输入某个函数的名称(需要知道该函数的名称或在 “帮助” 文档中检索)。例如在命令行窗口输入如下:
命令行窗口部分显示结果如下:
此MATLAB函数将X的每个元素四舍五入为最近的整数。在对等情况下,即有元素的小数部分恰为0.5时,round函数会偏离零四舍五入到具有更大幅值的整数。
注意:MATLAB对字母的大小写是敏感的,变量A与变量a表示两个不同的变量。MATLAB所有的命令和函数都必须用小写,例如round函数,不能写成Round或ROUND。
函数的帮助信息是把指定函数的注释内容显示出来。因此,用户也可以采用这种注释结构,构成自己文件的在线帮助。
3.lookfor函数
当用户希望查找具有某种功能的命令或函数,但又不知道准确名字的时候,可以使用“lookfor” 函数。该函数可以根据用户提供的完整或不完整的关键词,搜索出一组与之相关的函数。例如查找有关图像的函数,将image作为关键词来查找,具体如下:
命令行窗口部分显示结果如下:
4.模糊查询
用户只需要输入函数的前几个字母(例如im),然后单击〈Tab〉键,就会弹出一个浮动窗口列出以这几个字母开始的函数,这样用户就知道了某个函数的确切写法,然后再通过help函数查询其详细的解释。
5.在线帮助页
帮助页面的所有文件均有相应的PDF格式文件,称为在线帮助页,可用Adobe Acrobat Reader软件阅读。用户选中帮助页面上关于PDF格式文件的选项,或是在命令行窗口中输入命令doc,都能自动打开在线帮助页。
1.1.3 数据结构
正如MATLAB的名字——“矩阵实验室” 的含义一样,MATLAB是由专门用于矩阵运算的软件发展起来的,最初的目的是为了解决矩阵运算问题而开发的,所以矩阵是MATLAB最基本、最重要的数据对象。MATLAB大部分运算或函数都是在矩阵运算的意义下执行的,而且这种运算是定义在复数域上的。MATLAB的矩阵运算功能非常丰富,可以支持线性代数所定义的全部矩阵运算,许多含有矩阵运算的复杂计算问题,在MATLAB中很容易得到解决。
1.矩阵和数组
矩阵是指含有M行、N列(M、N为正整数)数据的矩形结构。通过一定的转化方法,可以将一般的数学运算转化成相应的矩阵运算来处理。在MATLAB中,单个数值(标量)被看作是只有1行1列、仅含1个元素的矩阵;列向量是只有1列的矩阵、行向量(矢量)是只有1行的矩阵。
数组在结构上与矩阵没有区别,只是运算规则不同。数组运算是同一位置(坐标)的元素之间的运算,也就是说无论什么运算,对数组中的元素都是平等进行的;矩阵运算是强调整体的运算,采用线性代数的运算方法。MATLAB可以进行上述两种运算,MATLAB是通过运算符的不同来区别这两种运算,带有小黑圆点的运算符就代表相应的数组运算。例如A∗B表示矩阵运算;A.∗B表示数组运算。
2.数据结构
对于数值数据,MATLAB中最常用的类型为双精度型,占64 位(8B),用 double 函数实现转换。此外还有单精度数,占32位(4B),用single函数实现转换。还有带符号整数和无符号整数,其转换函数有int8、int16、int32、uint8、uint16和uint32,每一个函数名后面的数字表示相应数据类型所占位数,其含义不难理解。
除数值数据以外,还有字符数据,在MATLAB中用char函数实现转换。在一般情况下,数组的每个元素必须具有相同的数据类型,但在实际应用中,有时需要将不同类型的数据构成同一个数组,因此,MATLAB提供了结构体(struct)和单元(cell)数据类型,用户也可以根据实际应用需要自定义数据类型。此外,MATLAB还提供多维数组以及工程中应用十分广泛的稀疏矩阵(sparse)。
数据的数值用十进制表示,有日常记数法和科学记数法两种表示方法,角度则采用弧度制表示。例如:132、2.3000e+012、sin(1.57)等。如果没有定义,MATLAB默认的数据类型是双精度型。常用的数据类型如表1-1所示。
表1-1 数据类型一览表
表1-1中的数据例子可以在命令行窗口直接输入。MATLAB的数据类型还有一些其他的表达形式,表中没有列出。在工作区浏览器中,不同的数据类型有着不同的图标标识,在工作区中显示的数据类型如图1-4所示。
在图1-4中,a是字符矩阵,b是有符号8位整型矩阵,c是无符号16位整型矩阵,d是单精度矩阵,e是稀疏矩阵,f是单元数组,g是结构体数组。有些不同类型的数据之间不能够直接运算,还有一些函数对数据的类型有严格的要求,这就需要对数据的类型进行强制转换。例如:uint8(24)就是把默认的双精度数据“24”转化为无符号8位整型数据“24”,对变量也可进行同样的操作。强制数据类型转换必须注意数据的取值范围,避免溢出。
图1-4 在工作区中显示的数据类型
请思考一下:输入b=int8(156),工作区显示b=127,为什么?
1.1.4MATLAB的特点
MATLAB是以矩阵运算为主要工作方式的数理统计、自动控制、数字信号处理及动态系统仿真等方面的重要工具。MATLAB操作简单,功能强大,应用广泛,其特点体现在以下几个方面。
1.高效方便的矩阵和数组运算
MATLAB语言像C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变地照搬到数组间的运算,有些运算符(如算术运算符)只要适当改变形式就可用于数组间的运算。另外,MATLAB不须定义数组的维数,并给出矩阵函数和特殊矩阵专用的库函数,使之在求解信号处理、建模、系统识别、控制及优化等领域的问题时,显得极为简捷、高效,这是其他高级语言所不能比拟的。
2.编程效率高
MATLAB语言中最基本、最重要的成分是函数。同一个函数名,不同数目的输入变量(包括无输入变量)及不同数目的输出变量,代表着不同的含义(有点像面向对象中的多态性)。这不仅使MATLAB的库函数功能更丰富,而且大大减少了所占用的磁盘空间,使得MATLAB编写的M文件简单、短小而实用。用MATLAB编写程序犹如在演算纸上排列出公式和求解问题,因此MATLAB语言也被通俗地称为 “演算纸式” 的语言。
3.方便的绘图功能
MATLAB有一系列绘图函数,所以绘图十分方便。例如建立线性坐标、对数坐标和极坐标,均只需调用不同的绘图函数;图上的标题、坐标轴标注、网格绘制也只需调用相应的函数,简单易行。另外,在调用绘图函数时,调整绘图参数可绘出不同颜色、类型、宽度的点、线、复线或多重线。
4.用户界面友好
MATLAB语言是一种解释执行的语言,灵活,方便,其调试程序的手段丰富,调试速度快,方法简单,使用者在短时间即可学会。MATLAB把编辑、编译、连接、执行和调试融为一体,能在同一窗口上灵活操作,快速查找输入程序中的书写错误和语法错误。例如直接在命令行窗口输入语句,每输完一条MATLAB命令就立即对其进行处理,完成编译、连接和运行的全过程;在运行M文件时,如果有错,则会给出详细的出错信息,但并非一次显示所有的错误,而是每次运行只显示第一条错误,用户可以边修改边执行,直到正确为止。
5.扩充能力强
MATLAB语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而且库函数同用户文件在形式上是一样的,用户文件也可作为MATLAB的库函数来调用。因而,用户可以根据自己的需要方便地建立和扩充库函数,以提高MATLAB的使用效率和扩充功能。另外,可通过建立Mex调用文件格式进行混合编程,能够方便地调用有关FORTRAN或C语言的子程序。
6.开放的源程序
开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的函数文件来构成新的工具箱。