2010-12-08 6 views
3

私は、MATLAB関数myfun(v1,v2,v3,v4,v5,v6)と30x6行列Aを持っています。関数を呼び出すための方法は、別々の入力引数としてAの各列を渡すことである:MATLABでは、関数に多くの引数をどのように便利に与えることができますか?

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

だけで明示的に何度A(:,*)を記述することなく、これを行うには良い方法があるかどうかを疑問に思いますか?

+0

なぜこのように渡していますか?この関数を書いたのですか、これは何らかの制約ですか? – Marm0t

答えて

2

は受け入れるようにあなたの関数を書き換え両方の規則:

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 

は今、あなたは両方のように呼び出すことができます。

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

通常、正しい数の引数をテストするためにさらに検証を行います...

5

あなたはまず{:}構文を使用してcomma-separated listとしてセル配列の内容を渡し、機能NUM2CELLを使用してセル配列のセルにAの各列を配置することができます:

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