1
options = optimset('Display','iter','MaxIter',3,'OutputFcn',@outfun);
[x,fval,~,output] = fminsearch(@(param) esm6(param,identi),result(k,1:end-1),options);

此代码将找到我的 esm6 函数的本地最小值,并且由于“显示”选项,它将输出这样的字符串

迭代函数计数 min f(x) 过程
0 1 36.9193
1 5 35.9815 初始单纯形
2 7 35.4924 内部合约
3 9 35.4924 内部合约
4 11 33.0085 展开

所以在命令窗口中,我得到了每个迭代步骤的函数计数。由 fminsearch 创建的结构output中只有 func-count 的总量。有没有办法接收在命令窗口中输出的所有信息,也在输出结构中?

编辑:
我认为我非常接近解决方案。我写了这个输出函数:

function stop = outfun(x,optimvalues,state);
    stop = false;
    if state == 'iter'
        history = evalin('base','history');
        history = [history; optimvalues.iteration optimvalues.funcCount];
        assignin('base','history',history);
    end
end

由于http://de.mathworks.com/help/matlab/math/output-functions.html这应该可以工作,但事实上,matlab 告诉我,

???引用不存在的字段“funcCount”。

任何想法,为什么会发生这种情况?

4

0 回答 0