1

を使用して関数の最小値を見つけたい

[x,fval] = fminsearch(@(param) esm6(param,identi),result(k,1:end-1),options)

今、反復ステップごとに、関数「esm6」が計算して配列に保存する値が必要です。私は次のことを試しました:私が書いた関数の最初の行で

identi.sim.i_optiIter = identi.sim.i_optiIter + 1;

fminsearch の反復ステップをカウントする反復変数を持つ。そして後で必要な値をキャッチするために使用しました

identi.sim.guete_werte.gew(identi.sim.i_optiIter,:,:) = y_sim;
identi.sim.guete_werte.ungew(identi.sim.i_optiIter,:,:) = y_sim_ungew;

次の関数呼び出しで identi-struct の新しい値を確実に使用するために、関数の最後に次のように記述しました。

assignin('base','identi',identi);

残念ながら、私がやりたかったことはできません。誰でもこれで私を助けることができますか?

編集:
出力関数を使用して、別の試みを行いました。オプションを次のように拡張します。

options = optimset('Display','iter','MaxIter',3,'OutputFcn',@outfun);

しかし、今の問題は、この楽しみをどこに置くべきか分からないことです。outfun は次のようになります。

function stop = outfun(x,optimvalues,state,iteration,y_sim,y_sim_ungew)
    stop = false;
    if state == 'iter'
        guete_werte.gew(iteration,:,:) = y_sim;
        guete_werte.ungew(iteration,:,:) = y_sim_ungew;
    end
end

ここでの問題は、スクリプトであるため、fminsearch を呼び出すファイルに入れることができないことです。outputfunction を別の .m-function ファイルに入れると、esm6 関数の変数にアクセスできません。そして、それをesm6-functionファイルに追加すると、matlabは関数を見つけることができず、

??? ==> feval の使用エラー タイプ「struct」の入力引数に対する未定義の関数またはメソッド「outfun」。

4

0 に答える 0