Matlab中varargin简介,varargin函数的使用

来源:互联网 发布:软件风险矩阵 编辑:程序博客网 时间:2024/05/05 14:06
     elseif strcmp(varargin{1}, 'userManage')    %用户管理窗口
         %{
            varargin:表示输入参数列表,
            slidingDis = varargin{argI+1}:表示将第argI+1个输入参数赋值给
            slidingDis 
            这是可变参数输入
            varargin是一个元胞数组,调用函数时,输入参数可以不同
            其大小可以随着输入参数而变大或变小。如你可以这样调用 pb_call(a)
            也可以这样 pb_call(a,b), pb_call(a,b,c)
            此时,varargin{1}=a; varargin{2}=b ; varargin{3}=c;

         %}

varargin调用者调用该函数时根据需要来改变输入参数的个数。以元胞数组保存varargout调用者调用该函数时根据需要来改变输出参数的个数。function varlist(varargin)   fprintf('Number of arguments: %d\n',nargin);%输出输入参数的个数   celldisp(varargin)%输出输入的参数 >> varlist(121,'sds',34)Number of arguments: 3 varargin{1} =     121varargin{2} =     sdsvarargin{3} =     34
matlab中varargin简介
varargin可以看做“Variable length input argument list”的缩写。在matlab中, varargin提供了一种函数可变参数列表机制。 就是说, 使用了“可变参数列表机制”的函数允许调用者调用该函数时根据需要来改变输入参数的个数。
matlab中很多内建函数和工具箱函数都使用了这种机制。 比如图像处理工具箱中的imshow函数。 该函数允许我们根据图像数据特点来调用:
比如, 显示一张真彩色位图, 我们可以简单的使用:
imshow(RGB), 其中RGB是通过imread函数读取图像获得的图像数据。这里我们只给了一个参数。
但是在显示索引图像时, 因为索引图像使用了调色板,因此为了正确显示图像, 除了图像数据外, 我们还要额外指定显示图像所使用的调色板(一般也由imread函数获得),这样就出现了以下的调用格式:
imshow(X, map)
那么, 这种机制是怎么实现的呢? 借助于varargin。
相关:varargout、nargin
下面我们来看一个简单的例子,(本例子参考了matlab中varargin文档)
function retvar = vartest(varargin)
optargin = size(varargin, 2); % number of inputs.
ndims(varargin)
varargin
stdargin = nargin - optargin; % 'nargin' in matlab means number of input arguments.
fprintf('Number of inputs: %d\n', nargin);
fprintf('Inputs from individual arguments: %d\n', stdargin)
for k = 1:size(varargin, 2)
fprintf('%d: %d\n', k, varargin{k});
end
end
这里定义了一个函数, 利用了可变参数列表。然后我们这样调用这个函数:
>> vartest(1, 2, 3)
ans = 2
varargin =
[1] [2] [3]
Number of inputs: 3
Inputs from individual arguments: 0
1: 1
2: 2
3: 3
我们看到, 这里varargin是一个1*3的二维矩阵, 这个矩阵即我们调用这个函数时传入的参数列表。
通过size(varargin, 2)获得的varargin第二维的尺寸(即varargin的列数)就是我们传入的参数个数。
stdargin = nargin - optargin;这一句是获取可变参数列表从第几个参数开始的。 其中, nargin也是matlab中的, 不能拼错了, nargin的
值即传入的所有参数个数。
也许你会问, 咦? 这不就是size(varargin, 2)吗?
对于本例,的确这样子。
但是有的函数, 参数列表是这样的:
function vartest_2(arg1, argb, varargin)
optargin = size(varargin, 2); % number of inputs.
stdargin = nargin - optargin; % 'nargin' in matlab means number of input arguments.
fprintf('Number of inputs: %d\n', nargin);
fprintf('Inputs from individual arguments: %d\n', stdargin)
for k = 1:size(varargin, 2)
fprintf('%d: %d\n', k, varargin{k});
end
end
这次我们调用:
>> vartest_2(1, 2, 3)
Number of inputs: 3
Inputs from individual arguments: 2
1: 3
你会看到, 由于vartest_2的第一二个参数不是可变参数列表的一部分, 可变参数列表从第三个参数开始。因此
nargin等于3, 而size(varargin, 2) 等于1

0 0
原创粉丝点击