DFP算法及Matlab程序

2018-12-21 11:47

22作业二 用DFP算法求解minf(x)?x1?2x2?2x1x2?4x1,取x0??11?,

T?10?H0???01??。

??一、求解:

g(x)?(2x1?2x2?4,?2x1?4x2)T,g0?(?4,2)T,p0??H0g0?(4,?2)T

(1)求迭代点x1

令?0(?)?f(x0??p0)?40?2?20??3,得?0(?)的极小值点?0?所以得:

1, 4x1?x0??0p0??2,0.5?,g1???1,?2?,TTs0?x1?x0?(1,?0.5),y0?g1?g0?(3,?4).TT

TTH0y0y0H0s0s01?8438???于是,由DFP修正公式有H1?H0? ??TT??y0H0y0y0s0100?3841?下一个搜索方向为p1??H1g1?(2)求迭代点x2

令?1(?)?f(x1??p1)?1?8,6?T 5824??4??5.5,得?1(?)的极小值点?1? 55T于是得:x2?x1??1p1??4,2?,g2?(0,0)T,所以:x??x2?(4,2)T,f???8,

?2?2???xf(x)因Hesse阵G(x)?G??为正定阵,为严格凸函数,所以为整体 ??24???极小点。

二、DFP算法迭代步骤如下:

(1)给定初始点x0,初始矩阵H0(通常取单位阵),计算g0,令k=0,给定控制误差?。

(2)令pk??Hkgk。

(3)由精确一维搜索确定步长?k,f(xk??kpk)?minf(xk??pk)

??0T(4)令xk?1?xk??kpk。 (5)若gk??,则x??xk?1停;

否则令sk?xk?1?xk ,yk?gk?1?gk 。 (6)由DFP修正公式得Hk?1。令k=k+1,转步骤(2)

三、DFP算法matlab程序实现

function [best_x,best_fx,count]=DFP(x0,ess) syms x1x2t;

f=x1*x1+2*x2*x2-2*x1*x2-4*x1;

fx=diff(f,x1);%求表达式f对x1的一阶求导 fy=diff(f,x2);%求表达式f对x2的一阶求导 fi=[fx fy];%构造函数f的梯度函数 %初始点的梯度和函数值

g0=subs(fi,[x1 x2],x0); f0=subs(f,[x1 x2],x0); H0=eye(2); %输出x0,f0,g0 x0 f0 g0 xk=x0; fk=f0; gk=g0; Hk=H0; k=1;

while(norm(gk)>ess)%迭代终止条件||gk||<=ess

disp('************************************************************') disp(['第' num2str(k) '次寻优']) %确定搜索方向 pk=-Hk*gk'; %由步长找到下一点x(k+1) xk=xk+t*pk';

f_t=subs(f,[x1 x2],xk); %构造一元搜索的一元函数φ(t) %由一维搜索找到最优步长 df_t=diff(f_t,t); tk=solve(df_t); if tk~=0

tk=double(tk); else break; end

%计算下一点的函数值和梯度 xk=subs(xk,t,tk) fk=subs(f,[x1 x2],xk) gk0=gk;

gk=subs(fi,[x1 x2],xk) %DPF校正公式,找到修正矩阵 yk=gk-gk0; sk=tk*pk';

Hk=Hk-(Hk*yk'*yk*Hk)/(yk*Hk*yk')+sk'*sk/(yk*sk')%修正公式 k=k+1; end

disp('结果如下:') best_x=xk;%最优点 best_fx=fk;%最优值 count=k-1;

四、程序执行结果

在命令窗口输入以下命令: >> x0=[1 1]; ess=1e-6;

[best_x,best_fx,count]=DFP(x0,ess)

程序运行结果: x0 =

1 1 f0 = -3 g0 =

-4 2

************************************************************ 第1次寻优 xk =

2.0000 0.5000 fk = -5.5000 gk =

-1 -2 Hk =

0.8400 0.3800 0.3800 0.4100

************************************************************ 第2次寻优 xk =

4 2 fk = -8 gk =

0 0 Hk =

1.0000 0.5000 0.5000 0.5000

结果如下:

best_x = 4 2 best_fx = -8 count = 2

可以看到,最优点??(4,2)T,???8,迭代次数2次,与前面结果一致。 xf


DFP算法及Matlab程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:文学概论思考题 参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: