Show an expression on each iteration of the optimization

Hello,
I'm using "lsqnonlin" to optimize a function and would like to show a expression, important for my problem, in each iteration. This expression depends on the optimization variables, therefore will change with each iteration. I understand that I can do this with OutputFcn, but I failed to understand how. I think it should not be complicated, please help!
The indicator is: (z(1)*z(2)+6)/z(4)+z(5)*z(6)
Thanks in advance!

 Accepted Answer

Write a function named Jurgenoutput consisting of the following:
function stop = Jurgenoutput(z,optimValues,state)
stop = false;
indicator = (z(1)*z(2)+6)/z(4)+z(5)*z(6);
disp(indicator)
Include the output function in your solver call as follows:
options = optimoptions('lsqnonlin','OutputFcn',@Jurgenoutput);
x = lsqnonlin(fun,x0,lb,ub,options)
Alan Weiss
MATLAB mathematical toolbox documentation

4 Comments

Thanks! but, could I use a function defined outside the function Jurgenoutput? I'm trying with the following, but apparently does not recognize the external function
function stop = Jurgenoutput(z,optimValues,state)
stop = false;
indicador=double(g2c(z(1),z(3),z(2)))
disp(indicador)
If g2c() is s on your MATLAB path, there's no clear reason it wouldn't have been recognized.
Apparently I can not use any variable defined outside the output function, I want to do the following and can not.
function stop = Jurgenoutput(z,optimValues,state)
stop = false;
indicator = (z(1)*z(2)+6)/z(4)+z(5)*z(6)*g1c;
disp(indicator)
where g1c was defined outside Jurgenoutput and is a constant number.
You need to look at how to pass extra parameters. Probably, a nested function would pass g1c successfully.
Alan Weiss
MATLAB mathematical toolbox documentation

Sign in to comment.

More Answers (0)

Asked:

on 29 Sep 2014

Commented:

on 1 Oct 2014

Community Treasure Hunt

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

Start Hunting!