Matlab:从函数外部检测函数句柄的输入参数数

时间:2016-09-10 16:31:15

标签: matlab

我从一个变量的符号函数开始,计算1到N阶的符号导数,然后将这些符号函数转换为函数句柄并将函数句柄存储在单元格数组中。然后,我使用循环在相同的输入值处评估每个函数句柄。我遇到的问题是,其中一个导数可能是常数(当然,高阶导数为零)。当我试图给每个函数处理一个输入时,我面对"太多的输入参数"错误。我希望能够提前检查函数句柄是否是常量,这样我就可以避免错误,但我无法弄清楚如何做到这一点。

如果一个小工作示例很有帮助,我提供以下内容

symVar = sym('symVar');
startFunc = symVar^4 + symVar^3 + symVar^2;
derivesCell = cell(5);
for J=1:5
    derivesCell(J) = {matlabFunction(diff(startFunc,symVar,J))};
end

cumSum = 0;
evalPoint = 2;
for J=1:5
    cumSum = cumSum + derivesCell{J}(evalPoint);
end

使用symengine> @()2.4e1执行生成"错误 输入参数太多。"

1 个答案:

答案 0 :(得分:4)

tl; dr:您可以使用nargin执行此操作:

>> nargin(derivesCell{5})
ans =
     0

>> nargin(derivesCell{3})
ans =
     1

<小时/> 的说明:
大多数人都熟悉在函数内部使用nargin作为“特殊变量”,但它可以在函数定义的上下文之外使用,作为一个函数,它接受一个function_handle参数,返回输入的数量函数句柄的参数。从文档中:

  

NARGIN(FUN)返回声明的输入数量       M文件功能FUN。如果是,参数的数量是负数       function具有可变数量的输入参数。乐趣可以       映射到特定函数或字符串的函数句柄       包含该函数的名称。