Can I see the parameters that fminunc generate in each try of the optimization search?

1 view (last 30 days)
Hi,
I am using fminunc to optimize a likelihood function which inside has other functions which makes the problem a bit complicated.
When I try the values of all the matrices inside this likelihood with the initial parameters all is correct. With this I mean that I have correct covariance matrices, no zero determinants etc.
However, when I start the optimization process at a certain parameter values I get a singular matrix in one of the equations inside the likelihood.
Therefore, what I would like to do is to observe the vector of parameters being chosen by the fminunc in the iterations.
Is there a way to do this?
Thanks in advance.
Barbara

Accepted Answer

Alan Weiss
Alan Weiss on 14 May 2014
You can write an output function to obtain almost everything you want. However, fminunc takes finite difference steps that the output function will not report; output functions get called at each iteration, not at each step in the process.
If what you really want is to have the solver continue past a singularity, you might try using a different solver. The fmincon interior-point and sqp algorithms are robust to some failures in function evaluation. You need a constraint to run fmincon; feel free to use lb = -Inf, which fmincon accepts as a constraint but which has no bearing on the solution.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation

More Answers (2)

Barbara
Barbara on 14 May 2014
Thanks a lot! I will dig into this.

Barbara
Barbara on 15 May 2014
Dear Alan,
so I have dived into this issue and I found that it is quite simple to get the outputs of each iteration. For the case of the likelihood values at each iteration inside the fminsearch (for instance) (it is a simple change of definition for the parameters case) things goes like this:
//create empty matrix global_likelihood_vector = [];
//Settings and call to "fminsearch" ... ...
function [current_likelihood] = myLikelihood(x);
//Calculate likelihood
current_likelihood = ...
//Concatenate current likelihood to vector
//of all likelihoods
global_likelihood_vector = [global_likelihood_vector ; current_likelihood];
end;
And thats it :)

Community Treasure Hunt

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

Start Hunting!