Global Minimization of 1D Equation
Customer provided this example where he was puzzled why fmincon had a hard time finding the mimimum value.
Copyright (c) 2010, The MathWorks, Inc. All rights reserved.
Contents
Equation to minimize
f = @(x) x.*sin(x) + x.*cos(2.*x);
Bounds
lb = 0; ub = 10;
Find Minimum and Plot
x0 = [0 1 3 6 8 10]; hf = figure; for i=1:6 x(i) = fmincon(f,x0(i),[],[],[],[],lb,ub,[],... optimset('Algorithm','SQP','Disp','none')); subplot(2,3,i) ezplot(f,[lb ub]); hold on plot(x0(i),f(x0(i)),'k+') plot(x(i),f(x(i)),'ro') hold off title(['Starting at ',num2str(x0(i))]) if i == 1 || i == 4 ylabel('x sin(x) + x cos(2 x)') end end

A common GOTCHA!
This problem is a 1D bounded minimization problem. There is a specialized solver for this type of problem: fminbnd.
x2 = fminbnd(f,lb,ub) figure ezplot(f,[lb ub]); hold on plot(x2,f(x2),'ro') hold off ylabel('x sin(x) + x cos(2 x)') title({'Solution using fminbnd.','Required no starting point!'})
x2 = 4.7954

Leason Learned: Use the appropriate solver for your problem type!
But what if fmincon was the only choice?
Use globalSearch or MultiStart
problem = createOptimProblem('fmincon','objective',f,'x0',x0(1),'lb',lb,... 'ub',ub,'options',optimset('Algorithm','SQP','Disp','none')); gs = GlobalSearch; xgs = run(gs,problem); figure ezplot(f,[lb ub]); hold on plot(xgs,f(xgs),'ro') hold off ylabel('x sin(x) + x cos(2 x)') title('Solution using globalSearch.')
GlobalSearch stopped because it analyzed all the trial points. All 23 local solver runs converged with a positive local solver exit flag.
