MATLAB是Matrix Laboratory的缩写,是目前最优秀的科技应用软件之一,它将计算、可视化和编程等功能同时集于一个易于开发的环境.MATLAB是一个交互式开发系统,其基本数据要素是矩阵.它的表达式与数学、工程计算中常用的表达式形式十分相似,符合专业科技人员的思维方式和书写习惯;它用解释方式工作,编写程序和运行同步,输入程序立即得到结果,因此人机交互更加简洁和智能化;它适用于多种平台,随着计算机软、硬件的更新而及时升级,使得编程和调试效率大大提高.
MATLAB主要应用于数学计算、系统建模与仿真、数学分析与可视化、科学工程绘图和用户界面设计等.它已经成为高等数学、线性代数、自动控制理论、数理统计、数字信号处理等课程的基本工具,各国高校也纷纷将MATLAB正式列入本科生和研究生课程的教学计划中,使其成为学生必须掌握的基本软件之一.在设计和研究部门,MATLAB也被广泛用来研究和解决各种工程问题.本书将以MATLAB R2023平台为基础进行介绍.
MATLAB也是一种计算机语言,其开发环境是一套方便用户使用MATLAB函数和文件的工具集,其中包括许多图形化用户接口工具,方便用户输入输出数据、管理变量,以及编写和运行M文件.
MATLAB软件启动后的运行界面称为MATLAB工作界面(MATLAB Desktop),它高度集成,主要由标签栏、菜单栏、工具栏和各种不同用途的窗口组成.MATLAB R2023默认的工作界面如图1-1所示.
MATLAB系统由MATLAB开发环境、MATLAB语言、MATLAB数学函数库、MATLAB图形处理和MATLAB应用程序接口(API)5大部分组成.
1)MATLAB开发环境是一个集成的工作环境,包括MATLAB命令行窗口、文件编辑调试器、工作空间、数组编辑器和在线帮助文档等.
2)MATLAB语言具有程序流程控制、函数、数据结构、输入输出和面向对象的编程特点,是基于矩阵/数组的语言.
3)MATLAB的数学函数库包含了大量的计算算法,包括基本函数、矩阵运算和复杂算法等.
图1-1 MATLAB R2023默认的工作界面
4)MATLAB图形处理系统能够将二维和三维数组的数据用图形表示出来,并可以实现图像处理、动画显示和表达式作图等功能.
5)MATLAB应用程序接口使MATLAB语言能与其他编程语言进行交互.
MATLAB的工具箱(Toolbox)是一个专业家族产品,工具箱实际上是MATLAB的M文件和高级MATLAB语言的集合,用于解决某一方面的专门问题或实现某一类的新算法.MATLAB的工具箱可以任意增减,给不同领域的用户提供了丰富而强大的功能.每个人都可以生成自己的工具箱,因此很多研究成果被直接做成MATLAB工具箱发布,而且很多免费的MATLAB工具箱可以直接从网上获得.
MATLAB常用工具箱如表1-1所示.
表1-1 MATLAB常用工具箱
(续)
1.菜单
MATLAB的主页菜单包括“文件”“变量”“代码”“SIMULINK”“环境”和“资源”.
1)“文件”菜单包括“新建脚本”“新建实时脚本”“新建”“打开”“查找文件”“比较”等选项.
●“新建脚本”:建立新脚本文件.
●“新建实时脚本”:在实时编辑器中创建实时脚本.
●“新建”:可以建立新脚本文件、函数、示例、类、绘图、图形用户界面(GUI)、命令快捷方式、Simulink模型、状态流程图和Simulink项目.
●“打开”:打开需要的文件.
●“查找文件”:查找各类文件.
●“比较”:对比文件内容.
2)“变量”菜单包括“导入数据”“清洗数据”“变量”“保存工作区”“清空工作区”等选项.
●“导入数据”:从其他文件导入数据到工作区中.
●“清洗数据”:对数据进行清洗处理.
●“变量”:向工作区添加新的变量或打开工作区的变量.
●“保存工作区”:保存工作区中的变量.
●“清空工作区”:删除工作区中的变量.
3)“代码”菜单包括“收藏夹”“分析代码”“运行并计时”和“清除命令”等选项.
●“收藏夹”:存放收藏的命令.
●“分析代码”:分析M文件代码.
●“运行并计时”:估计代码运行效率.
●“清除命令”:删除命令.
4)“SIMULINK”菜单包括打开Simulink Start Page窗口.
5)“环境”菜单包括“布局”“预设项”“设置路径”和“附加功能”等选项.
●“布局”:设置窗口布置.
●“预设项”:设置命令行窗口的属性,单击该选项会弹出如图1-2所示的属性设置窗口.
图1-2 “预设项”属性设置窗口
●“设置路径”:设置工作路径.
●“附加功能”:获取和管理附加功能等选项.
6)“资源”菜单包括“帮助”“社区”“请求支持”和“了解MATLAB”等选项.
●“帮助”:打开帮助相关内容.
●“社区”:打开MathWorks公司MATLAB讨论社区.
●“请求支持”:向客服发送帮助请求.
●“了解MATLAB”:进入MathWorks官网,按照自己的进度学习MATLAB和Simulink.
2.工具栏
工具栏是在编程环境下提供的对常用命令的快速访问,MATLAB R2023的默认工具栏如图1-3所示,当鼠标停留在工具栏按钮上时,就会显示出该工具按钮的功能.
图1-3 工具栏
在图1-3中,从左至右,按钮控件的功能依次为:
●保存、剪切、复制、粘贴当前文件。
●撤回、恢复上一次操作。
●切换窗口。
●打开MATLAB帮助系统。
●搜索文档。
MATLAB有许多使用方法,但首先需要掌握的是MATLAB的命令行窗口(Command Window)的基本表现形式和操作方式.可以把命令行窗口看成“草稿本”或“计算器”.在命令行窗口输入MATLAB的命令和数据后按回车键,立即执行运算并显示结果,单独显示的命令行窗口如图1-4所示.
图1-4 命令行窗口
对于简单的问题或一次性问题,在命令行窗口中直接输入命令进行求解很方便,若对复杂问题仍采用这种方法(输入一行,执行一行),就显得烦琐笨拙.这时可在编辑/调试器中编写M文件(后面章节将详细介绍),即将语句一次全部写入文件,并将该文件保存到MATLAB搜索路径的目录上,然后在命令行窗口中用文件名调用.
1.命令行的语句格式
MATLAB在命令行窗口中的语句格式为:
例1-1 在命令行窗口输入命令,并查看结果.
解 MATLAB命令为:
运行结果为:
说明 命令行窗口中的每个命令行前会出现提示符“>>”,没有“>>”符号的行则是显示结果.
程序分析:
●命令行窗口内不同的命令采用不同的颜色显示,默认输入的命令、表达式以及计算结果等采用黑色字,字符串采用赭红色字,关键字采用蓝色字,注释采用绿色字,如例1-1中的变量a是数值,b是字符串,c为逻辑True,命令行中的“if”“else”“end”为关键字,“%”后面的是注释.
●如果在命令行窗口中输入命令或函数的开头一个或几个字母,按“Tab”键则会出现以该字母开头的所有命令函数列表,例如,输入“end”命令的开头字母“e”,然后按“Tab”键,显示的命令函数列表如图1-5所示.
●若命令行后面的分号(;)省略,则显示运行结果;否则,不显示运行结果.
●MATLAB变量是区分字母大小写的,例如,myvar和MyVar表示的是两个不同的变量.变量名最多可包含63个字符(字母、数字和下划线),而且第一个字符必须是英文字母.
图1-5 命令函数列表
●MATLAB支持输入字母、汉字,但是标点符号必须在英文状态下输入.
2.在命令行窗口中编辑命令行
在MATLAB命令行窗口中不仅可以对输入的命令进行编辑和运行,还可以使用编辑键和组合键对已输入的命令进行回调、编辑和重运行。使用命令行窗口进行编辑的常用操作键如表1-2所示.
表1-2 常用操作键
3.数值计算结果的显示格式
在命令行窗口中,默认情况下当数值为整数时,数值计算结果以整数显示;当数值为实数时,以小数后4位的精度近似显示,即以“short”数值的格式显示,如果数值的有效数字超出了这一范围,则以科学计数法显示结果.需要注意的是,数值的显示精度并不代表数值的存储精度.
例1-2 在命令行窗口输入数值,查看不同的显示格式,并分析各个格式之间有什么相同与不同之处.
解 MATLAB命令为:
运行结果为:
用户可以根据需要,对数值计算结果的显示格式和字体风格、大小、颜色等进行设置.方法如下:
●在MATLAB的操作界面选择菜单“文件”→“参数选择”,则会出现参数设置对话框,在对话框的左栏选中“命令行窗口”项,在右边的“数值格式”栏设置数据的显示格式.
●直接在命令行窗口使用format命令来进行数值显示格式的设置.format命令的语法格式如下:
format的数据显示格式如表1-3所示.
表1-3 format的数据显示格式
4.命令历史记录
默认布局下,命令历史记录不存在,需要在布局中选择命令历史窗口,用来记录并显示运行过的命令、函数和表达式.在默认设置下,该窗口会显示自安装以来所有使用过的命令的历史记录,并标明每次开启MATLAB的时间.在命令历史窗口选中某个命令并单击鼠标右键可以显示该命令的一些常用操作命令.
●Copy:复制.
●Evaluate Selection:执行所选命令行并将结果显示在命令行窗口中.
●Create M-file:创建并生成M文件.
●Delete Selection:删除所选命令行.
●Delete to Selection:从当前行删除到所选命令行.
●Delete Entire History:清除全部历史命令.
5.命令行窗口常用命令
●who:将内存中的当前变量以简单的形式列出.
●whos:列出当前内存变量的名称、大小、类型等信息.
●clear:变量名1变量名2…:删除内存中的变量.
●clf:清除图像窗口.
●help:列出所有最基础的帮助主题.
1.当前文件夹简介
当前文件夹窗口默认出现在MATLAB界面左上侧的后台,如图1-1所示.工作目录窗口可显示或改变当前文件夹,还可以显示当前文件夹下的文件,并提供文件搜索功能.
在使用MATLAB的过程中,为方便管理,用户应当建立自己的工作目录,即“用户目录”,用来保存自己创建的相关文件.将用户目录设置成当前目录的方法有如下两种:
1)直接在交互界面设置.在当前目录浏览器左上方,有一个当前目录设置区,用户可在“目录设置栏”中直接填写待设置的目录名,或借助“选择新文件夹”和鼠标选择待设置的目录.
2)指令设置法.通过path指令设置当前目录是各种MATLAB版本都适用的基本方法.这种指令设置法比交互界面设置法适用范围更大,它不仅能在指令窗口执行,而且可以用在M文件中.
注意 通过以上方法设置的目录,只有在当前开启的MATLAB环境中有效.一旦MATLAB重新启动,以上设置操作就必须重新进行.
2.设置MATLAB搜索路径
MATLAB中无论是文件还是函数和数据,运行时都是按照一定的顺序在搜索路径中搜索并执行的,如果要执行的内容没有在搜索路径中,就会提示错误.
(1)MATLAB的基本搜索过程
当用户在命令行窗口输入一个命令行(如sin(x))时,MATLAB按照如下顺序进行搜索:
首先在MATLAB内存中进行检查,看“sin”和“x”是否为工作空间的变量或特殊变量;
然后在当前路径上,检查是否为MATLAB的内部函数(Built-in Function);
最后在MATLAB搜索路径的所有其他目录中,依次检查是否有相应的“.m”或“.mex”文件存在.
不在搜索路径上的内容不可能被搜索.实际搜索过程远比上面描述的基本过程复杂.
(2)MATLAB搜索路径的扩展和修改
假如用户有多个目录需要同时与MATLAB交换信息,或经常需要与MATLAB交换信息,那么应该把这些目录放在MATLAB的搜索路径上,使这些目录上的文件或数据能被调用。假如某个目录需要用来存放运行中产生的文件和数据,还应该把这个目录设为当前目录.
1)利用设置路径对话框修改搜索路径.引出搜索路径对话框的常用方法如下:在命令行窗口中输入pathtool.还可以选择MATLAB主界面“主页”标签“环境”菜单下的“设置路径”选项,弹出“设置路径”窗口,如图1-6所示.该窗口分为左右两部分:左侧的几个按钮用来添加目录到搜索路径,还可以从当前的搜索路径中移除选择的目录;右侧的列表框列出了已经被MATLAB添加到搜索路径的目录.
2)利用path指令设置路径.利用path指令设置路径的方法对任何版本的MATLAB都适用.
●path(path,’c:\my_path’) 把c:\my_path设置在搜索路径的尾端.
●path(’c:\my_path’,path) 把c:\my_path设置在搜索路径的首端.
图1-6 搜索路径设置
工作空间浏览器(Workspace Browser)窗口默认出现在MATLAB界面的右侧,以列表的形式显示MATLAB工作区中当前所有变量的名称及属性,包括变量的类型、长度及其占用的空间大小.
默认情况下,数组编辑器(Array Editor)不随MATLAB操作界面的出现而启动,启动数组编辑器的方法有:
●在工作空间浏览器窗口中双击变量.
●在工作空间浏览器窗口中选择变量,按鼠标右键在快捷菜单中选择“打开所选内容”菜单,或单击工具栏的打开变量按钮.
对于比较简单的问题和“一次性”问题,通过命令行窗口直接输入一组命令来求解比较简便、快捷,但是当待解决的问题所需的命令较多且命令比较复杂时,或当一组命令通过改变少量参数就可以反复被使用去解决不同的问题时,就需要利用M脚本文件来解决.
MATLAB通过自带的M文件编辑器/调试器来创建和编辑M文件.M文件(带.m扩展名的文件)类似于其他高级语言的源程序.M文件编辑器可以用来对M文件进行编辑和调试,也可以阅读和编辑其他ASCII码文件.M文件编辑器/调试器窗口由菜单栏、工具栏和文本编辑区等组成,是标准的Windows风格,如图1-7所示.
MATLAB R2023常用的文件有.m、.mat、.fig、.mdl、.mex、.p等类型.在MATLAB R2023工作界面的“新建”菜单中,可以创建M-File、Figure、Model等文件类型.下面介绍常见的几种文件类型.
图1-7 M文件编辑器/调试器窗口
1.程序文件
程序文件即M文件,包括主程序和函数文件,MATLAB的各工具箱中的大部分函数都是M文件.
M文件是ASCII文件,也可以在其他文本编辑器中显示和输入.
2.图形文件
图形文件的扩展名为.fig,创建.fig文件有如下几种方法:
●在“文件”菜单中创建Figure文件.
●在“文件”菜单中创建GUI时生成.fig文件.
●用MATLAB的绘图命令生成.fig文件.
3.模型文件
模型文件扩展名为.mdl,可以在“文件”菜单中创建模型时生成.mdl文件,也可以在Simulink环境中建模生成.
4.数据文件
数据文件即MAT文件,其文件的扩展名为.mat,用来保存工作空间的数据变量.在命令行窗口中可以通过命令将工作空间的变量保存到数据文件中或从数据文件中装载变量到工作空间.
1)把工作空间中的数据存入MAT文件:
说明 文件名为MAT文件的名字,变量1、变量2可以省略,省略时则保存工作空间中的所有变量;参数表示保存的方式,其中’-ascii’表示保存为8位ASCII文本文件、’-append’表示在文件末尾添加变量,’-mat’表示二进制.mat文件等.
2)从数据文件中装载变量到工作空间:
说明 变量1、变量2可以省略,省略时则装载所有变量;如果文件名不存在,则报错.
5.可执行文件
可执行文件即MEX文件,其文件的扩展名为.mex,由MATLAB的编辑器对M文件进行编译后产生,其运行速度比直接执行M文件快得多.
6.项目文件
项目文件的扩展名为.prj,项目文件能脱离MATLAB环境运行,在“部署工具”窗口中编译生成,同时还会生成“distrib”和“src”两个文件夹.
在编写M文件时将启动M文件编辑器/调试器窗口,进入MATLAB文件编辑器的方法如下:
●单击MATLAB桌面上的新建脚本,打开空白M文件编辑器.
●单击MATLAB桌面上的 图标,填写所选文件名后,单击“打开”按钮,即可展示相应的M文件编辑器.
●用鼠标左键双击当前目录窗口中所需的M文件,可直接打开相应的M文件编辑器.
M文件包括M命令文件(又称脚本文件)和M函数文件.这两种文件的结构有所不同,其一般结构包括函数声明行、H1行、帮助文本和程序代码4部分.
1)函数声明行.函数声明行是在M函数文件的第一行,只有M函数文件必须有,以“function”开头并指定函数名、输入输出参数;M命令文件没有函数声明行.
2)H1行.H1行是帮助文字的第一行,一般为函数的功能信息,可以提供给help和lookfor命令查询使用,给出M文件最关键的帮助信息,通常要包含大写的函数文件名.在MATLAB的“当前文件夹”窗口中的“描述”栏就显示了每个M文件的H1行.
3)帮助文本.帮助文本提供了对M文件更加详细的说明信息,通常包含函数的功能、输入输出参数的含义、格式说明和作者、日期和版本记录等信息,方便管理和查找M文件.
4)程序代码.程序代码由MATLAB语句和注释语句构成,可以是简单的几个语句,也可以是通过流程控制结构组织而成的复杂程序,注释语句提供对程序功能的说明,可以处于程序代码中的任意位置.
M命令文件和M函数文件
就文件结构而言,M命令文件和M函数文件的区别是M命令文件没有函数声明行.
(1)M命令文件
M命令文件比较简单,命令格式和前后位置与命令行窗口中的命令行都相同。M命令文件中除了没有函数声明行之外,H1行和帮助文字也经常省略.
说明
1)MATLAB在运行命令文件时,只是简单地按顺序从文件中读取一条条命令,送到MATLAB命令行窗口中去执行.
2)M命令文件运行产生的变量都驻留在MATLAB的工作空间中,可以很方便地查看变量,在命令行窗口中运行的命令都可以使用这些变量.
3)M命令文件的命令可以访问工作空间的所有数据,因此要注意避免工作空间和命令文件中的同名变量相互覆盖.一般在M命令文件的开头使用“clear”命令清除工作空间的变量.
例1-3 编写程序画出衰减振荡曲线 及其包络线 的取值范围是[04π].
解 MATLAB命令为:
运行结果如图1-8所示.
图1-8 例1-3的运行结果图
程序分析:
将M文件保存在用户自己的工作目录下,命名为“exp_1”,先将工作目录添加到搜索路径中,或将MATLAB的“Current Directory”设置为工作目录.
运行程序的方法:
●在命令行窗口输入命令文件的文件名“exp_1”.
●在MATLAB编辑器菜单中点击“运行”按钮,或直接按快捷键F5,如图1-9所示.
图1-9 编辑器菜单
(2)M函数文件
M函数文件稍微复杂一些,可以有一个或多个函数,每个函数以函数声明行开头.使用M函数文件可以将大的任务分成多个小的子任务,每个函数实现一个独立的子任务,通过函数间的相互调用完成复杂的功能,具有程序代码模块化、易于维护和修改的优点.
说明
1)M函数文件中的函数声明行是必不可少的.
2)M函数文件在运行过程中产生的变量都存放在函数本身的工作空间中,函数的工作空间是独立的、临时的,随函数文件调用而产生并随调用结束而删除。在MATLAB运行过程中,如果运行多个函数,则产生多个临时函数空间.
3)当文件执行完最后一条命令或遇到“return”命令时结束函数的运行,同时函数空间的变量被清除.
4)一个M函数文件至少要定义一个函数.
函数声明行的格式如下:
说明
●函数名是函数的名称,保存时最好使函数名与文件名保持一致,当不一致时,MATLAB以文件名为准.
●输入参数列表是函数接受的输入参数,多个参数之间用“,”隔开.
●输出参数列表是函数运算的结果,多个参数之间用“,”隔开.
例1-4 编写一个函数,求方程 ax 2 + bx + c =0的解.
解 MATLAB命令为:
调用函数文件计算jie(1,2,1)、jie(1,2,2)、jie(2,6,1).
运行结果为: