一维方程的全局极小化

客户提供了这个例子,他很困惑为什么fmincon很难找到最小值。

版权所有(c) 2010, The MathWorks, Inc。版权所有。

内容

最小化方程

F = @(x) x.*sin(x) + x.*cos(2.*x);

界限

Lb = 0;Ub = 10;

求最小值和绘图

X0 = [0 1 3 6 8 10];Hf =图;我= 1:6 x(我)= fmincon (f, x0(我 ),[],[],[],[], 磅,乌兰巴托,[],...optimset (“算法”“SQP”“Disp”“没有”));Subplot (2,3,i) ezplot(f,[lb ub]);持有情节(x0 (i), f (x0 (i)),k +的)情节(x (i), f (x (i))“罗”)举行标题([“从……开始”num2str (x0 (i))))如果I == 1 || I == 4 ylabel(x sin(x) + x cos(2 x)结束结束

一个普通的陷阱!

这是一个一维有界极小化问题。这类问题有专门的解决方案:fminbnd

X2 = fminbnd(f,lb,ub) figure ezplot(f,[lb ub]);持有情节(x2, f (x2),“罗”)举行ylabel (x sin(x) + x cos(2 x))标题({“使用fminbnd解决方案。”“不需要起点!”})
X2 = 4.7954

经验教训:使用适合你的问题类型的解决方案!

但是如果fmincon这是唯一的选择吗?

使用globalSearch或MultiStart

问题= createOptimProblem(“fmincon”“目标”f“x0”x0 (1),“磅”磅,...乌兰巴托的乌兰巴托,“选项”optimset (“算法”“SQP”“Disp”“没有”));gs = GlobalSearch;XGS = run(gs,problem);图ezplot(f,[lb ub]);持有情节(xg f (xg),“罗”)举行ylabel (x sin(x) + x cos(2 x))标题(“使用globalSearch的解决方案。”
GlobalSearch停止了,因为它分析了所有的试验点。所有23个本地求解器运行都收敛于一个积极的本地求解器退出标志。