在Matlab中确定内联函数的变量数

时间:2014-05-09 12:21:07

标签: matlab parameter-passing inline anonymous-function

我想写一个这样的函数:

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个变量

2 个答案:

答案 0 :(得分: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]}

现在,再次使用symvar上的info.function

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

答案 1 :(得分:2)

定义您的变量:syms x1 x2 x3 .... xn;

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

输入参数的数量:n_arg = nargin(f)

输出参数的数量:n_arg = nargout(f)