2016-12-24 2 views
0

https://www.mathworks.com/help/optim/examples/banana-function-minimization.htmlexemple de boîte à outils Matlab optimisation

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

Qu'est-ce @bananaout ici?

Cela me donne l'erreur suivante,

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

Répondre

1

Selon le document, Output Functions sont appelés par l'optimiseur à chaque pas de temps, vous permettant de faire des choses comme tracer le progrès de l'optimisation.

Dans votre cas, vous obtenez une erreur car bananaout semble être un script lorsqu'il doit s'agir d'une fonction (avec des entrées spécifiques - voir le document pour les détails). Avez-vous enregistré l'exemple de code dans un script appelé bananaout? Si c'est le cas, renommez le script.

Vous pouvez voir une liste de tous les m-code que vous avez qui sont appelés bananaout en exécutant la commande suivante:

>> which bananaout -all

L'un d'eux sera la fonction que l'exemple devrait appeler, alors que un autre sera celui que vous avez créé et que vous devez renommer/supprimer.