Some optimization problems have very simple surfaces to optimize. The optimizer simply proceeds downhill to the unique minimizer and returns happily - all is good in the world. Sadly, more often the objective function has multiple local minimizers, you as the user provide poor starting values, and the optimization returns what is essentially junk for a solution. My response would typically be that you needed to provide better starting values. At that time, I'd also try to explain the idea of a basin of attraction for any minimum. Its the set of points that when used as starting values, will allow a given optimizer to converge to a given local minimum.
Starting values that lie in the basin of attraction of the global minimizer are not always that easy to choose for all problems. One solution is to use a randomly multiply started optimizer. Thus, generate lots of starting values, then start the optimizer from each such point. Or start from only the very best of those sampled points.
RMSEARCH puts a simple framework around this task, automatically generating random samples for you, testing which result in the best initial points, then starting your chosen optimizer at that set of points, finally compiling the results.
RMSEARCH can be used with 7 different optimizers:
fminbnd, fmincon, fminsearch, fminsearchbnd, fminsearchcon, fzero, lsqnonlin.
Fmincon requires the optimization toolbox, while fminsearchbnd and fminsearchcon can be found right here on the file exchange: