MATLAB 2020中文版从入门到精通
上QQ阅读APP看书,第一时间看更新

1.4 M文件

MATLAB作为一种高级计算机语言,以一种人机交互式的命令行方式工作,还可以像其他计算机高级语言一样进行控制流的程序设计。M文件是使用MATLAB编写的程序代码文件。之所以称为M文件,是因为这种文件都以“.m”作为文件扩展名。用户可以通过任何文本编辑器或字处理器来生成或编辑M文件,但是在MATLAB提供的M文件编辑器中生成或编辑M文件是最为简单、方便而且高效的。M文件可以分为两种类型:一种是函数式文件;另一种是命令式文件,也有人称之为脚本文件,因为它由英文Script翻译而来。

选择工具栏命令“新建”→“脚本”或直接单击工具栏上的按钮就可打开MATLAB文件编辑器MATLAB Editor,用户即可在空白窗口中编写程序。

例1-1:生成矩阵。

解:输入下面的简单程序mm.m。

    function f=mm
    %This file is devoted to demonstrate the use of "for"
    %and to create a simple matrix
    for i=1:4
        for j=1:4
            a(i,j)=1/(i+j-1);
        end
    end
    a

单击文件编辑器工具栏中的按钮,在弹出的Windows标准风格的“保存为”对话框中,单击“保存”按钮,就完成了文件保存。

使mm.m所在目录成为当前目录,或让该目录处在MATLAB的搜索路径上。

然后在MATLAB命令行窗口中运行以下程序,便可得到结果。

    >> mm
    a =
        1.0000   0.5000   0.3333   0.2500
        0.5000   0.3333   0.2500   0.2000
        0.3333   0.2500   0.2000   0.1667
        0.2500   0.2000   0.1667   0.1429

1.4.1 命令式文件

在MATLAB中,实现某项功能的一串MATLAB语句命令与函数组合成的文件称为命令式文件。这种M文件在MATLAB的工作区内对数据进行操作,能在MATLAB环境下直接执行。命令式文件不仅能够对工作区内已存在的变量进行操作,且能将建立的变量及其执行后的结果保存在MATLAB工作区里,供在以后的计算中使用。除此之外,命令式文件执行后的结果既可以显示输出,也能够使用MATLAB的绘图函数来产生图形输出结果。

由于命令式文件的运行相当于在命令行窗口中逐行输入并运行,所以用户在编制此类文件时,只需要把要执行的命令按行编辑到指定的文件中,且变量不需预先定义,也不存在文件名的对应问题。

例1-2:M文件的建立与执行1。

解:在MATLAB命令行窗口中输入“edit”调出M文件编辑器;然后,在文件编辑器中输入以下内容。

    %这是一个演示文件;
    %This is a demonstration file.
    x=pi

其中,%后的内容为注释内容,在函数执行时不起作用,用help命令可见。

将该M文件以文件名“dm1.m”保存在“X:\Program Files\Polyspace\R2020a\bin\yuanwenjian\1”文件夹中,然后把“X:\Program Files\Polyspace\R2020a\bin\yuanwenjian\1”添加到MATLAB的搜索路径中。

在MATLAB命令行窗口中输入以下内容。

    >> dm1
    x =
        3.1416

这就是上述M文件的输出结果。

在MATLAB命令行窗口中输入以下内容。

    >> help dm1
    

在MATLAB命令行窗口中显示以下内容。

    这是一个演示文件;
    This is a demonstration file.

这就是文件dm1.m注释行的内容。

例1-3:M文件的建立与执行2。

解:在MATLAB命令行窗口中输入“edit”调出M文件编辑器,以文件名“dm2.m”保存;然后在文件编辑器中输入以下内容。

    %这是一个演示文件;
    %This is a demonstration file.
    a=input('请输入a\n')
    b=input('请输入b\n')

在MATLAB命令行窗口中输入以下内容。

    >> dm2
    请输入a
    1  %用户输入
    请输入b
    2  %用户输入

在工作区窗口显示ab赋值结果,如图1-30所示,这就是上述M文件的输出结果。

图1-30 工作区窗口

注意:

在运行函数之前,一定要把函数文件所在的目录添加到MATLAB的搜索路径中,或者将函数文件所在的目录设置成当前目录。

%后面的内容为注释内容,函数运行时,这部分内容是不起作用的,可以使用help命令查询。

文件的扩展名必须是.m。

为保持程序的可读性,应该建立良好的书写风格。

help命令运行后所显示的是M文件的注释语句的第一个连续块。被空行隔离的其他注释语句将被MATLAB的帮助系统忽略。

1.4.2 函数式文件

MATLAB中的函数(即函数式文件)通常是指MATLAB系统中已经设计好的完成某一种特定的运算或实现某一特定功能的一个子程序。MATLAB函数式文件是MATLAB中最重要的组成部分,MATLAB提供的各种各样的工具箱几乎都是以函数形式给出的。MATLAB的工具箱是内容极为丰富的函数库,可以实现各种各样的功能。这些函数在使用时,是被作为命令来对待的,所以函数有时又称为函数命令。

MATLAB中的函数式文件是M文件的主要形式。函数式文件是能够接收输入参数并返回输出参数的M文件。在MATLAB中,函数名和M文件名必须相同。

值得注意的是,命令式M文件在运行过程中可以调用MATLAB工作域内的所有数据,并且所产生的所有变量均为全局变量。也就是说,这些变量一旦生成,就一直保存在内存空间中,直到用户执行命令clear或quit时为止。而在函数式文件中的变量除特殊声明外,均为局部变量。

函数式文件的标志是文件内容的第一行为function语句。函数式文件可以有返回值,也可以只执行操作而无返回值,大多数函数式文件有返回值。函数式文件在MATLAB中应用十分广泛, MATLAB所提供的绝大多数功能都是由函数式文件实现的,这足以说明函数式文件的重要性。函数式文件执行之后,只保留最后的结果,不保留任何中间过程,所定义的变量也只在函数的内部起作用,并随着调用的结束而被清除。

例1-4:验证两个数是否相等。

解:(1)创建函数式文件equal_ab.m。

    function s=equal_ab
    % 此函数用来验证两数是否相等
    a=input('请输入a\n');
    b=input('请输入b\n');
    if a~=b
        input('a不等于b');
    else
        input('a等于b')
    end

(2)调用函数。

    >> s=equal_ab
    请输入a
    1           %用户输入
    请输入b
    2           %用户输入
    a不等于b