MATLAB输入命令的常用方式有两种:一种是直接在MATLAB的命令行窗口中逐条输入命令;另一种是采用包含命令集合的M文件。当命令行很简单时,使用逐条输入方式还是比较方便的;当命令行很多时,建议采用M文件工作方式。
M文件工作方式指的是将要执行的命令全部编写在一个文本文件中,这样既能使程序的执行显得简洁明了,又便于对程序进行修改与维护。M文件直接采用MATLAB命令编写,就像在MATLAB的命令行窗口中直接输入命令一样,调试起来也十分方便,并且增强了程序的交互性。
M文件与其他文本文件一样,可以在任何文本编辑器中编辑、存储、修改和读取。
利用M文件还可以根据自己的需要编写一些函数,这些函数也可以像调用MATLAB提供的函数一样进行调用。从某种意义上说,这也是对MATLAB的二次开发。
M文件有两种形式:一种是命令方式(或称脚本方式);另一种是函数文件形式。这两种形式的文件的扩展名均是.m。
当输入的命令较多或要重复输入命令时,使用命令文件就方便多了。将所有要执行的命令按顺序放到一个扩展名为.m的文本文件(即M文件)中,每次运行时只需在MATLAB的命令行窗口中输入M文件的文件名即可。下面介绍一下MATLAB中M文件的命名规则:
1)文件名的命名要使用英文字母、数字或部分半角字符,且第一个字符不能是数字。
2)文件名不要与MATLAB的内置函数同名,M文件的命名尽量不要采用简单的英文单词,最好由英文大小写字母、数字、下划线等组成。这是因为用简单的单词命名容易与MATLAB内置函数重名或冲突,从而导致出现一些莫名其妙的错误。
3)文件的存储路径一定要用英文。
4)M文件的命名不能用两个分开的单词,如three phase,而应该写成three_phase或者ThreePhase。
需要注意的是,M文件最好直接放在MATLAB的默认搜索路径下(一般是在MATLAB安装目录的子目录work中),这样就不用设置M文件的路径了,否则应当用路径操作指令path重新设置路径。另外,M文件也不应该与MATLAB工具箱中的函数重名,以免执行命令时出错。
MATLAB执行M文件等价于在命令行窗口中按序执行M文件中的所有指令。M文件可以访问MATLAB工作区内的任何变量及数据。
M文件执行过程中产生的所有变量等价于在MATLAB工作区中创建这些变量。因此,任何其他的M文件和函数都可以自由地访问这些变量。这些变量一旦产生就一直保存在内存中,只有对它们重新赋值,它们的原有值才会改变。关机后,这些变量也就全部消失了。
另外,在命令行窗口中运行clear命令,也可以把这些变量从工作区中删去。当然,在MATLAB的工作区窗口中也可以通过鼠标删除不再使用的变量。
接下来,编写一个名为test.m的命令文件,用来计算1到100的和,并把它放到变量s中。
1)在MATLAB中单击“主页”选项卡→“文件”面板→“新建脚本”按钮,会出现编辑器,如图2-2所示。
图2-2 创建新的M文件
2)在编辑器中输入相应的代码,如图2-3所示。
图2-3 在编辑器中输入代码
3)单击“编辑器”选项卡→“文件”面板→“保存”按钮,会弹出一个保存文件的对话框,将文件名中的Untitled.m改成test,再单击“保存”按钮。
4)回到MATLAB的主界面,在命令行窗口中输入test命令,执行结果如下所示:
>>test s = 0 s = 1 s = 3 s = 6 s = 10 s = 15 s = 21 s = 28 s = 36 s = 45 s = 55
M函数是一个特殊的M文件,其常见格式如下:
function:表示返问变量列表=函数名(输入变量列表)
需要说明的是,这里输入变量的个数以及输出变量的个数分别是由MATLAB本身提供的两个保留变量nargin和nargout给出的,它们分别是nuMber of function input arguments和nuMber of function output arguments的缩写形式。
输入变量要用逗号隔开,输出变量多于1个时,要用方括号括起来。用户可以借助help命令显示注释说明。通过这样的方法就可以创建函数文件(或者称M函数),其调用方法与以往的MATLAB函数的调用方法相同。
函数文件相当于对MATLAB进行了二次开发,其作用与其他高级程序设计语言中子函数的作用基本相同,都是为了实现特定目的而由用户自己编写的子函数。
函数文件与命令文件有着鲜明的区别,包括:
1)函数文件的第一行必须包含function字符,而命令文件无此要求。
2)函数文件的第一行必须指定函数名、输入参数及输出参数,而命令文件无此要求。
3)一个函数文件可以含0个、1个或多个输入参数和返回值(即输出参数)。
4)函数文件要在文件的开头定义函数名,如function [y1,y2]=func(x,a,b,c),则该函数文件必须命名为func.M,而命令文件无此要求。
5)命令文件的变量在文件执行结束以后仍然保存在内存中而不会丢失,而函数文件的变量仅在函数运行期间有效(除非用global关键字把变量声明为全局变量,否则函数文件中的变量均为局部变量),当函数运行完毕后,这些局部变量也就消失了。
需要说明的是,调用函数时所用的输入和输出变量名并不要求与编写函数文件时所用的输入和输出变量名相同。
【例2-25】函数文件的创建以及函数的调用。
1)和M文件一样,在MATLAB中单击“主页”选项卡→“文件”面板→“新建脚本”按钮,弹出编辑器。
2)在编辑器中输入如下代码:
function y=func(x) if abs(x)<1 y=sqrt(1-x^2); else y=x^2-1; end
此段代码对应于分段函数 ,如图2-4所示。
图2-4 输入代码
3)单击“编辑器”选项卡→“文件”面板→“保存”按钮,会弹出一个保存文件的对话框。注意,不要修改文件名,直接单击“保存”按钮即可。
4)在MATLAB的命令行窗口中输入如下命令:
fplot(@(x)func(x),[-3,2])
运行结果如图2-5所示。
图2-5 函数的图形