【问题标题】:Matlab: Detect number of input arguments for function handle from outside of the functionMatlab:从函数外部检测函数句柄的输入参数数量
【发布时间】:2016-09-10 16:31:14
【问题描述】:

我从一个变量的符号函数开始,计算 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 输入参数过多。”

【问题讨论】:

    标签: matlab


    【解决方案1】:

    tl;dr: 你可以通过nargin 做到这一点:

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


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

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

    【讨论】:

    • 这是我的经验。我看到的nargin 的所有示例都来自函数内部。
    • 另外,只是指出您可能想说derivesCell = cell(5,1)。您创建的是一个 5×5 单元格(如果您希望水平索引并且实际上是垂直索引,或者如果您尝试获取预期为 5 的单元格数组的大小,这可能会在某些时候给您带来问题元素,或类似的东西)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多