2022年DFP算法及Matlab程序.pdf
DFP算法及 Matlab 程序作业二用DFP算法求解1212221422)(minxxxxxxf,取Tx110,10010H。一、求解 : TTTgHpgxxxxxg)2,4(,)2 ,4(,)42,422()(00002121(1)求迭代点x1 令32040)()(2000pxf,得)(0的极小值点410, 所以得 :.)4, 3(,)5 .0, 1(,2, 1,5.0,201001010001TTTTggyxxsgpxx于就是 ,由 DFP修正公式有4138388410010000000000001syssyHyHyyHHHTTTT下一个搜索方向为TgHp6, 851111(2)求迭代点x2 令5 .5458)()(2111pxf,得)(1的极小值点541于就是得 :TTgpxx)0,0(,2,421112,所以 :8,)2,4(2fxxT, 因 Hesse阵TGxG4222)(为正定阵 ,)(xf为严格凸函数,所以x为整体极小点。二、 DFP算法迭代步骤如下: (1)给定初始点0 x,初始矩阵0H(通常取单位阵),计算0g,令 k=0,给定控制误差。(2)令kkkgHp。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 5 页 - - - - - - - - - - DFP算法及 Matlab 程序(3)由精确一维搜索确定步长k,)(min)(0kkkkkpxfpxf(4)令kkkkpxx1。(5)若kg,则1kxx停; 否则令kkkxxs1,kkkggy1。(6)由 DFP修正公式得1kH。令 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 x0f0g0 xk=x0;fk=f0;gk=g0;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 5 页 - - - - - - - - - - DFP算法及 Matlab 程序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 1 f0 = -3 g0 = -4 2 * 第 1 次寻优xk = 2、0000 0、5000 fk = -5、5000 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 5 页 - - - - - - - - - - DFP算法及 Matlab 程序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 可以瞧到 ,最优点8,)2,4(fxT,迭代次数2 次,与前面结果一致。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 5 页 - - - - - - - - - -