MATLAB: Additional output with fsolve

fsolve

I'm asking what seems to be an identical question to this one. Specifically, I simply want to output additional variables after fsolve completes its task. Suppose that I am using fsolve with this function:
function [F G] = myfunc(x)
F = x^2;
G = 2;
I will be using fsolve with
xsol = fsolve(@(x)myfunc(x), guess);
This will give me the solution. However, if I want the value of G, I need to call myfunc again
[F, G] = myfunc(xsol)
I'd like to NOT evaluate myfunc again. How do I get fsolve to also output additional variables? I'd like to do so without global variables or outputting to files…

Best Answer

Is the G you're really calculating costly to evaluate? If so, I'd suggest a different approach. Define your function as
function [F G] = myfunc(x)
F = x^2;
if nargout > 1
G = 2;
end
so it doesn't evaluate G during the solving (which would involve, generally, several calls to myfunc ). Note that you can use a more compact notation:
xsol = fsolve(@myfunc,guess);
Then go ahead and calculate G once:
[F G] = myfunc(x)
You'll probably save a lot more computation with this approach.