2012-10-31 79 views
5

當你有一個函數需要一個可變數量的參數(如ndgrid)時,如何將任意參數列表傳遞給該函數?如何將一組未知數量的參數傳遞給MATLAB中的函數?

比如我想讓它這樣,有時我通過兩個向量來ndgrid,並得到了兩個矩陣,即

[X1,X2] = ndgrid(x1,x2); 

但其他時候,我可能有更多的X的,所以我想

[X1,X2,X3,X4] = ndgrid(x1,x2,x3,x4) 
  1. 有什麼樣的結構,我可以用它來存儲一個參數數目未知的列表,然後只給該列表的功能?而且,
  2. 有沒有辦法從函數中檢索所有的輸出,當你不知道會有多少?
+0

一個快速和骯髒的方法是抽象的輸入和輸出一個電平(「尺寸」),並利用輸入陣列和輸出一個數組 - 也就是[X] = ndgrid(x)其中X和x是單元格數組或其他東西,每個元素都有一個實際的輸入元素 –

+0

然而,我不夠精通, varargs'類型的功能(我確信它可以編譯爲C) –

+0

哦,它非常簡單:http://www.mathworks.com/help/matlab/ref/varargin.html –

回答

5

使用vararginnarginvarargoutnargout可以很容易地定義可變參數/輸出功能。查看附帶的可用於varargin頁面的MATLAB文檔鏈接。

http://www.mathworks.com/help/matlab/ref/varargin.html

編輯:別人都在底部鏈接BTW,不嘟我自己的號角,但它似乎可以實現,正如我在「快速和骯髒」的評論呵呵呵曾建議

6

要通過在輸入到一個現有的功能的可變數量,使用單元陣列與擴展,這樣的:

x = 1:10; 
y = randn(size(x)); 
plotArguments = {'color' 'red' 'linestyle' '-'}; 
plot(x, y, plotArguments{:}); 

plotArguments = {1:10 randn(1,10) 'color' 'red' 'linestyle' '-'}; 
plot(plotArguments{:}); 

您可以使用相同的技巧來接收多個輸出。唯一困難的部分是記住正確的符號。

numArgumentsToAccept = 2; 
[results{1:numArgumentsToAccept }] = max(randn(100,1)); 
+0

謝謝!這正是我所期待的。我認爲它與單元陣列有關,但我不知道符號。 – rkp

0

返回所有參數作爲輸出的函數:

function varargout = ndgrid(varargin)  
    varargout = varargin; 
return 
相關問題