Matlab中nargin,nargout,varargout以及varargin的用法 -

在写《用Matlab演示Parzen窗法》的时候,我还不知道怎样在m中设计可变参数函数。

后来阅读一些m自带函数源码时发现了它的秘密,只要将最后一个参数设置为varargin,就可以实现。

例如,写了一个函数:function test(varargin)

那么在这个函数里,varargin就是一个cell数组,它包含了用户输入的参数下面是一个例子:

function test(varargin)
disp(['nargin is ' num2str(nargin)]);
for v=1:numel(varargin)
disp(['varargin{' num2str(v) '} class is ' class(varargin{v})]);
end

完全就是使用cell数组的方法来处理用户输入的个数不定的参数,如果我们这样调用这个函数:

>> test()

会得到结果:

nargin is 0

表示用户输入参数个数为0个,就是没有输入参数。

如果这样调用:

>> test(1,'a',uint8(32),'123456');

会得到结果:

nargin is 4
varargin{1} class is double
varargin{2} class is char
varargin{3} class is uint8
varargin{4} class is char

表示用户输入了4个参数,第一个是double类型,第二个是char类型,第三个是uint8类型,第四个也是char类型。

也就是说,只要把函数的参数列表的最后一个参数写成varargin,就可以在函数内部以访问cell数组的方式来获取可变参数的信息

Varargout

varargout是一个元胞数组,用来存储输出参数。利用它的好处是输出参数的个数可变,可以根据情况改变输出参数的个数 

Varargout和Varargin的功能正好相反!

在使用varargout时的注意事项如下:

1。被调用函数(使用varargout输出)中需定义varargout{1}=...;varargout{i}=...;

2。调用函数方需使用[var1,var2,...,varn]=fun()的形式,而不是[var1,varout]=...,其中varout为cell的形式;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

varargin与varargout

 

用法:varargout=function(varargin);

作用:传入或者返回个数可变的参量(arguments).
详细内容:
    varargin: matlab里面可以设置函数参量可以变化,想当于VC里面的函数重载;可以通过nargin判断varargin的参量个数,然后根据变量的输入形式,用varargin{:}调用所有的参量;
    varargout: 同上,可以用nargout返回输出变量的个数,用varargout{:}对所有的输出变量赋值;
    例:      function varargout=tomography_test(varargin);
              nargin
              varargin{:}
              varargout=varargin;
              nargout
              varargout{:}
    在MATLAB2010A上运行[A,B,C]=tomography_test([5:10],1,5,6,7),结果分别显示如上四个参量。值得注意的是,虽然设置的输出与输入相同,但是输出[A,B,C]没有varargout多些,而在运行后正确地显示了[A,B,C],可能是源程序对这个问题进行兼容。

varagrout是一个元胞数组
返回多个参数时,把函数中的相应变量赋给varagrout就可以了
如要在函数中输出变量a,b,c
可写成
varargout{1} = a;
varargout{2} = b;
varargout{3} = c;
要是在GUI的函数中输出,则
varargout{1} = handles.a;
varargout{2} = handles.b;

varargout{3} = handles.c;


nargin表示一个函数的输入变量的个数

varargin, varargout表示的是函数的输入和输出的变量的个数是可变的。

if nargin && ischar(varargin{1})
这个语句的意思是
必须有输入且输入的变量中的第一个必须是字符!


n = numel(A) returns the number of elements, n, in array A.


varargin,varargout在函数中运用

varargin,表示用在一个函数中,输入参数不确定的情况,这增强了程序的灵活性。
              例如:function g=fun(f,varargin)
              然后在程序中使用时,假如在调用函数时,intrans(f,a,b,c),那么:varargin{1}=a,varargin{2}=b,varargin{3}=c
              注意:在MATLAB中数组中下标是从1开始的。
            
varargout,表示函数输出结果的个数,[g,varargout]=fun(varargin)

nargin:系统统计出来的参数输入个数

举例说明函数的使用:实现一个相加的功能,不确定有多个数参与相加,但至少有两个。
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. function g=add(a,b,varargin)  
  2. if nargin==2  
  3.     g=a+b;  
  4. elseif nargin==3  
  5.     g=a+b+varargin{1};  
  6. end  

varargout就是在函数实现过程中,将产生的结果赋给varargout{1},varargout{2}等。
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. function varargout=add(a,b,varargin)  
  2. if nargin==2  
  3.     varargout{1}=a+b;  
  4. elseif nargin==3  
  5.     varargout{1}=a+b;  
  6.     varargout{2}=a+b-varargin{1};  
  7. end  

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值