function 是 MATLAB 用来定义自定义函数的关键字,作用是把一段独立可复用代码封装成函数,支持传入输入参数,计算之后返回输出参数,MATLAB 脚本是顺序执行代码,而使用 function 定义的函数拥有独立工作区,函数内部变量默认不会污染主工作区,这是它和脚本最核心差别,很多新手混淆脚本和 function,是因为没有理解独立工作区这个机制,学习的时候先掌握标准语法格式,再区分单输出多输出,掌握函数文件命名规则,再学习子函数 匿名函数相关补充写法,最后处理调用报错,就能熟练使用 MATLAB 里面的 function。
基础标准语法格式
function [输出参数列表] = 函数名 (输入参数列表)
% 函数内部代码
end
清单
1 function 是关键字,必须放在文件第一行
2 输出参数如果只有一个,可以省略方括号
3 输入参数写在圆括号里面,多个参数用逗号分隔
4 end 可以省略,但是推荐加上,可读性更好
5 核心规则 函数文件名必须和 function 后面的函数名保持一致,比如函数名叫 calc,文件就要保存为 calc.m
单输入单输出 基础示例
新建 calc.m 文件
function y = calc (x)
y = x x + 2x;
end
调用方式,在命令行输入
result = calc (5)
含义 输入 x 等于 5,函数内部计算,把结果赋值给 y,返回给 result
多输入多输出 写法
function [sum_val, mul_val] = calc2(a,b)
sum_val = a + b;
mul_val = a b;
end
调用
[s,m] = calc2 (3,4)
分层要点
一 工作区特点
清单
1 function 内部变量属于局部变量,函数运行结束自动销毁
2 主工作区不能直接读取函数内部临时变量
3 如果需要跨函数共享变量,需要使用 global 全局变量或者 persistent 持久变量
二 子函数
同一个 m 文件里面,主 function 后面可以追加多个子函数,子函数只能被本文件主函数调用,外部文件不能直接调用子函数
清单
1 主 function 写在最上方
2 子函数同样使用 function 关键字定义
3 子函数独立局部工作区
三 匿名函数补充
匿名函数不需要单独 m 文件,不需要 function 多行结构,适合简单表达式,格式是 f = @(输入参数) 表达式
示例 f = @(x) x^2 + 1
调用 f (3)
注意 匿名函数和传统 function 关键字定义的函数是两种不同形式,不要混淆
对比表格
| 项目 | function 自定义函数 | 脚本文件 |
|---|---|---|
| 关键字 | 首行 function | 无 function 关键字 |
| 工作区 | 独立局部工作区 | 和主工作区共用变量 |
| 参数 | 支持输入输出传参 | 不支持传参 |
| 复用性 | 可以反复传参调用 | 顺序运行 |
| 文件命名 | 文件名要匹配函数名 | 文件名无强制匹配 |
高频易错点
清单
1 保存 m 文件的时候,文件名和 function 后面函数名不一致,调用会报错
2 function 关键字不能写在脚本中间,function 必须是该文件第一行
3 输出变量没有赋值,调用之后返回空值
4 输入参数个数不匹配,会报参数数量错误
5 路径问题,m 文件不在 MATLAB 当前工作路径,调用提示未定义函数
进阶补充
清单
1 nargin 获取传入输入参数个数
2 nargout 获取请求输出参数个数
3 varargin 可变数量输入参数
4 varargout 可变数量输出参数
这几个是 function 函数里面常用内置辅助函数,用来做参数判断,实现可选参数功能
【常见问题】
问题 1 MATLAB 里面 function 可以写在脚本中间吗
回答 1 MATLAB 里面 function 不能写在普通脚本代码中间,function 必须作为该 m 文件第一行,如果是新版 MATLAB,脚本末尾可以追加局部函数,但是不可以穿插在脚本代码中间。
问题 2 MATLAB function 文件名为什么必须和函数名一样
回答 1 MATLAB 调用 function 的时候,是依靠文件名定位函数,如果文件名和 function 后面定义的函数名不一致,MATLAB 识别失败,调用 function 就会提示未定义函数。
问题 3 MATLAB function 内部变量会不会影响主窗口变量
回答 1 MATLAB function 拥有独立局部工作区,function 内部变量默认是局部变量,函数执行完毕自动清除,不会覆盖主工作区变量,这也是 function 和脚本重要区别。
问题 4 MATLAB function 支持多个输出参数吗
回答 1 MATLAB function 支持多个输出参数,写法是 function [out1,out2] = 函数名 (in1,in2),调用的时候用方括号接收多个返回值,实现一次 function 计算返回多个结果。
【免责申明】
本内容为 MATLAB function 语法学习参考,不同 MATLAB 版本对局部函数等特性支持有差异,新版本语法细节请对照对应版本官方帮助文档,内容不替代 MATLAB 官方教程。


