を使用して関数の最小値を見つけたい
[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」。