我在Matlab中有一个名为objective
的函数我通过在脚本中编写[f, df] = objective(x, {@fun1, @fun2, ..., @funN})
进行评估。函数fun1, fun2, ..., funN
的格式为[f, df] = funN(x)
。
在objective
内,我希望,对于名为fun
的单元格数组中的每个输入,使用Matlab内置函数feval
评估给定函数:
function [f, df] = objective(x, fun)
f = 0;
df = 0;
for i = 1:length(fun)
fhandle = fun(i);
[fi, dfi] = feval(fhandle, x);
f = f + fi;
df = df + dfi;
end
end
我在评估objective
时收到以下错误。
Error using feval
Argument must contain a string or function_handle.
我不知道如何解决这个错误。
答案 0 :(得分:3)
答案 1 :(得分:2)
使用cellfun
function [f df] = objective( x, fun )
[f, df] = cellfun( @(f) f(x), fun );
f = sum(f);
df = sum(df);
请注意cellfun
的变态使用 - cellarray是有趣的而不是数据; - )