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

文章介绍了如何在MATLAB中使用nargin和nargout设置默认参数及处理可变数量的输入输出参数,通过varargin和varargout实现可变参数列表和输出。同时展示了如何利用inputParser设置多个默认参数,以及如何根据nargout确定输出变量的数量。示例函数meanmedian演示了这些概念,计算数据的平均值和中位数,并提供了去除最大值和最小值的选项。
摘要由CSDN通过智能技术生成

说明

为了更方便灵活的使用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)。函数解析器的优点是便于设置多个默认参数,指定参数时输入参数名即可,而不必严格按照顺序指定。

设置可变输出个数

可变输出变量可以通过函数内部的nargoutvarargout来指定。

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
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值