评估存储在Matlab单元阵列中的函数

时间:2013-03-05 11:37:28

标签: function matlab cell-array

我在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.

我不知道如何解决这个错误。

2 个答案:

答案 0 :(得分:3)

您需要使用花括号

引用fun的元素
fhandle = fun{i};

PS
It is better not to use i and j as variable names in Matlab

或者,a solution using cellfun

答案 1 :(得分:2)

使用cellfun

的更优雅的方法
function [f df] = objective( x, fun )
[f, df] = cellfun( @(f) f(x), fun );
f = sum(f);
df = sum(df);

请注意cellfun的变态使用 - cellarray是有趣的而不是数据; - )