Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling function with varying number of parameters in Matlab

I am using symbolic toolbox to generate a matlab function. But the number of input to the generated function is varying with the number of objects that I need (e.g., number of switches). For 2 and 3 switches the generated function look likes this :

y = fun(a1,a2,b1,b2)
y = fun(a1,a2,a3,b1,b2,b3)

In the script using this function I establish vectors of these parameters:

a = [a1 a2 ...]

What I want is to either call the generated function directly or make a wrapper function, so that I do not need to change the call statement when I change the number of switches. To complicate this problem even more, these variables are ACADO variables. That means that matrix and element-wise operation is not allowed (i.e., all math operation must be done with scalars, and equations in symbolic toolbox must be written for scalars).

like image 858
Torstein I. Bø Avatar asked Oct 05 '12 07:10

Torstein I. Bø


1 Answers

You probably look for cell arrays and the {:} operator. It changes the contents of the cell to a coma separated list. The result can be passed to a function as parameters. For example:

v2 = {a1, a2, b1, b2};
v3 = {a1, a2, a3, b1, b2, b3};

And an example function:

function fun(varargin)
    display(['number of parameters: ' num2str(nargin)]);

You can call the function for different number of parameters 'transparently' as follows

fun(v2{:})
number of parameters: 4

fun(v3{:})
number of parameters: 6
like image 111
angainor Avatar answered Nov 10 '22 13:11

angainor