Qiang Li
Qiang Li

Reputation: 10855

In MATLAB, how can I conveniently supply many arguments to a function?

I have a MATLAB function myfun(v1,v2,v3,v4,v5,v6) and a 30x6 matrix A. The way to call the function is by passing each column of A as a separate input argument:

myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))

Just wondering whether there is a better way to do this without explicitly writing out so many times A(:,*)?

Upvotes: 4

Views: 2293

Answers (2)

Amro
Amro

Reputation: 124563

Rewrite your function to accept both conventions:

function [] = myfun(v1,v2,v3,v4,v5,v6)
    if nargin==1
        v2 = v1(:,2);
        v3 = v1(:,3);
        v4 = v1(:,4);
        v5 = v1(:,5);
        v6 = v1(:,6);
        v1 = v1(:,1);
    end

    %# use v1,v2,v3,v4,v5,v6
    %# ...
end

Now you can call as both:

myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))
myfun(A)

Usually you would do more validation to test for the correct number of arguments...

Upvotes: 2

gnovice
gnovice

Reputation: 125854

You can first place each column of A in a cell of a cell array using the function NUM2CELL, then pass the cell array contents as a comma-separated list using the {:} syntax:

B = num2cell(A,1);
myfun(B{:});

Upvotes: 5

Related Questions