Can you help me with the output of my optimizer?

1 view (last 30 days)
I have this program from
par0 = [0.1,0.0001,100];% initial values
history = [];
fun_objetivo = @(par,pfrac)FunObjetivo(par);
options = optimset('MaxIter',3000,'MaxFunEvals',3000,'Display','iter','OutputFcn', @myoutput);
%We use here the Nelder-Mead method
par_optimos = fminsearch(fun_objetivo, par0, options);
function stop = myoutput(par_optimos,optimvalues,state);
stop = false;
if isequal(state,'iter')
history = [history;par_optimos];
end
end
but I can´t make it give me the value of my vector par_optimos for each iteration, can someone help me?

Answers (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 1 Jun 2021
You'd need define a math formulation of fun_objetivo = @(par,pfrac)FunObjetivo(par);
Once it is done, you can run via loop iteration, i.e.: for ... end

Alan Weiss
Alan Weiss on 2 Jun 2021
Use this example as a guide: Example of a Nested Output Function.
Alan Weiss
MATLAB mathematical toolbox documentation
  2 Comments
Jorge Armando Vazquez
Jorge Armando Vazquez on 3 Jun 2021
That is what I used
fun_objetivo = @(par,pfrac)FunObjetivo(par);
history=[];
options = optimset('MaxIter',3000,'MaxFunEvals',3000,'Display','iter','OutputFcn', @myoutput);;%,'PlotFcns',@optimplotfval);
%We use here the Nelder-Mead method
par_optimos = fminsearch(fun_objetivo, par0, options);
function stop = myoutput(par_optimos,optimvalues,state);
stop = false;
if isequal(state,'iter')
history = [history;par_optimos];
end
end
but there is error with
Error in Main_optim_15_05_21>myoutput (line 15)
history = [history;par_optimos];
Walter Roberson
Walter Roberson on 3 Jun 2021
Edited: Walter Roberson on 3 Jun 2021
You did not nest the function like suggested.
history = do_the_work;
function hist = do_the_work()
fun_objetivo = @(par,pfrac)FunObjetivo(par);
history=[];
options = optimset('MaxIter',3000,'MaxFunEvals',3000,'Display','iter','OutputFcn', @myoutput);;%,'PlotFcns',@optimplotfval);
%We use here the Nelder-Mead method
par_optimos = fminsearch(fun_objetivo, par0, options);
hist = history;
function stop = myoutput(par_optimos,optimvalues,state);
stop = false;
if isequal(state,'iter')
history = [history;par_optimos];
end
end
end

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!