编辑: 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'

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题
大家都在看的话题