编辑: You—灰機 | 2015-12-11 |
x2'
),title('
Minimization of the Banana function'
) contour(xx,yy,meshd,conts), hold on plot(-1.9,2,'
ro'
),text(-1.9,2,'
Start Point'
) plot(1,1,'
ro'
),text(1,1,'
Solution'
) %优化程序段开始.x0=[-1.9,2];
%赋初值.l=1;
while l %while 语句是可以重复运行下面的程序段,直至l=0退出循环.clc %清除命令窗口的全体内容 . %以下程序段是在命令窗口显示相应的文字内容.disp('
'
) disp('
Choose any of the following methods to minimize the … banana function'
) disp('
'
) disp('
UNCONSTRAINED: 1) BFG direction '
) disp('
2) DFP direction'
) disp('
3) Steepest Descent direction'
) disp('
4)
33 Simplex Search'
) disp('
0) Quit'
) method=input('
Select method : '
);
% input 从键盘输入控制变量method 数据.switch method %Switch体开始.case
0 %当method= 0, 终止程序.hold off disp('
End of demo'
) break %break 指令:中止程序.case
1 %当method= 1, 采用BFGS法.clf,hold on %每一个case中重新画等值线图,下 面的程序段是重新画图.xlabel('
x1'
),ylabel('
x2'
), title('
Minimization of the Banana function'
) contour(xx,yy,meshd,conts) plot(-1.9,2,'
ro'
), text(-1.9,2,'
Start Point'
) plot(1,1,'
ro'
), text(1,1,'
Solution'
) % 这里是学习的重点:OPTIONS是控制fminunc和fminsearch指令的重要参数,%用 optimset('
属性'
, '
属性值'
,… )指令改变设置,可以容易地控制算法.OPTIONS=optimset('
LargeScale'
,'
off'
);
%fminunc默认的大规模算法是 信赖域方法 ,这是一种有效的算法;
%将 LargeScale 的属性设置为off时,fminunc 的默认中等规模的算法就是BFGS方法.OPTIONS = optimset(OPTIONS,'
gradobj'
,'
on'
);
%使用解析梯度.%定 义梯度函数和画图函数banplot6_4. GRAD=inline('
[100*(4*x(1)^3-4*x(1)*x(2))+2*x(1)-2;
… 100*(2*x(2)-2*x(1)^2);
banplot6_4(x)]'
);
f=inline('
100*(x(2)-x(1)^2)^2+(1-x(1))^2'
);
%定义目标函数.disp('
[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);
'
);
34 % ( 调用fminunc指令,输 出x,fval分别为最优点和最优函数值,exitflag 和output % 提供算法的一些信息,读 者可在程序结束后,键 入output或exitflag查看这些信息)[x,fval,exitflag,output] = fminunc({f,GRAD},x0,OPTIONS);
hold off disp('
'
) disp('
Strike any key for menu'
) pause case
2 %当method= 2, 采用DFP法.clf, xlabel('
x1'
),ylabel('
x2'
), title('
Minimization of the Banana function'
) contour(xx,yy,meshd,conts), hold on plot(-1.9,2,'
ro'
), text(-1.9,2,'
Start Point'
) plot(1,1,'
ro'
), text(1,1,'
Solution'
) OPTIONS=optimset('
LargeScale'
,'
off'
);
OPTIONS = optimset(OPTIONS,'
gradobj'
,'
on'
);
OPTIONS=optimset(OPTIONS,'
HessUpdate'
,'
dfp'
);
% 将HessUpdate属性设置为dfp就使fminunc指令采用DFP 法.GRAD=inline('
[100*(4*x(1)^3-4*x(1)*x(2))+2*x(1)-2;
… 100*(2*x(2)-2*x(1)^2);
banplot6_4(x)]'
);
f=inline('
100*(x(2)-x(1)^2)^2+(1-x(1))^2'