1.3 M文件
1.3
所谓M文件,简单来说就是用户首先把要实现的命令写在一个以.m为扩展名的文件中,然后由MATLAB系统进行解读,最后运行出结果。由此可见,MATLAB具有强大的可开发性和可扩展性。
1.3.1 M文件编辑器
在MATLAB中,M文件有函数和脚本两种格式。两者的相同之处在于它们都是以.m为扩展名的文本文件,不进入命令行窗口,而是由专用编辑器来创建外部文本文件。但是两者在语法和使用上略有区别,下面分别介绍这两种格式。
通常,M文件是文本文件,因此可使用一般的文本编辑器编辑M文件,存储时以文本模式存储,MATLAB内部自带了M文件编辑器与编译器。打开M文件编辑器方法如下:
(1)执行“主页”→“文件”→“新建”→“脚本”命令。
(2)单击“主页”→“文件”→(新建脚本)按钮。
(3)单击“主页”→“文件”→(新建实时脚本)按钮。
打开M文件编辑器后的MATLAB主界面如图1-8所示,此时主界面功能区出现“编辑器”选项卡,中间命令行窗口上方出现“编辑器”窗口。
图1-8 M文件编辑器
编辑器是一个集编辑与调试两种功能于一体的工具环境。在进行代码编辑时,通过它可以用不同的颜色来显示注解、关键词、字符串和一般程序代码,使用非常方便。在书写完M文件后,也可以像一般的程序设计语言一样,对M文件进行调试、运行。
1.3.2 函数
MATLAB中许多常用的函数(如sqrt、inv和abs等)都是函数式M文件。在使用时,MATLAB获取传递给它变量,利用操作系统所给的输入,运算得到要求的结果并返回这些结果。
函数文件类似于一个黑箱,由函数执行的命令及由这些命令创建的中间变量都是隐含的;运算过程中的中间变量都是局部变量(除特别声明外),且被存放在函数本身的工作空间内,不会和MATLAB基本工作空间的变量相互覆盖。
除MATLAB内置函数外,用户还可以自行定义函数,通常用function进行声明,下面通过一个示例进行说明,本书后文会做具体介绍。
【例1-4】函数应用示例。
(1)启动MATLAB后,单击“主页”→“文件”→(新建脚本)按钮,打开M文件编辑器窗口。
(2)在编辑器窗口中输入以下内容(创建名为funa.m的M文件)。
(3)单击“编辑器”→“文件”→(保存)按钮,在弹出的“选择要另存的文件”对话框中保存文件为funa.m。
(4)在命令行窗口中输入以下命令并显示输出结果。
function函数的第一行为函数定义行,以function语句作为引导,定义了函数名称(funa)、输入自变量(var)和输出自变量(f);函数执行完毕返回运行结果。
提示
函数名和文件名必须相同,在调用该函数时,需要指定变量的值,类似于C语言的形式参数。
function为关键词,说明此M文件为函数,第二行为函数主体,规范函数的运算过程,并指出输出自变量的值。
在函数定义行下可以添加注解,以%开头,即函数的在线帮助信息。在MATLAB的命令行窗口中输入“help函数主文件名”,即可看到这些帮助信息。
注意:
在线帮助信息和M函数定义行之间可以有空行,但是在线帮助信息的各行之间不应有空行。
1.3.3 脚本
脚本是一个扩展名为.m的文件,其中包含了MATLAB的各种命令语句。它与批处理文件类似,在MATLAB命令行窗口中直接输入该文件的主文件名,MATLAB即可逐一执行该文件内的所有命令语句,这与在命令行窗口中逐行输入这些命令语句一样。
脚本式M文件运行生成的所有变量都是全局变量,运行脚本后,生成的所有变量都驻留在MATLAB基本工作空间内,只要不使用clear命令清除,且命令窗口不关闭,这些变量将一直保存在工作空间中。基本工作空间随MATLAB的启动而生成,在关闭MATLAB软件时,该基本工作空间会被删除。
【例1-5】脚本应用示例。求三元一次方程组的解。
(1)在编辑器窗口中输入以下内容(创建名为sroot.m的M文件)。
(2)单击“编辑器”→“文件”→(保存)按钮,在弹出的“选择要另存的文件”对话框中保存文件为sroot.m。
(3)在命令行窗口中输入以下命令并显示输出结果。
从上面的求解可知,x=7,y=1,z=-2。上述用到了MATLAB中矩阵的输入方式,本书后文将会介绍。
1.3.4 M文件遵循的规则
下面对M文件必须遵循的规则及两种格式的异同做简要说明。
(1)在M文件中(包括脚本和函数),所有注释行都是帮助文本,当需要帮助时,返回该文本,通常用来说明文件的功能和用法。
(2)函数式M文件的函数名必须与文件名相同。函数式M文件有输入参数和输出参数;脚本式M文件没有输入参数或输出参数。
(3)函数可以有零个或多个输入和输出变量。利用内置函数nargin和nargout可以查看输入和输出变量的个数。在运行时,可以按少于M文件中规定的输入和输出变量的个数进行函数调用,但不能多于这个标称值。
(4)函数式M文件中的所有变量除特殊声明外都是局部变量,而脚本式M文件中的变量都是全局变量。
(5)若在函数文件中发生了对某脚本文件的调用,该脚本文件运行生成的所有变量都存放于该函数工作空间中,而不是存放在基本工作空间中。
(6)从运行上看,与脚本文件不同的是,函数文件在被调用时,MATLAB会专门为它开辟一个临时工作空间,称为函数工作空间,用来存放中间变量,当执行完函数文件的最后一条命令或遇到return时,就结束该函数文件的运行。同时,该函数工作空间及其中所有的中间变量将被清除。函数工作空间相对于基本空间来说是临时的、独立的,在MATLAB运行期间,可以产生任意多个函数工作空间。
提示
变量的名称可以包括字母、数字和下画线,但必须以字母开头,并且在M文件设计中是区分大小写的。变量的长度不能超过系统函数namelengthmax规定的值。