【问题标题】:MATLAB: Summing function handlesMATLAB:求和函数句柄
【发布时间】:2018-10-30 12:33:43
【问题描述】:

我正在尝试自动创建一个函数句柄,它是函数句柄的总和。当我尝试手动执行此操作时,它起作用了:

f1 = @(x) x(1);  
f2 = @(x) x(2);   
f3 = @(x) x(3);  
f = @(x) f1(x)+f2(x)+f3(x);  

但是当我尝试自动执行此操作时(使用 for 循环):

aux = {f1,f2,f3};  
f = @(x) 0;
for i=1:3    
   f = @(x) f(x) + cell2mat(aux(i));
end

我收到以下错误:

“function_handle”类型的输入参数的未定义运算符“+”。

我的目标是将此函数句柄与fmincon 函数一起使用。

因此,另一种解决方案也会有所帮助。

【问题讨论】:

  • f(x) + aux{i}(x) 在循环内工作吗?
  • 是的,它奏效了。谢谢

标签: matlab math sum function-handle


【解决方案1】:

在第一种情况下,您要添加函数调用的结果,这可以正常工作。在第二种情况下,您尝试添加未实现的函数句柄。

解决方法是使用cellfun 评估您的函数,然后将结果相加:

f = @(x)sum(cellfun(@(c)feval(c,x),aux));

以上假设您的函数都返回一个标量数字。如果在您的实际应用程序中不是这种情况,那么您需要适当地修改 cellfun 的使用。

【讨论】:

  • 谢谢,但它没有帮助。正如 Cris Luengo 所说,我需要一个函数句柄而不是求和。
  • 是一个函数句柄。您能否举一个例子,说明上述解决方案的结果与您的手动 it working 解决方案的结果不同?
  • 我同意。它会给出相同的结果,但我不需要结果。我需要函数句柄来处理 fmincon 函数。而且,更具体地说,我需要一种自动方法来创建这个函数句柄。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多