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

     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} =
 
    121

varargin{2} =
 
    sds

varargin{3} =
 
    34
matlab中varargin简介
varargin可以看做“Variable length input argument list”的缩写。在matlab中, varargin提供了一种函数可变参数列表机制。 就是说, 使用了“可变参数列表机制”的函数允许调用者调用该函数时根据需要来改变输入参数的个数。
matlab中很多内建函数和工具箱函数都使用了这种机制。 比如图像处理工具箱中的imshow函数。 该函数允许我们根据图像数据特点来调用:
比如, 显示一张真彩色位图, 我们可以简单的使用:
imshow(RGB), 其中RGB是通过imread函数读取图像获得的图像数据。这里我们只给了一个参数。
但是在显示索引图像时, 因为索引图像使用了调色板,因此为了正确显示图像, 除了图像数据外, 我们还要额外指定显示图像所使用的调色板(一般也由imread函数获得),这样就出现了以下的调用格式:
imshow(X, map)
那么, 这种机制是怎么实现的呢? 借助于varargin。
相关:varargoutnargin
下面我们来看一个简单的例子,(本例子参考了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

MATLAB中,varargin函数是一种特殊的函数输入参数。它可以让你写一个接受不定数量输入参数的函数。具体用法如下: 1. 在函数定义中声明varargin变量 在函数定义的输入参数列表中,使用varargin关键字声明一个变量作为不定数量的输入参数。例如: ``` function myFunction(arg1, arg2, varargin) ``` 这里的varargin表示接受任意数量的输入参数。 2. 使用varargin输入参数 在函数体内,你可以使用varargin变量来访问输入参数。varargin是一个cell数组,包含所有传递给函数的不定数量的输入参数,每个输入参数都是cell数组的一个元素。 例如,下面的函数将计算传递给它的所有数字的平均值: ``` function avg = calculateAverage(varargin) sum = 0; count = length(varargin); for i = 1:count sum = sum + varargin{i}; end avg = sum / count; end ``` 调用该函数的方式如下: ``` avg = calculateAverage(1, 2, 3, 4, 5); ``` 这里的输入参数1、2、3、4、5会被打包成一个cell数组,然后传递给calculateAverage函数函数体内,varargin变量会接收到这个cell数组,并逐个遍历其中的元素,计算它们的平均值。 注意,如果函数的第一个输入参数是不定数量的输入参数(即使用varargin关键字声明的参数),则在调用该函数时可以省略该参数,例如: ``` avg = calculateAverage(1, 2, 3, 4, 5); ``` 这里没有传递第一个参数,但是calculateAverage函数仍然可以正确处理输入参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值