MATLAB计算机视觉经典应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.8 M文件

MATLAB提供了M文件。M文件有两类:脚本文件和函数文件,这两类文件都以.m为扩展名。脚本M文件可以理解为较为简单的M文件,因为它没有输入/输出变量。函数M文件相对脚本M文件稍显复杂,从表面上来看,函数M文件只是在同功能的脚本M文件的基础上,在文件代码的开始处多添加了一行函数声明而已。

用户可以自己定义M函数文件然后调用它。这样,只需传递给它相应的参数,即可将结果输出给用户。用户只看到输入的参数和输出的计算结果,即一个函数就是一个黑箱。这些特性使得函数在解决某些问题的较大型程序中占据着很重要的位置,因而,MATLAB提供了一个结构,用来以文本M函数文件的形式创建用户自己的函数。

M函数文件是一个以.m为后缀的文本文件,函数需要给定一些输入参数,并能够对输入变量进行若干操作而实现特定的功能,然后将所需结果输出。M函数文件必须满足一些标准。

(1)在存储M函数文件时,文件名必须与文件内主函数名一致,这是因为,在调用M函数文件时,系统查询的是相应的文件名而不是函数名,如果两者不一致,则打不开目的文件或打开的是其他文件。因此,在存储M函数文件时,应将文件名与主函数名统一,以便理解与使用。

(2)M函数文件名最多可以有31个字符,这是由操作系统决定的,有些系统可能允许的最大字符数还要少。MATLAB会忽略第31个(或操作系统限制的)字符以外的字符。

(3)函数名必须以一个字母开头,第一个字母之后可以是任意的字母、数字、下画线,这个命名规则与变量的命名规则相同。

(4)函数语句的第一行是函数声明行,且必须包含function这个词,在该行要声明函数名、输入变量列表及输出变量列表等。

(5)在函数声明行之后,第一个连续的注释行是该函数的帮助主题,也称H1行,当使用lookfor命令时,可以查看该行信息。H1行通常包含的是大写的函数名,以及这个函数功能的一个简要描述。

(6)H1行之后至第一个可执行或空行之间的所有注释语句均为帮助信息,这部分给出了函数的完整帮助信息。当通过MATLAB帮助系统查看函数的帮助信息时,看到的是这部分内容。

(7)一个连续的注释行之后的所有语句构成了函数体,它是实现编程目的的核心所在,可以包括任何可执行的MATLAB语句。

(8)一个M函数文件在函数的任何地方遇到return或这个函数的最后一行被执行完时终止。

(9)在函数体中,对语句的解释和说明文本即注释部分,注释语句是以%开头的。

(10)在M函数文件中,只有H1行是一个M函数文件所必需的,其他内容都是可以省略的,当然,如果没有函数体,则该函数为一空函数,不能产生任何作用。

【例1-8】汉诺塔(又称河内塔)问题是印度的一个古老传说:神勃拉玛在一个庙里留下了3根金刚石棒,第一根上面套着64个圆的金片,最大的一个在底下,其余的一个比一个小,依次叠上去,庙里的众僧把它们一个个地从这根棒上搬到另一根棒上,规定可利用中间的一根棒作为辅助,但每次只能搬一个,而且大的不能放在小的上面。

根据需要,建立一个带移动箭头的M函数文件move.m,代码为:

建立一个实现汉诺塔问题的M函数文件hannuo.m,代码为:

保存M函数文件,并在命令行窗口中输入以下代码:

运行程序,输出如下: