我想找到一个函数的最小值
[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);
但现在的问题是我不知道把这个玩笑放在哪里。看起来像这样:
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 找不到该函数并说
???对“struct”类型的输入参数使用 ==> feval 未定义函数或方法“outfun”时出错。