1、作业二 用 DFP 算法求解 ,取 ,121214)(minxxf T10。10H一、求解: TTTgHpgxxxg )2,4(,)24(,)42,2() 000211 (1 ) 求迭代点 x1令 ,得 的极小值点 ,3)()200pf )(010所以得: .)4,(,)5.,1(2,100010 TTgyxs 于是,由 DFP 修正公式有 4138001 syHTT下一个搜索方向为 gp6,8511(2 ) 求迭代点 x2令 ,得 的极小值点.4)()211xf )(1541于是得: ,所以: ,TTgp0,(,22 8,)2(fxT因 Hesse 阵 为正定阵, 为严格凸函数,所以 为整体
2、 Gx4)( )(f x极小点。二、DFP 算法迭代步骤如下:(1 )给定初始点 ,初始矩阵 (通常取单位阵) ,计算 ,令 k=0,给定控制误0x0H0g差 。(2 )令 。kkgp(3 )由精确一维搜索确定步长 ,k)(min)(0kkk pxfpxf (4 )令 。kkpx1(5 )若 ,则 停;g1否则令 , 。kkxskgy1(6 )由 DFP 修正公式得 。令 k=k+1,转步骤(2)1H3、 DFP 算法 matlab 程序实现function best_x,best_fx,count=DFP(x0,ess)syms x1 x2 t;f=x1*x1+2*x2*x2-2*x1*x2
3、-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,g0x0f0g0xk=x0;fk=f0;gk=g0;Hk=H0;k=1;while(norm(gk)ess)%迭代终止条件 |gk| x0=1 1;ess=1e-6;best_x,best_fx,count=DFP(x0,ess)程序运行结果:x0 =1 1f0 =-3g0 =-4 2*第 1 次寻优xk =2.0000 0.5000fk =-5.5000gk =-1 -2Hk =0.8400 0.38000.3800 0.4100*第 2 次寻优xk =4 2fk =-8gk =0 0Hk =1.0000 0.50000.5000 0.5000结果如下:best_x =4 2best_fx =-8count =2可以看到,最优点 ,迭代次数 2 次,与前面结果一致。8,)24(fxT