2.1 M文件
MATLAB命令有两种执行方式:一种是交互式的命令执行方式,用户在命令行窗口逐条输入命令,MATLAB逐条解释执行,这种方式操作简单、直观,但速度慢,中间过程无法保留;另一种是M文件的程序设计方式,用户将有关命令编成程序存储在一个文件(扩展名为.m)中,MATLAB依次执行该文件中的命令,这种方式可编写调试复杂的程序,是实际应用中主要的执行方式。
2.1.1 M 文件的建立
M文件是由命令或函数构成的文本文件,可以用任何文本编辑程序来建立和编辑,一般常用且最为方便的是使用MATLAB提供的编辑器。M 文件有命令文件(也称主程序文件)和函数文件两种,命令文件可包含多个函数文件。
1.打开编辑器
MATLAB有 “脚本” 和 “实时脚本” 两种文件,分别对应 “编辑器” 和 “实时编辑器”。“实时脚本” 和 “实时函数” 是交互式文档,在 “实时编辑器” 中将MATLAB代码与格式化文本、方程和图像组合到一起,并将其显示在创建的代码右侧,其他功能与 “编辑器” 完全相同。打开MATLAB编辑器有以下3种方法:
(1)单击操作桌面工具栏上的 “新建脚本” 按钮或 “新建”→“脚本” 菜单。
(2)在命令行窗口输入命令 “edit”,按 〈Enter〉 键。
(3)使用快捷键,按 〈Ctrl+N〉 键。
打开的编辑器如图2-1所示。
2.建立新的M 文件
在编辑器的文档窗口输入文件内容,输入完毕后,可以直接运行该文件,也可以先保存文件。单击快捷键 〈Ctrl+S〉 或单击工具栏的 “保存”→“保存”(或 “另存为”)按钮,弹出 “选择另存的文件” 对话框,默认的存盘名称是Untitled。
图2-1MATLAB编辑器
注意:M文件存放位置一般是MATLAB默认的用户工作目录,当然也可以选择其他的存放目录。
【例2-1】 编写一个M命令文件,将变量a,b值互换。
首先打开文本编辑器,输入以下内容:
在文本编辑器窗口菜单栏和工具栏的下面有3个区域,右侧的大区域是程序窗口,用于编写程序;最左面区域显示的是行号,每行都有数字,包括空行,行号是自动出现的,随着命令行的增加而增加;在行号和文本之间有一些小横线,这些横线只有在可执行的行上才有,而空行、注释行、函数定义行等行前面都没有,在进行程序调试时,可以直接在这些横线上单击,能够设置或去掉断点,断点是为了观察程序的运行状况而设置的暂停点。
3.运行M 文件
输入文件内容并检查后,单击 〈F5〉 或工具栏中的 “运行” 按钮,在出现的 “选择要另存的文件” 对话框中,输入文件名myfile.m(以上例为例),单击 “保存” 按钮。如果改变存盘目录,会弹出 “Matlab 编辑器” 对话框,单击 “更改文件夹” 按钮即可。在命令行窗口中,可看到输出:
前两个是a、b的原值,后两个是交换后的a、b值。
注意:当再次运行保存过的文件时,不会出现 “选择另存的文件” 对话框,而直接存盘运行。
请思考:不使用变量c,只通过两个矩阵的加、减运算,能否交换数据?
4.打开已有的M 文件
打开已有的M文件,也有以下3种方法。
1)命令按钮操作:单击工具栏的 “打开” 按钮,从中选择要打开的文件。
2)命令操作:在命令行窗口输入命令 edit<文件名>,回车后则打开指定的 M 文件。如果文件不在当前路径下,还需在文件名前加上路径。例如打开上例的文件,可在命令行窗口的>>提示符后输入edit myfile.m;
3)快捷键操作:按 〈Ctrl+O〉 组合键,在打开的 “Open” 对话框中选择要打开的文件。
2.1.2 M 文件的调试
在文件设计过程中,或多或少都会出现一些错误,一般可以归纳为语法错误和算法错误两种:语法错误通常是在程序输入时产生的,如函数名拼写错误、括号不匹配等问题。由于这些错误的存在,文件程序不能完成全部运行过程,会在发生错误处停止运行,并在命令行窗口显示错误提示信息,因此这些错误在运行的过程中就能够发现,可以直接调试修改;算法错误是由于解题思路不正确或对问题的理解不准确而引起的,通常在运行时不会有错误提示信息,只有发现计算结果有较大的偏差、不符合设计要求、产生了意想不到的结果等情况时,才能根据结果的差异进行分析和判断,这可能是一个比较复杂的过程,通常需要利用文本编辑器调试。
1.直接调试法
1)如果在错误信息中指出了出错的行号,可先根据错误信息检查该语句是否存在语法错误或运行中变量尺寸不一致等情况。
2)检查所调用函数或命令的拼写是否正确,括号(包括方括号和圆括号)是否配对,各种流程控制语句是否匹配(如for与end、while与end、switch与end等)。
3)检查所调用的函数或载入的数据文件是否在当前目录或搜索路径上。
4)将重点怀疑的命令行后的分号删除,使得计算结果能够实时地显示在屏幕上,作为查错的依据,根据显示的结果判断问题的所在。
5)如果怀疑某个函数文件有问题,可以在该函数文件的函数定义行前加 “%”,使其函数体成为命令文件(因为命令文件中的变量存储在工作空间中,可以在工作空间窗口和数组编辑器观察修改),调好后再改回函数文件。
2.文本编辑器的调试功能
1)设置断点。设置断点是高级语言中程序调试的重要手段之一,断点是在程序特定位置设置的中断点,当程序运行至断点处时会暂停运行,此时可通过检查相关变量的内容等方法确定程序的运行是否正确。根据需要,可以在程序中设置一个或多个断点,设置断点后,可以控制程序按程序行逐行向后继续运行,也可以控制程序继续运行到指定的程序行。在行号和文本编辑区之间的小横线上单击鼠标就可以设置或去掉断点,设置的断点显示为红色圆点,如图2-2所示。
图2-2 设置的断点
2)程序调试。设置断点后运行程序,就会停止在第一个断点处,这时可以观察断点前的程序运行结果,检查工作空间中的变量数值。工具栏中的按钮功能如下。
① 步进:单步执行。每单击一次,程序运行一次,但不进入函数。
② 步入:单步运行。遇到函数时进入函数内,仍单步运行。
③ 步出:停止单步运行。如果是在函数中,跳出函数;如果不在函数中,直接运行到下一个断点处。
④ 运行到光标处:从当前位置运行到光标所在的位置。
⑤ 继续:继续运行。
⑥ 退出调试:退出本次调试,但保留断点。
3)调试结束。在断点上单击,取消断点或单击 “断点”→“取消断点” 按钮。