0

我有一个 objective在 Matlab 中调用的函数,我通过编写[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.

我不明白如何解决这个错误。

4

2 回答 2

3

您需要引用fun使用花括号的元素

fhandle = fun{i};

PS
最好不要在Matlab中使用iand作为变量名j

或者,使用cellfun.

于 2013-03-05T11:40:32.327 回答
2

使用更优雅的方法cellfun

function [f df] = objective( x, fun )
[f, df] = cellfun( @(f) f(x), fun );
f = sum(f);
df = sum(df);

请注意怪异的使用cellfun- cellarray 是乐趣而不是数据;-)

于 2013-03-05T13:23:22.600 回答