2011-10-07 71 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) 
相关问题