Make optimiser more robust to upper and lower bounds

1 view (last 30 days)
Daniel Totonjian
Daniel Totonjian on 26 Jan 2022
Edited: Matt J on 27 Jan 2022
I am using a nonlinear least squares optimiser lsqnonlin() to fit a Voigt function to my data.
I am finding however that the optimiser is VERY sensitive to the lower and upper bounds I provide to the optimiser, with incremental changes in these bounds resulting in large changes in the quality of the fit. I often have to manually change these bounds in order to achieve a quality fit which is quite labour intensive however when I do find the optimum upper and lower bounds, the quality of the fit is very good.
As I don't want to write an optimiser for my optimiser, is there a way to make the optimiser more robust to changes in the bounds or does the fault lie in the function which I am trying to fit?
For reference, I am using a slightly modified version of this package: https://au.mathworks.com/matlabcentral/fileexchange/57603-voigt-line-shape-fit?s_tid=srchtitle

Answers (2)

Matt J
Matt J on 26 Jan 2022
Edited: Matt J on 27 Jan 2022
The problem might be due to insufficient or low quality data. The optimizer is therefore relying more on the bounds than the physical model to reach good estimates of the parameters.

Alan Weiss
Alan Weiss on 27 Jan 2022
Another thing to try, if you have Global Optimization Toolbox, is MultiStart along with lsqnonlin. For an example, see MultiStart Using lsqcurvefit or lsqnonlin.
Alan Weiss
MATLAB mathematical toolbox documentation

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by