MATLAB: How to access the current iteration number in the program where we supply the non-linear equations,F =0 and the Jacobian for FSOLVE

fsolveiterationnonlinearoptimization

For example, in the sample code for fsolve:
fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0)
where :
function F = root2d(x)
current_iteration= ?
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
In the code root2d, if my non linear problem formulation depends on the current iteration, how can i access the present iteration number?
I understand that once all the iterations have been completed, we can get the total number of iterations for convergence using 'output paramter' but this is not what i want.

Best Answer

Something like this will work
global iter_number % global variable for a quick example, i recommend creating a handle class object
iter_number = 0;
fun = @root2d;
x0 = [0,0];
opts = optimoptions('fsolve', 'OutputFcn', @outputFcn);
x = fsolve(fun,x0, opts);
root2d(x)
function F = root2d(x)
global iter_number
current_iteration = iter_number
F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
end
function stop = outputFcn(x, optimValues, state)
global iter_number
iter_number = optimValues.iteration;
stop = 0;
end