使用matlab查找全局最小值?

时间:2015-05-20 05:11:02

标签: matlab modeling data-fitting

我正在尝试使用以下代码找到峰值函数的全局最小值:

    opts = optimoptions(@fmincon,'Algorithm','interior-point');
problem = createOptimProblem('fmincon','objective',...
     @(x) ...
     3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ... 
   - 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ... 
   - 1/3*exp(-(x(1)+1).^2 - x(2).^2),...
     'x0',[0,0],'lb',[-Inf,-Inf],'ub',[Inf,Inf],'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem);
x

我得到了:

x =

    4.2454    2.3345

这不应该是正确的答案。 (根据在线教程) enter image description here

我错了什么?谢谢。

1 个答案:

答案 0 :(得分:2)

Matlab在区域[-3,3],[ - 3,3]中使用绑定约束的示例。如果您将代码更改为以下内容,则可以获得Matlab的答案

    problem = createOptimProblem('fmincon','objective',...
     @(x) ...
     3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ...
   - 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ...
   - 1/3*exp(-(x(1)+1).^2 - x(2).^2),...
     'x0',[0,0],'lb',[-3,-3],'ub',[3,3],'options',opts);

顺便说一下,如果你想解决一个无约束的问题,那就用fminunc代替。