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 の変数名としてand
を使用しない方がよいij

または、を使用したソリューション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 に答える