我正在尝试自动创建一个函数句柄,它是函数句柄的总和。当我尝试手动执行此操作时,它可以工作:
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
函数一起使用。
所以替代解决方案也会有所帮助。
答案 0 :(得分:0)
在第一种情况下,您要添加函数调用的结果,这样可以正常工作。在第二种情况下,您尝试添加未实现的函数句柄。
解决方法是使用cellfun
评估您的功能,然后将结果添加到一起:
f = @(x)sum(cellfun(@(c)feval(c,x),aux));
以上假设您的函数都返回标量数字。如果您的实际应用程序不是这种情况,那么您需要适当修改cellfun
的使用。