varargin、varargout、nargin和nargout的使用方法

varargin、varargout、nargin和nargout的使用方法

由于使用MATLAB的频率越来越多,一些基本的技巧和使用需要熟悉,先从简单入手吧。

技巧实现

函数输入和输出参数个数确定的情况

  在这种情况下,用户可以按照如下方式来定义函数:
myfun.m函数文件:

function [out1 out2 out3]=myfun(in1, in2)
out2=in1+in2;   %两数和
out3=20;        %设置out3为20
out1=in1.^2;    %out2为in1的平方

  函数带有2个输入参数和3个输出参数,虽然在函数体内,变量的计算顺序是out2、out3、和out1,但函数的返回顺序是out1、out2和out3,与返回参数在函数体内的计算顺序无关。
  此外,实际调用函数时,其返回参数的个数可以少于函数定义的返回参数的个数。例如:函数myfun可以返回1个参数、2个参数或3个参数。
  有关函数myfun的返回值问题:

%调用时无返回参数,这时默认返回第1个输出参数的值
>> myfun(10,20)
ans =   100

%调用时带一个返回参数,返回第1个输出参数的值
>> [valuel]=myfun(10,20)
valuel =   100

%调用时带2个返回参数,返回前2个输出参数的值
>> [value1 value2]=myfun(10,20)
value1 =   100
value2 =    30

%调用时带3个返回参数,返回3个输出参数的值
>> [value1 value2 value3]=myfun(10,20)
value1 =   100
value2 =    30
value3 =    20

函数的输入和输出参数个数不确定的情况

  在这种情况下,Matlab语言可以使用vararginvarargout结构来定义函数的输入和输出参数,并使用narginnargout来获取函数调用时输入参数和输出参数的个数。

varargin 和 varargout

  利用varargin和varargout可以传递任意数目的输入参数和输出参数。
varargin(variable length input argument list)和varargout(variable length output argument list)都是可变长度的元胞数组,是MATLAB预定义的专用参数,可以分别用来存储函数的输入参数和输出参数。它们是在函数的输入和输出参数个数不确定的情况下使用,也就是可以应用到可变输入输出参数的函数中。
varargin有两种情况:

function myfun(varargin)
  第一种情况,函数被调用时,MATLAB使用varargin{1}来接收函数的第1个输入值,varargin{2}来接收函数的第2个输入值,依次类推。

function myfun(in1, in2, varargin)
  第二种情况,函数的第1个和第2个输入值由in1和in2来接收,varargin{3}接收函数的第3个输入值,varargin{2}接收函数的第4个输入值,依次类推。

varargout也有两种情况:

function varargout=myfun(in1,in2,…)
  函数被调用时,MATLAB使用varargout{1}接收第1个返回值,varargout{2}来接收第2个返回值,依次类推。

function [out1 out2 varargout]=myfun(in1,in2,…)
  函数被调用时,MATLAB使用out1和out2分别接收第1和第2个返回值,varargout{1}接收第3个返回值,varargout{2}来接收第4个返回值,依次类推。

注:varargin和varargout只用于包含可选参数的函数当中,在声明时,varargin和varargout必须作为最后一个参数声明,在声明中必须小写。正确的使用格式如下:

function [out1 out2 varargout] = myfun(in1, in2, varargin)

要取得varargin和varargout中的参数,可以使用varargin{1}、varargin{2}、varargout{1}、varargout{2}等。

nargin 和 nargout

  在一个函数M文件内,调用nargin或nargout可以确定用户调用函数时设置了多少个输入参数和输出参数。
nargin和nargout可以带有一个输入参数。该输入参数是一个函数名,用来确定该函数的输入和输出参数的个数,如nargin(fun)和nargout(fun)。

nargin 和 varargin 使用示例

vartest.m代码如下:

% 定义函数vartest,带2个独立输入参数和1个varargin数组
function vartest(inputArg1,inputArg2,varargin)
% 取得varargin中元素的个数
optargin=size(varargin,2);
% 由nargin得到函数总的输入值的个数,从而求得在独立参数中的输入值的个数
stdargin=nargin-optargin;
fprintf('函数的输入值个数为:%d\n',nargin)
fprintf('独立参数中的输入值个数为: %d\n',stdargin)
end

命令行调用,结果如下:

>>vartest(2,4,35,543,2)
函数的输入值个数为:5
独立参数中的输入值个数为: 2

nargout 和 varargout 使用示例

mysize.m代码如下:

function [s,varargout]=mysize(x)
% 调用nargout命令取得调用函数时返回参数的个数
out1=nargout;
% 确定varargout中元素个数
nout=max(out1,1)-1;
% 将输入数组的行数和列数组成的数组赋值给输出参数s
s=size(x);
% 分别将输入数组的行数和列数保存到varargout中
for k = 1:nout
    varargout(k)={s(k)};
end

命令行调用,结果如下:

>> [s,rows,cols]=mysize([1 2 3; 3 4 5])
s =     2     3
rows =     2
cols =     3

函数名作为nargin 和 nargout的输入参数

  如果将函数名作为nargin和nargout的输入参数,则返回的是函数定义的输入参数和输出参数的个数,即函数的形参的个数。
定义myfunc.m文件:

function out = myfunc(in1,in2,in3)
num1 = nargin;
num2 = nargout;
end

命令行调用,结果如下:

>> num1=nargin('myfunc')
num1 =     3

>> num1=nargout('myfunc')
num1 =     1
  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值