How can I extract data from fsolve results?

If I use fsolve and ('Display','iter') to display the function count, function value, norm of step, first-order optimality, and trust region radius, is there a way to create a vector containing values from this list?
options = optimoptions('fsolve','Display','iter')
fsolve(fun,x0,options)

Answers (1)

Ameer Hamza
Ameer Hamza on 20 Apr 2020
Edited: Ameer Hamza on 20 Apr 2020
You can use OutputFcn property to get information from each iteration. The following code shows a simple example. It records the value of the variable and the function value. Check here for more details: https://www.mathworks.com/help/releases/R2020a/optim/ug/output-function.html
opts = optimoptions('fsolve', 'OutputFcn', @myOutFcn, 'Display', 'off');
global X f_val
X = [];
f_val = [];
fsolve(@(x) x.^3-5, rand, opts);
function stop = myOutFcn(x, optimValues, state)
global X
global f_val
X = [X; x];
f_val = [f_val; optimValues.fval];
stop = 0;
end
I wrote the above code using a global variable for a quick demonstration. Global variables are somewhat unrecommended in MATLAB. You can look at John's answer here for alternate approaches: https://www.mathworks.com/matlabcentral/answers/510713-is-it-possible-to-store-the-intermediate-values-of-fmincon#answer_420002

1 Comment

Yes, this is the simplest possible way to get the information for each iteration of the fsolve().

Sign in to comment.

Products

Release

R2019b

Tags

Asked:

on 20 Apr 2020

Commented:

on 20 Apr 2020

Community Treasure Hunt

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

Start Hunting!