varargin - Variable-length input argument list - MATLAB (original) (raw)

Variable-length input argument list

Syntax

Description

varargin is an input variable in a function definition statement that enables the function to accept any number of input arguments. Specify varargin by using lowercase characters. After any explicitly declared inputs, includevarargin as the last input argument.

When the function executes, varargin is a 1-by-N cell array, where N is the number of inputs that the function receives after the explicitly declared inputs. If the function receives no inputs after the explicitly declared inputs, thenvarargin is an empty cell array.

example

Examples

expand all

Define a function in a file named acceptVariableNumInputs.m that accepts a variable number of inputs and displays the values of each input.

type acceptVariableNumInputs

function acceptVariableNumInputs(varargin) disp("Number of input arguments: " + nargin) celldisp(varargin) end

Call the function with several inputs.

acceptVariableNumInputs(ones(3),'some text',pi)

Number of input arguments: 3

varargin{1} =

 1     1     1
 1     1     1
 1     1     1

varargin{2} =

some text

varargin{3} =

3.1416

Define a function in a file named definedAndVariableNumInputs.m that expects two inputs and accepts an additional number of inputs.

type definedAndVariableNumInputs

function definedAndVariableNumInputs(X,Y,varargin) disp("Total number of input arguments: " + nargin)

formatSpec = "Size of varargin cell array: %dx%d";
str = compose(formatSpec,size(varargin));
disp(str)

end

Call the function with several inputs.

definedAndVariableNumInputs(7,pi,rand(4),datetime('now'),'hello')

Total number of input arguments: 5 Size of varargin cell array: 1x3

Call the function with two inputs. varargin is an empty cell array.

definedAndVariableNumInputs(13,42)

Total number of input arguments: 2 Size of varargin cell array: 0x0

Define a function in a file named variableNumInputAndOutput.m that accepts a variable number of inputs and outputs.

type variableNumInputAndOutput

function varargout = variableNumInputAndOutput(varargin) disp(['Number of provided inputs: ' num2str(length(varargin))]) disp(['Number of requested outputs: ' num2str(nargout)])

for k = 1:nargout
    varargout{k} = k;
end

end

Call the function with two inputs and three outputs.

[d,g,p] = variableNumInputAndOutput(6,'Nexus')

Number of provided inputs: 2 Number of requested outputs: 3

Call the function again with no inputs or outputs.

variableNumInputAndOutput

Number of provided inputs: 0 Number of requested outputs: 0

Extended Capabilities

expand all

Usage notes and limitations:

Usage notes and limitations:

Version History

Introduced before R2006a

expand all

You can use the varargin in a MATLAB Function block that has the HDL block property Architecture set toMATLAB Datapath and multi-index input arguments into cell arrays. For example, you can now generate HDL code for this code snippet:

Specifying a variable number of input arguments using varargin shows improved performance. For example, in a file namedtimingTest.m in your current folder, create a function that expects one input and accepts an additional number of inputs.

function timingTest(x,varargin) n = 1e6; tic for i = 1:n y = myFun(x,varargin{:}); end toc end

function y = myFun(x,varargin) if nargin == 1 y = x; elseif nargin == 3 y = x + varargin{1} + varargin{2}; else y = NaN; end end

The amount of improvement depends on whether varargin is empty. The performance improvement is most significant whenvarargin is empty.

The code was timed on a Windows® 10, Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz test system.

You can generate HDL code for functions in MATLAB Function blocks with HDL block property set to MATLAB Datapath. These functions can use input argumentvarargin. HDL function checkhdl can determine if cell arrays are accessed and initialized correctly usingvarargin.