2011-10-07 114 views
3

我需要聲明一個具有32個參數的函數,所以放置一個唯一的參數會很方便:一個由32個元素組成的數組。 我沒有找到這樣做的語法,我試過everythinh就像: 函數x = myfunction(str(32))(等...) 但沒有成功。如何用一個數組參數聲明一個函數?

回答

5

與其他語言不同,MATLAB可以接受矩陣作爲單個參數;所以你可以只檢查輸入變量是長度爲32的矢量:

function x = myfunction(arg) 
    if length(arg) ~= 32 
     error('Must supply 32 arguments!'); 
    end 

    %# your code here 
end 

如果它的參數個數可變,檢查出varargin

function x = myfunction(varargin) 

但對於32點的參數,可以考慮使用an input structure

function x = myfunction(argStruct) 

    if length(fieldnames(argStruct)) ~= 32 
     error('not enough arguments!'); 
    end 

在結構供應參數,然後傳遞結構:

>> myArgs = struct(); 
>> myArgs.arg1 = 5; 
>> myArgs.arg2 = 7; 
>> %#(etc) 
>> x = myfunction(myArgs); 

然後在函數中,您可以直接調用argStruct.arg1等;或者將其解壓縮爲函數內的32個不同變量。我會提供這些字段的描述性名稱,所以您不要在您的函數中將它們稱爲arg1等。對於許多輸入參數,使用函數的人可能不會記住函數要求他們傳遞輸入的順序。用一個結構體做它可以讓用戶傳遞參數,而不需要考慮這些輸入定義的順序。

3

要添加到@standardrude27的真棒答案,它看起來像你可能誤解函數聲明如何在Matlab中工作。你寫道:

function x=myfunction(str(32)) 

但是,你不需要在matlab中聲明輸入的類型。只要給它一個名字,然後使用它。因此,聲明的正確語法是:

function x = myfunction(myInput) 
相關問題