2.2.2 MATLAB Editor

2.2.2 MATLAB Editor

MATLAB Editor是MATLAB的编程环境,相当于其他编程语言的IDE ( Integrated Development Environment,集成编程环境)。启动Editor很简单,单击“File”→“New”→“m File”或直接单击工具条上的“New”(新建)按钮即可。

MATLAB Editor的功能主要有以下两个。

(1)程序输入

编写程序时,在MATLAB Editor中输入程序代码。但MATLAB Editor比纯文本编辑器的功能要多一些,如提供了代码区别显示(如注释行与正式代码颜色不同,字符变量用另外颜色等)、换行时自动缩进、对齐等。这主要是为了让程序看起来更明了。

这些功能虽然简单,但确实很方便。此外,还有两个问题值得一提:

大块代码的注释

有时需要注释多行的代码。C语言提供了/*..*/,可以注释多行,但MATLAB的注释符%只能注释一行。注释多行时,需要一行一行地加%,这样比较麻烦。事实上,Editor中提供了一次注释多行的功能:

用鼠标选中需要注释的内容,单击右键,在出现的菜单中单击“Comment”选项(也可单击“Text”→“Comment”,或者用快捷键Ctrl+R),则可将所选区域全部注释。如果想取消注释,可用同样的方法,即单击“Uncomment”项。

如果要注释的程序段很长,用鼠标选择并不容易,可以采取如下方法:其中,“…”为要注释的所有内容。

对齐

在输入代码时,Editor会按输入内容自动进行缩进,但如改动较大或改动次数较多(如增加一个选择结构或循环结构),缩进格式就不对了。如果需要改动的内容很多,确实很费事。

Editor中的“Smart Ident”可以解决这个问题。选中一个区域后,单击“Text”→“Smart Ident”,可将该部分区域根据其内容自动按缩进格式对齐。

(2)程序调试

编写程序的“高手”都知道,调试程序是编程的重点和精髓。很多时候,甚至可以说几乎所有时候,调试程序花的时间比写代码的时间多。“高手”之所以是“高手”,是因为其不但能写出很好的代码,还能很快地在调试中找到代码的问题所在。很多时候,程序运行过程中的出错信息与实际的错误相去甚远,初学者往往会很“晕”,不知问题所在。这种能力是教不出来的,只有靠长期的编程经验来积累。

程序输入后,由于各种原因,可能有些地方语法不对,需要改正之后程序才能顺利执行。程序调试分两个阶段,或者说两种境界。第一阶段的任务就是改正错误的语法。这一阶段比较简单,因为MATLAB的出错信息会提示错误的语法。只要能看懂出错信息,几乎就会改了。程序调试的第二阶段是修改其中错误的算法。这比第一阶段要难得多,因为需要找到问题所在。程序调试的“功夫”也正在这儿。所以下面主要针对第二阶段来讲解。

1)程序调试的基本理念

程序调试的理念对于任何一门语言都是相同的。这可以说是编程的一门“内功”,是要靠长时间修炼的。但如果读者对一些基本的理念有所了解,在以后的调试过程中会很有帮助。

从头至尾

初学者在调试程序时,当程序结果不正确时,他们经常会很茫然,总是盯着输出结果的那一句话,不知该怎么下手。事实上,你的程序可能从第一句话就错了,很可能输入了错误的数据。

只有当程序从头到尾每一条语句都正确时,最后的结果才会是正确的。所以,如果程序结果不对,请从第一条语句看起。从第一条语句开始检查,仔细地查看每一条语句的运行结果是否正确。当检查改正到最后一个语句时,就会发现此时程序结果正确了。

把自己当机器

首先,要有个概念,即使我们把计算机称为“电脑”,它仍然是一个机器,机器是没有思想的。程序也是没有思想的。如果一个问题的求解过程连自己都不懂,就不可能编写程序解决它(不包括使用别人写的函数)。

经常会有一些初学者在调试程序时抱怨结果不对,但当问他其中的某一句计算结果应该是什么时,他回答不出来。按照上面说的,前面正确了,后面才能正确。如果没有搞清算法的计算过程,中间结果不知道,就无从判断程序输出是否正确,那么又如何调试程序呢?

所以,在调试之前,要确保确实已经弄懂了算法,知道每步计算的正确结果应该是什么。

计算机程序能代替你的只是计算速度,仅此而已。

先小后大

如前所述,要想调试程序,自己要先会算。但要注意,调试时一定要让程序算一个小一点的题目。例如,要计算一个100 × 100大小的矩阵的逆矩阵,可以先算一个2×2矩阵来调试程序。因为,调试程序时,即使你会算矩阵的逆,100 × 100大小的矩阵的逆矩阵一时之间也算不出来。另外,计算小题目时,程序花费的时间更少,在调试时也不用等待太久。

用特例给程序“考试”

调试就是要保证程序的正确性,这相当于是对程序的一次考试。这个考试很重要的一点,是要保证考试程序的“健壮性”。健壮的人可以适应任何气候,而不健壮的人受到风吹日晒就会生病。调试程序时,就是要给程序一些“风吹日晒”,这样能查出一些你注意不到的问题。

举两个例子说明问题:

如果把矩阵的行、列调用写反了,而在调试时又正好用了一个元素完全一样的方阵,那么就发现不了问题了。当真正用的时候,就会出问题。所以,调试时应该不用方阵,而用一个含复杂元素的矩阵。

程序中某个地方需要输入一个整数,但如果输入的是一个小数,程序会有什么反应?会不会死机?在调试时必须注意这些问题,尽量提高程序的“免疫力”。

2)MATLAB程序调试的基本手段和方法

前已提及,所有语言的程序调试道理和方法都一样。程序调试的理念在前面也大概介绍了。程序调试的过程基本是这样的[8]:选一个小的,有代表性的例题;自己先算一遍;让程序一步一步运行,检查每步的结果是否正确,若不正确,则改正程序。

这里涉及重要技术:如何给程序设置断点,即如何让程序一步一步执行。

MATLAB的Editor提供了这方面的功能。图2-6是MATLAB Editor在调试程序时的截屏图,其中标示了一些重要功能。

图2-6 MATLAB Editor调试程序示意

各功能按钮的名称及功能见表2-1。

表2-1 MATLAB程序调试功能简介

MATLAB的Editor还提供了一种更为方便和有用的.m程序调试方法,即Cells。读者可参考“Help”→“Contents”→“MATLAB”→“Desktop Tools and Development Environment” →“Rapid Code Iteration Using Cells”,或者“Help”→“Demos”→“ MATLAB”→“Desktop Tools and Development Environment”→“Rapid Code Iteration Using Cells ”。

【注释】

[1]使用上面几种方法会弹出同一个浏览器,只是展开的位置有差异。

[2]即使是内部函数,MATLAB也单独建立了一个专门的.m文件,只包含函数名和此段注释。

[3]对于其他操作系统下的MATLAB,作者只用过Linux,其界面与Windows下的界面基本相同。

[4]标准的方法是用MATLAB的Editor(其用法将在后面介绍)建立,但.m文件是纯文本文件,用任何一种文本编辑软件,如Notepad,都可以,但文件扩展名一定要为.m。

[5]magic函数的输入参数只有一个。读者可以自己参考“Help ”。

[6]关于工作目录的概念,请看“current directory”中的介绍。

[7]如果MATLAB非正常关闭,则本次使用过的工作目录不会保存。

[8]这种方法限于初学者,“高手”们都有自己的心得。