先来复习一下上一章中M文件的内容。
M文件分类:
- 命令文件(脚本文件,Script File)
- 函数文件(Function File)
区别
命令文件没有输入,没有返回;
命令文件可以对工作空间的变量操作,结果返回工作空间,而函数文件中的变量为局部变量,函数执行完毕,变量被清除;
命令文件可以直接运行,函数文件见需要调用的形式运行(除了特殊的函数文件之外)。
下面来介绍一下函数文件。
函数文件的基本格式如下:
function [输出形参]=函数名([输入形参])
[注释说明]
函数体
关于函数文件名
通常和函数名一致,如果不一致,那么忽略函数名,调用时使用函数文件名。
注释部分
注释部分可以提供help以及lookfor命令的查找功能
下面来看一段示例代码:
function re = add_my(a, b)
%ADD_MY 完成变量a和b的相加
% 输入: a加数1
% b加数2
% 输出: re为输入两个参数的加和
%
% $Author:why
% $Date: 2013-03-12
% Version: V1.0
re = a + b;
转换到输出台,使用help查看函数相关信息:
>> help add_my
add_my 完成变量a和b的相加
输入: a加数1
b加数2
输出: re为输入两个参数的加和
$Author:why
$Date: 2013-03-12
Version: V1.0
直接调用函数即可。注意,调用时输入的是文件名而不是函数文件,二者不一致时输入文件名调用对应的函数:
>> add_my(1,2)
ans =
3
函数参数可调标识变量
- nargin
- nargout
- varargin
- varargout
可以完成传递参数的可调功能,类似于高级语言中的函数重载和多态。
前两者为输入输出参数个数,后面两个可以代表未知的输入输出变量。
举一个类似于函数重载的用例说明nargin的使用:
function re = add_multi(a, b, c, d)
% 函数参数可调标识变量
%
% nargin:输入参数的个数
if nargin == 4
re = a + b + c + d;
elseif nargin == 3
re = a + b + c;
elseif nargin == 2
re = a + b;
else
error('输入参数个数错误');
end
举一个栗子说明nargout的使用:
function [a, b] = add_mu(c, d, e, f)
%
%
%
if nargout == 2
a = c + d + e + f;
b = c * d * e * f;
else
a = c + d + e + f;
end
在使用的时候注意,表明两个输出的时候是乘积,一个输出是加和:
>> [a,b]=add_mu(1,2,3,4)
a =
10
b =
24
举一个栗子说明varargin的使用,用来存储形参,
如果输入的形参过多,不会出现too many input arguments的提示了,
也就是说如果有很多变量可以用这个来调整:
function re = add_var(a, b, varargin)
%
%
%
error(nargchk(2, 4, nargin));%最小2最大4检测内容nargin
if nargin == 2
re = a + b;
elseif nargin == 3
c = varargin{1};
re = a + b + c;
elseif nargin == 4
c = varargin{1};
d = varargin{2};
re = a + b + c + d;
else
error('wrong');
end
运行一下看看:
>> add_var(1)
Error using add_var (line 6)
Not enough input arguments.
>> add_var(1,2)
ans =
3
>> add_var(1,2,3)
ans =
6
>> add_var(1,2,3,4)
ans =
10
>> add_var(1,2,3,4,5)
Error using add_var (line 6)
Too many input arguments.
下面来介绍一下global全局变量。
使用global声明,可以提供不同的M文件访问同一个变量。
不同的函数之间访问同一个变量,可以通过返回参数来设置,或者使用全局变量。
在GUI中,也可以通过其他方式完成(GUI数据,app数据等)。
MATLAB函数文件详解
本文详细介绍了MATLAB中函数文件的定义与使用方法,包括基本格式、全局变量的应用及参数可调标识变量nargin、nargout、varargin、varargout的实例演示。
1723

被折叠的 条评论
为什么被折叠?



