【问题标题】:Evalute cell array of anonymous functions with different arity评估具有不同数量的匿名函数的元胞数组
【发布时间】:2020-10-07 21:26:49
【问题描述】:

我有一个匿名函数的元胞数组,所有这些函数通常都采用不同的变量,例如

{@(x)x, @(x,y)x+y, @(y)y^2}

我想为一对值 {x,y} 评估所有这些函数,即执行类似的操作

{@(x)x, @(x,y)x+y, @(y)y^2}(x,y)

如何在 Matlab 中做到这一点?


编辑:由于找不到好的解决方案,我现在手动解析函数定义。

【问题讨论】:

  • 找出输入变量的名称绝非易事,因为它需要自省。我认为这在 MATLAB 中是可能的,但这需要做很多工作,我认为您必须手动解析函数定义,您可以将其作为字符串检索。在 MATLAB 中,输入参数的实际名称通常不会在函数定义之外共享。
  • 问题不是元数,问题是元数相同的函数可以使用不同的变量
  • 您是否考虑过定义单个函数@(x,y) {x, x+y, y^2}
  • @CrisLuengo 的建议非常简洁明了。
  • @CrisLuengo 匿名函数是函数的参数,由用户给出。因此,为了使用您的解决方案,我将更改函数的接口,这是我想避免的。

标签: matlab anonymous-function cell-array


【解决方案1】:

我会遍历这些函数,但我想有一种更优雅、更简洁的方式。我还使用了~ 占位符,因此不会因过多的输入而传播错误。 ~ 占位符可用于计划不使用的输入和输出。

%Input variables%
x = 1;
y = 2;

Functions = {@(x,~) x, @(x,y) x+y, @(~,y) y^2};

%Looping through functions and evaluating%
for Function_Index = 1: length(Functions)
   
Functions{Function_Index}(x,y)

end

使用 MATLAB 版本:R2019b

【讨论】:

  • 很好的解决方案,将识别参数名称的问题转化为简单的参数顺序问题。
猜你喜欢
  • 2019-05-19
  • 2015-01-04
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
相关资源
最近更新 更多