我可以使用不同类型的参数输入相同的函数

时间:2014-02-09 00:37:11

标签: matlab function input arguments

如果我有一个MATLAB实验室文件包含函数foo

function [test] = foo(a,b);
test = a+b

如果我想修改该函数,foo还会在我的输入中收到添加数据c 在相同的MATLAB文件中

function [test] = foo(a,b,c);
test = a+b+c;

我可以这样做吗? (我尝试类似的但是当我尝试使用它时说我需要进行许多论证。)

3 个答案:

答案 0 :(得分:1)

varargin方法在这里是合适的,尽管我的方法略有不同(见下文)。但是,您可以使用exist(或通过nargin来测试第三个参数是否存在,但这不是直接且容易出错的。)

exist

function test = foo(a,b,c)

if exist('c','var'), % nargin>2
    test = a + b + c;
else
    test = a + b;
end

与代码注释一样,对nargin的测试也是可能的,但exist调用的模糊性要小得多,如果修改了参数列表(例如顺序),则不需要更改。

varargin

请注意,varargin不需要是函数声明中的唯一参数:

function test = foo(a,b,varargin)

if nargin>2, % numel(varargin)>0
    test = a + b + varargin{1};
else
    test = a + b;
end

另外,假设您希望获得任意数量的额外输入(例如foo(a,b,c,d,...)),您可以使用varargin单元格数组进行操作。例如,您可以[varargin{:}]将元素水平连接到一个新数组。对于垂直连接,您可以执行vertcat(varargin{:})。我假设a+b+c示例只是一个示例,所以我不会在实践中展示这一点,但你可以按照自己喜欢的方式使用这些数组。

答案 1 :(得分:0)

你可以这样写:

function [test] = foo (varargin)
y = 0 ;
for i = 1:length(varargin)
y = y+ varargin(i) ;
end
test = y ;
end

你可以提供任意数量的参数。你可以在这里阅读更多关于varargin的内容:enter link description here

答案 2 :(得分:0)

支持此问题的最简单方法可能是

function [test] = foo (varargin)
  test = sum ([varargin{:}]);
end

这将允许任意数量的输入。如果你想限制为2,3个输入,那么

function [test] = foo (varargin)
  narginchk (2, 3);
  test = sum ([varargin{:}]);
end

如果你想避免varargin,另一种方法是将最后一个元素设置为默认值为0,这样如果没有定义它就不会影响操作:

function [test] = foo (a, b, c = 0)
  test = a + b + c;
end

编辑:我不确定这一点,但上面设置默认值的方法,可能只是八度,但尚未在Matlab中实现。