欢迎来到天天文库
浏览记录
ID:45679086
大小:51.81 KB
页数:5页
时间:2019-11-16
《DFP算法及Matlab程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、作业二用DFP算法求解,取,。一、求解:(1)求迭代点x1令,得的极小值点,所以得:于是,由DFP修正公式有下一个搜索方向为(2)求迭代点x2令,得的极小值点于是得:,所以:,因Hesse阵为正定阵,为严格凸函数,所以为整体极小点。二、DFP算法迭代步骤如下:(1)给定初始点,初始矩阵(通常取单位阵),计算,令k=0,给定控制误差。(2)令。(3)由精确一维搜索确定步长,(4)令。(5)若,则停;否则令,。(6)由DFP修正公式得。令k=k+1,转步骤(2)三、DFP算法matlab程序实现function[best_x,best_fx,count]=DFP
2、(x0,ess)symsx1x2t;f=x1*x1+2*x2*x2-2*x1*x2-4*x1;fx=diff(f,x1);%求表达式f对x1的一阶求导fy=diff(f,x2);%求表达式f对x2的一阶求导fi=[fxfy];%构造函数f的梯度函数%初始点的梯度和函数值g0=subs(fi,[x1x2],x0);f0=subs(f,[x1x2],x0);H0=eye(2);%输出x0,f0,g0x0f0g0xk=x0;fk=f0;gk=g0;Hk=H0;k=1;while(norm(gk)>ess)%迭代终止条件
3、
4、gk
5、
6、<=essdisp('******
7、******************************************************')disp(['第'num2str(k)'次寻优'])%确定搜索方向pk=-Hk*gk';%由步长找到下一点x(k+1)xk=xk+t*pk';f_t=subs(f,[x1x2],xk);%构造一元搜索的一元函数φ(t)%由一维搜索找到最优步长df_t=diff(f_t,t);tk=solve(df_t);iftk~=0tk=double(tk);elsebreak;end%计算下一点的函数值和梯度xk=subs(xk,t,tk)fk=subs(f,
8、[x1x2],xk)gk0=gk;gk=subs(fi,[x1x2],xk)%DPF校正公式,找到修正矩阵yk=gk-gk0;sk=tk*pk';Hk=Hk-(Hk*yk'*yk*Hk)/(yk*Hk*yk')+sk'*sk/(yk*sk')%修正公式k=k+1;enddisp('结果如下:')best_x=xk;%最优点best_fx=fk;%最优值count=k-1;三、程序执行结果在命令窗口输入以下命令:>>x0=[11];ess=1e-6;[best_x,best_fx,count]=DFP(x0,ess)程序运行结果:x0=11f0=-3g0=-4
9、2************************************************************第1次寻优xk=2.00000.5000fk=-5.5000gk=-1-2Hk=0.84000.38000.38000.4100************************************************************第2次寻优xk=42fk=-8gk=00Hk=1.00000.50000.50000.5000结果如下:best_x=42best_fx=-8count=2可以看到,最优点,迭代次数2次,与前面
10、结果一致。
此文档下载收益归作者所有