在写《用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数组的方式来获取可变参数的信息。
返回多个参数时,把函数中的相应变量赋给varagrout就可以了
如要在函数中输出变量a,b,c
可写成
varargout{1} = a;
varargout{2} = b;
varargout{3} = c;
要是在GUI的函数中输出,则
varargout{1} = handles.a;
varargout{2} = handles.b;
varargout就是在函数实现过程中,将产生的结果赋给varargout{1},varargout{2}等。
后来阅读一些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:系统统计出来的参数输入个数
举例说明函数的使用:实现一个相加的功能,不确定有多个数参与相加,但至少有两个。
varargout就是在函数实现过程中,将产生的结果赋给varargout{1},varargout{2}等。