![MATLAB R2020a智能算法及实例分析](https://wfqqreader-1252317822.image.myqcloud.com/cover/824/38601824/b_38601824.jpg)
1.8 M文件
M文件可分为脚本M文件(简称脚本文件)和函数M文件(简称函数文件)两大类,两者的特点和适用领域均不同。
1.8.1 脚本文件
脚本文件是由MATLAB语句构成的文本文件,以.m为扩展名。运行脚本文件的效果等价于从MATLAB命令窗口中按顺序逐条输入并运行文件中的指令,类似于DOS下的批处理。
脚本文件运行过程产生的变量保留在MATLAB的工作空间中。脚本文件也可以访问MATLAB当前工作空间的变量,其他脚本文件和函数可以共享这些变量。因此,脚本文件常用于主程序的设计。
【例1-20】绘制一个三维螺旋线。
![](https://epubservercos.yuewen.com/89B371/20308228401712906/epubprivate/OEBPS/Images/txt001_87.jpg?sign=1738940949-5u6dOgMQ9xQsn4IZpat07c9fzksF7QTk-0-c420cce84ae34b7524150574f9f7f89a)
在编辑器中输入以上程序,并将文件保存为M1_20,这时M1_20就是一个MATLAB脚本文件。在命令窗口中输入M1_20,运行此脚本,得到如图1-14所示的效果图。
![img](https://epubservercos.yuewen.com/89B371/20308228401712906/epubprivate/OEBPS/Images/txt001_88.jpg?sign=1738940949-KADi8o9k6JfZlz0NlgyNHjgC0s1Sqg0g-0-00c818b0ca139e1f5cb6c6b4bedf2d31)
图1-14 三维螺旋线
注意:M1_20在执行过程中成功地访问了MATLAB工作空间的变量和数据t、st、ct。
1.8.2 函数文件
函数文件是M文件的另一种类型,也是由MATLAB语句构成的文本文件,并以.m为扩展名。MATLAB的函数文件必须以关键字function语句引导,其基本结构为:
![](https://epubservercos.yuewen.com/89B371/20308228401712906/epubprivate/OEBPS/Images/txt001_89.jpg?sign=1738940949-TYgYEC3LXli9qlemKmYSFAKgbRPZmMAj-0-4adb7959e5185438da114e157bc0b2f2)
函数文件具有如下特点。
(1)函数名由用户自定义,其命名规则与变量的命令规则相同。
(2)保存的文件名必须与定义的函数名一致。
(3)读者可通过返回参数及输入参数实现函数参数的传递,但返回参数和输入参数并不是必须的。返回参数如果多于1个,则应该用方括号“[]”将它们括起来;输入参数列表必须用小括号“()”括起来(即使只有一个输入参数)。
(4)注释语句段的每行语句都应该用%引导,%后面的内容不执行。用户可用help命令显示注释语句的内容,用于函数使用前的信息参考。
(5)如果函数较复杂,则正规的参数格式检测是必要的。如果输入参数或返回参数的格式不正确,则应该给出相应的提示。
(6)函数中的输入参数和返回参数的实际个数分别由MATLAB内部保留变量nargin和nargour给出,只要运行了该函数,MATLAB就会自动生成这两个变量。因此,用户在编程时可直接使用这两个自变量。
(7)与一般高级语言不同的是,函数文件末尾处无须使用end命令。
【例1-21】创建一个M1_21函数文件,如果输入参数只有一个x,则返回x;如果输入参数有两个(x、y),则返回sqrt(x^2+y^2)。
![](https://epubservercos.yuewen.com/89B371/20308228401712906/epubprivate/OEBPS/Images/txt001_90.jpg?sign=1738940949-1PLwceIZGYY1KaOF0w127I7l8dUJRuOo-0-a623b60d3ada7149e65fbe8e8f7cbdeb)
保存M1_21函数,然后在命令窗口中调用M1_21函数:
![](https://epubservercos.yuewen.com/89B371/20308228401712906/epubprivate/OEBPS/Images/txt001_91.jpg?sign=1738940949-AH2XbU7xNjPAKaLm3OtR6dPBCSkxIN1V-0-31b65ca40ca7235d7fbb6ba3e1c66266)