I have a well defined optimization problem in which I have a separate cost function and a separate constraint function:

Cost = @(C)costcenterroad(C,lp,xref,yref,T,rw);

Nonlinconstr=@(C)nonlcon(C,lp,rw,xref,yref,sol);

[C,fval] = fmincon(Cost,C1,[],[],[],[],[],[],Nonlinconstr);

Inside the cost function (which is called first by fmincon), I evaluate nonlinear functions of the decision variables (C in this case). The outputs of the nonlinear function determine the cost.

However, in the constraint function I need to evaluate the same function, with the same decesion variables (thats the way fmincon works; first the cost, then the contraints). Hence, I would rather use the values already calculated in the cost functions.

I tried to do this by using a structure SOL as an output of the cost function, and provide it as an input to the constraint function hence (also see code above);

function [J,sol]=costcenterroad(C,lp,xref,yref,T,rw)

function [c,ceq]=nonlcon(C,lp,rw,xref,yref,sol)

However, Matlab will tell that "sol" is unknown. I'am guessing that "sol" is not an output when the function `costcenterroad` is called. I also used 'sol' as a global variable, but this is not very elegant and fast.

Does anyone have any suggestions how to do this? Your help will be greatly appreciated!