M 文件(M-files)

在 MATLAB 中,M 文件有两种类型:

  1. 脚本(Scripts)

  2. 函数(Functions)


脚本(Scripts)

脚本是在当前工作空间(workspace)中运行的 M 文件。
当你从命令行(基本工作空间)调用脚本时,它会
使用并修改
当前工作空间中的变量。

⚠️ 注意:当脚本在循环中被调用,而循环变量命名不规范(如多个循环都使用 ijk),就可能会引发混乱和难以调试的错误。


函数(Functions)

函数有自己的独立工作空间,与主程序(调用者)隔离。这意味着:

  • 函数所需的所有变量必须通过参数传入或在函数内定义;

  • 函数结束时,其内部变量不会影响外部工作区;

  • 只有函数的输出参数会被返回。

因此,在函数中可以放心使用 ij 等变量名,而不会影响主程序。


M 文件中的通用命令

只要变量在当前工作空间中存在,任何在命令行有效的命令在 M 文件中同样适用。

利用函数封装代码,可以自动化重复任务,也更易于维护和修改。


函数语法与要求

一个最基本的自定义函数语法如下:

function [output1, output2, ...] = function_name(input1, input2)
    % 函数语句
end
  • function_name 应与文件名 function_name.m 保持一致;

  • 函数中必须对所有输出变量进行赋值;

  • 通常会在函数开头初始化输出变量(如设置为 0-1[])以防异常退出;

  • 函数可以用 return 提前返回(非必须)。


路径(Path)

为了能调用函数,该函数的 .m 文件必须在 MATLAB 的当前路径中。

路径顺序:

  1. 当前工作目录(pwd

  2. 默认路径(可用 addpath 添加)

MATLAB 会按路径顺序查找函数名,找到第一个匹配即停止搜索。


函数中的 narginnargout

  • nargin:获取传入函数的输入参数数量;

  • nargout:获取函数调用方请求的输出参数数量;

配合 nargchk(min, max, nargin) 可以检查参数数量是否在合法范围内。

这在设计支持可选参数不同返回数量的函数时非常有用。


vararginvarargout

  • varargin:用于传递可变数量的输入参数,为一个元胞数组;

  • varargout:用于支持可变数量的输出参数

示例函数:

function [s, varargout] = mysize(x)
    nout = max(nargout, 1) - 1;
    s = size(x);
    for k = 1:nout
        varargout{k} = s(k);
    end
end

调用示例:

[s, rows, cols] = mysize(rand(4,5));
% s = [4 5], rows = 4, cols = 5

编程规范与建议

  • 使用分号 ; 结尾可避免输出中间变量,提高性能;

  • 添加注释 %%% 可提升代码可读性,便于调试和协作:

syms x y z;     % 定义符号变量 x, y, z
w = [x y z];
e = [1 2 3];
t = jacobian(e, w);  % 计算雅可比矩阵
  • 注释中可注明作者和日期:

% 作者:某人
% 日期:yyyy-mm-dd

嵌套函数(Nested Functions)

待补充:关于嵌套函数的定义、优缺点与使用场景


参考资料与外部链接

内容参考自 ControlTheoryPro.com 关于 M 文件、脚本与函数的文章。

如需我补充“嵌套函数”相关的翻译和示例,请告诉我。


最后修改: 2025年04月16日 星期三 11:43