MATLAB的函数类型(5种)

本节介绍 MATLAB 的 5 种函数类型,分别为:主函数、子函数、嵌套函数、私有函数和重载函数。

主函数

通常 M 文件中的第一个函数为主函数,主函数后可以是任意数量的子函数。主函数可以被该文件之外的其他函数调用,主函数的调用是通过存储该函数的 M 文件的文件名进行的。

子函数

M 文件中可以包括多个函数,除主函数之外的其他函数称为子函数。子函数只能被主函数或该文件内的其他子函数调用。每个子函数以函数定义语句开始,直至下一个函数的定义或文件的结尾。各个子函数以任意顺序出现,但主函数必须最先出现。

示例1

主函数和子函数,具体程序如下:
function [avg, med] = newstats(u)    % 主函数
% NEWSTATS Find mean and median with internal functions.
n = length(u);
avg = mean(u, n);
med = median(u, n);
function a = mean(v, n)    % 子函数
% Calculate average.
a = sum(v)/n;
function m = median(v, n)    % 子函数
% Calculate median.
w = sort(v);
if rem(n, 2) == 1
    m = w((n+1) / 2);
else
    m = (w(n/2) + w(n/2+1)) / 2;
end
当在 M 文件中调用函数时,系统首先判断是否为子函数,然后判断是否为私有函数,最后判断其是否为当前目录下的标准 M 文件函数或者系统内置函数。

嵌套函数

函数体可以定义其他的函数,这种内部函数称为嵌套函数。当 M 文件存在一个或多个嵌套函数时,M 文件中的所有函数必须以 end 结束。

嵌套函数的语法如下:

function x = A(p1, p2)
...
    function y = B(p3)
    ...
    end
...
end

每个函数可以嵌套多个函数,通常为平级嵌套结构和多层嵌套结构。

示例2

平级嵌套结构,具体程序如下:
function x = A(p1, p2)
...
    function y = B(p3)
    ...
    end
    function z = C(p4)
    ...
    end
...
end
上面示例中,函数 A 嵌套了函数 B 和函数 C。

示例3

多层嵌套结构,具体程序如下:
function x = A(p1, p2)
...
    function y = B(p3)
    ...
        function z = C(p4)
        ...
        end
    ...
    end
...
end
上面示例中函数 A 嵌套了函数 B,函数 B 嵌套了函数 C。

一个嵌套函数可以被下列函数调用。
  • 该嵌套函数的上一层函数。
  • 同一母函数下的同级嵌套函数。
  • 任一低级别的函数。

示例4

嵌套函数的调用,具体程序如下:
function A(x, y)    % Primary function
B(x, y);
D(y);
    function B(x, y)    % Nested in A
    C(x);
    D(y);
        function C(x)    % Nested in B
        D(x);
        end
    end
    function D(x) % Nested in A
    E(x);
        function E(x) % Nested in D
        ...
        end
    end
end
示例中函数 A 可以调用函数 B 和函数 D,但不能调用函数 C 和函数 E;函数 B 可以调用函数 D 和函数 C,函数 D 可以调用函数 B 和函数 E;函数 C 可以调用函数 B 和函数 D。

私有函数

私有函数是指位于 private 目录下的 M 文件函数。私有函数的构造与普通 M 函数完全相同,私有函数只能被 private 目录的上一级目录下的 M 函数文件调用,而不能被其他目录下的任何 M 函数、M 脚本文件调用,也不能被上一级目录下的 M 脚本文件调用。

重载函数

函数重载允许多个函数使用相同的函数名、不同的输入变量数据类型。函数调用时,系统根据函数输入变量的数据类型选择对应的函数。