2016-12-24 93 views
0

https://www.mathworks.com/help/optim/examples/banana-function-minimization.htmlMATLAB优化工具箱例如

fun = @(x)(100*(x(2) - x(1)^2)^2 + (1 - x(1))^2); 
options = optimset('OutputFcn',@bananaout,'Display','off'); 
x0 = [-1.9,2]; 
[x,fval,eflag,output] = fminsearch(fun,x0,options); 
title 'Rosenbrock solution via fminsearch' 
Fcount = output.funcCount; 
disp(['Number of function evaluations for fminsearch was ',num2str(Fcount)]) 
disp(['Number of solver iterations for fminsearch was ',num2str(output.iterations)]) 

什么是@bananaout这里?

这是给我下面的错误,

??? Error using ==> feval 
Attempt to execute SCRIPT bananaout as a function: 
C:\Users\admin\Desktop\bananaout.m 

Error in ==> callAllOptimOutputFcns at 12 
    stop(i) = feval(OutputFcn{i},xOutputfcn,optimValues,state,varargin{:}); 

Error in ==> fminsearch>callOutputAndPlotFcns at 464 
      stop = callAllOptimOutputFcns(outputfcn,xOutputfcn,optimValues,state,varargin{:}) 
      || stop; 

Error in ==> fminsearch at 199 
    [xOutputfcn, optimValues, stop] = 
    callOutputAndPlotFcns(outputfcn,plotfcns,v(:,1),xOutputfcn,'init',itercount, ... 

Error in ==> test_optim at 9 
[x,fval,eflag,output] = fminsearch(fun,x0,options) 

回答

1

按照商务部,Output Functions被优化在每个时间步长叫,使您能够做这样的事情的情节优化的进度。

在你的情况下,你会得到一个错误,因为bananaout似乎是一个脚本,当它需要是一个函数(具体输入 - 请参阅文档的细节)。您是否碰巧将示例代码保存在名为bananaout的脚本中?如果是这样,请重命名该脚本。

你可以看到,你有被执行所谓bananaout所有M代码列表如下:

>> which bananaout -all

其中之一将是例子应该调用该函数,而另一个将是您创建并需要重命名/删除的那个。