2016-12-24 6 views
0

https://www.mathworks.com/help/optim/examples/banana-function-minimization.htmlMATLAB Optimization Toolbox Beispiel

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)]) 

Was ist @bananaout hier?

Dies mir folgende Fehler geben,

??? 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) 

Antwort

1

Gemäß dem Dokument werden Output Functions vom Optimierungsprogramm bei jedem Zeitschritt genannt, Sie ermöglicht Dinge wie Plot den Fortschritt der Optimierung zu tun.

In Ihrem Fall erhalten Sie einen Fehler, weil bananaout scheint ein Skript zu sein, wenn es eine Funktion (mit bestimmten Eingaben - siehe das Dokument für ihre Details) sein muss. Haben Sie den Beispielcode in einem Skript namens bananaout gespeichert? Wenn ja, benennen Sie das Skript um.

Sie können eine Liste aller m-Code sehen, die Sie haben, die bananaout durch Ausführen der folgenden genannt werden:

>> which bananaout -all

Einer von ihnen wird die Funktion, die das Beispiel sollte anrufen, während ein anderes wird das sein, das Sie erstellt haben und umbenennen/entfernen müssen.

Verwandte Themen