matlab函数设置默认参数,及设置可变个数的返回值

  • Post author:
  • Post category:其他




说明

为了更方便灵活的使用matlab函数,常常需要设置默认参数,以及得到可变个数的返回值。这就需要使用到

varargin

,

varargout

,

nargin

,

nargout

等内置函数。


varargin

是“Variable length input argument list”的缩写,它提供了一种函数可变参数列表机制,允许调用者调用该函数时根据需要来改变输入参数的个数。


varargout

是“Variable length output argument list”的缩写,可以得到可变个数的函数返回值。


nargin

是“number of input arguments”的缩写。 在函数体内部,

nargin

用来判断输入变量的个数。


nargout

是“number of output arguments”的缩写。 在函数体内部,

nargout

指出了输出参数的个数。



实例

这里我们的需求是给出一个函数,用于计算输入数组的平均值和中位值。默认不去掉最大值和最小值,当输入相关参数时,去掉最大值和最小值。当输出变量只有1个时,输出平均值,输出变量为2个时,输出平均值和中位数。

暂且把函数名叫

meanmedian

,目标要实现下列调用:

[mean_data,median_data] = meanmedian(data);
mean_data = meanmedian(data);
mean_data = meanmedian(data,true) % true 设置去掉最大值最小值

去除最大值和最小值的需求,可以设置一个参数

rm

,默认

rm = false

,即不去除。用户可以在调用函数时输入该参数来选择去除最大值和最小值。可以通过

nargin

来简单设置或者通过

varargin

设置输入解析器来实现。



通过nargin设置默认参数

function varargout = meanmedian2(data,rm)

if nargin == 1
    rm = false;
end
if rm
    data(data==max(data))=[];
    data(data==min(data))=[];
end
...
return

这时调用函数时可以通过meanmedian(data,true)来指定去掉最大值最小值。若不指定meanmedian(data),则默认不去掉最大值最小值。



通过函数解析器设置默认参数

p = inputParser;
addParameter(p,'rm',false);
parse(p,varargin{:});
rm = p.Results.rm;

这时,如果指定的

rm

值,则需要指定变量名meanmedian(data,‘rm’,ture)。

函数解析器的优点是便于设置多个默认参数

,指定参数时输入参数名即可,而不必严格按照顺序指定。



设置可变输出个数

可变输出变量可以通过函数内部的

nargout



varargout

来指定。

if nargout == 1
    varargout{1} = meandata;
elseif nargout == 2
    varargout{1} = meandata;
    varargout{2} = mediandata;
end

这时即可实现可变个数的变量输出:

[mean_data,median_data] = meanmedian(data);
mean_data = meanmedian(data);



函数代码

function varargout = meanmedian(data,varargin)
% get the mean and median
% usage: [mean_data,median_data] = meanmedian(data)
% usage: mean_data = meanmedian(data)
% remove the maximum and minimum values through optional parameters 'rm',
% default rm = false
% usage: mean_data = meanmedian(data,'rm',true)
%
% Yuechu Wu
% 12131066@mail.sustech.edu.cn
% 2023-03-08


% set up input parser, default rm = false
p = inputParser;
addParameter(p,'rm',false);
parse(p,varargin{:});
rm = p.Results.rm;

if rm
    data(data==max(data))=[];
    data(data==min(data))=[];
end

meandata = mean(data);
mediandata = median(data);

if nargout == 1
    varargout{1} = meandata;
elseif nargout == 2
    varargout{1} = meandata;
    varargout{2} = mediandata;
end

return



版权声明:本文为weixin_45693832原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。