2014-05-09 67 views
2

的內聯函數的變量數,我想編寫一個函數是這樣的:確定在Matlab

function foo(goo,...) 
    if(goo is a function of two variables) 
    % do something 
    else 
    % do something else 
    end 
end 

有沒有什麼方法可以讓我得到一個內聯函數的變量的數量(或匿名的功能?)。爲了更清楚:

f = inline('x + y') 
g = inline('x') 

我希望能夠分辨f是兩個變量的函數和g 1個可變

+1

見['nargin'](http://www.mathworks.com/help/matlab/ref/na rgin.html)功能 – Dan

回答

2

編輯

後,我回答的這是一個更好的策略:只需使用nargin;見@k-messaoudi's answer


對於內聯函數

根據inline的幫助:

INLINE(EXPR)構建體從包含在字符串EXPR的MATLAB表達的內聯函數對象。通過在EXPR 中搜索變量名稱來自動確定輸入參數(請參閱SYMVAR)。

因此:打電話symvar,看看它有多少個元素返回:

>> f = inline('x + y'); 
>> g = inline('x'); 
>> numel(symvar(f)) 
ans = 
    2 
>> numel(symvar(g)) 
ans = 
    1 

對於匿名函數

首先使用functions獲取有關匿名函數信息:

>> f = @(x,y,z) x+y+z; 
>> info = functions(f) 
info = 
    function: '@(x,y,z)x+y+z' 
     type: 'anonymous' 
     file: '' 
    workspace: {[1x1 struct]} 

現在,再次使用symvarinfo.function

>> numel(symvar(info.function)) 
ans = 
    3 
2

定義的變量:syms x1 x2 x3 .... xn;

定義功能:f = inline(x1 + x2 + sin(x3) + ...);

輸入參數的數量:n_arg = nargin(f)

數輸出參數的:n_arg = nargout(f)

+1

而是將其添加到您的原始答案(即編輯答案),然後刪除這個現在多餘的答案。 – Dan