目录

一.前沿

二.矫正公式

三.算法步骤

四.matlab程序实现

1.DFP算法封装函数

2.目标函数

3.目标函数梯度

4.主函数

5.运行结果与分析


一.前沿

DFP算法是由Davidon提出的,经过Fletccher和powell改进,故称之为DFP算法。DFP算法也是拟牛顿矫正的一种,目前,它是求解无约束问题最有效的算法之一。其实吧,就是给定一个初始点,根据矫正矩阵和梯度求出下一步的搜索方向,再由Armijo搜索准则求出步长(Armijo准则前面已经简述,现在不再赘述),得到步长和搜索方向之后重新计算新的初始点,若在这个新的点的梯度足够小(就是下降的足够小,一般精度都会给出)时,我们就可以停止运算,输出这个点的值做为近似最优解。

二.矫正公式

三.算法步骤

步0:确定终止误差e=(0~1),设初始点x0,参数=(0~1),=(0,0.5),初始对称正定阵H0=I(单位阵),令k=0

步1:计算gk=f(xk).若||gk||<=e,停算,输出xk作为最优解。否则,转步2

步2:计算搜索方向dk=-Hk*gk

步3:根据Armijo准则计算搜索步长:

用Armjio搜索技术求步长k=^mk,m的值从0开始,

若f(xk+ ^m*dk)<=f(xk)+*^m*gk'dk

则令 mk=m,步长k=^mk,若不满足上式,则m=m+1,直到满足上述不等式为止

其实就是用那个不等式求出m的值,然后用公式求出步长。

步4:令Xk+1=xk+ k*dk,即通过搜索方向和步长确定新的点

步5:根据上面的矫正公式求出新的Hk+1,转步1.

四.matlab程序实现

1.DFP算法封装函数

function [x,val,k]=dfp(x0,fun,gfun)
%功能:用DFP算法求解无约束问题
%输出:x,val,k分别表示近似最优解,近似最优值和迭代次数
%输入:x0,fun,gfun分别表示初始点,目标函数和目标函数的梯度
k=0;
maxk=5000;
rho=0.55;
sigma=0.4;
e=1e-5;%精度
n=length(x0);
Hk=eye(n);
while(k<maxk)gk=feval(gfun,x0);%求梯度if(norm(gk)<=e),break;end  %判断是否满足停止迭代dk=-Hk*gk;%确定搜索方向,这个公式课本有mk=0;m=0;%用Armijo准则确定步长while(m<20)if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk)mk=m;break;endm=m+1;endx=x0+dk*rho^mk;%根据初始点,搜索方向和步长求出新的搜索点g=feval(gfun,x);%这个就是新的初始点的梯度sk=x-x0;%新的点减去原来的点yk=g-gk;%新的点的梯度%更新Hkif(sk'*yk>0)Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(sk'*yk);%公式endx0=x;k=k+1;
end
x=x0;%break跳出后输出x
val=feval(fun,x);
end

2.目标函数

function f=fun(x)
%需要求解最优值的目标函数
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
end

3.目标函数梯度

function  g=gfun(x)
%目标函数的梯度
g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
end

4.主函数

clear all
x0=[-1.2,1]';%设置的搜索初始点
[x,val,k]=dfp(x0,'fun','gfun');%调用函数
disp('迭代的次数k为:')
disp(k)
disp('近似最优解x为:')
disp(x)
disp('此时f(x)的值为:')
disp(val)

5.运行结果与分析

多试几个初始点后,就可以看到DFP算法的计算效率比不上BFGS算法。

DFP算法及其matlab实现相关推荐

  1. matlab dfp法,DFP算法及Matlab程序.docx

    DFP算法及Matlab程序 作业二 用DFP算法求解,取,.一.求解:求迭代点x1令,得的极小值点,所以得:于是,由DFP修正公式有下一个搜索方向为求迭代点x2令,得的极小值点于是得:,所以:,因H ...

  2. dfp算法例题matlab,数学软件 之 基于MATLAB的DFP算法

    DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...

  3. matlab dfp法,DFP算法及Matlab程序(最新整理)

    <DFP算法及Matlab程序(最新整理)>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序(最新整理)(7页珍藏版)>请在人人文库网上搜索. 1.作 业 二用 ...

  4. matlab dfp法,DFP算法及Matlab程序Word版

    <DFP算法及Matlab程序Word版>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序Word版(6页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...

  5. dfp matlab源程序,DFP算法及Matlab程序[精校版本]

    <DFP算法及Matlab程序[精校版本]>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序[精校版本](4页珍藏版)>请在人人文库网上搜索. 1.作业二 用DF ...

  6. DFP算法求极值点matlab,DFP算法及Matlab程序

    作业二 用DFP 算法求解1212221422)(m in x x x x x x f --+=,取()T x 110=,??? ? ??=10010H . 一.求解: T T T g H p g x ...

  7. matlab dfp法,DFP算法及Matlab程序

    作业二 用DFP 算法求解1212221422)(min x x x x x x f --+=,取()T x 110=,??? ? ??=10010H . 一.求解: T T T g H p g x ...

  8. 拟牛顿法-DFP算法举例与matlab代码实现(转载+整理)

    算法来自于[1],如下: 值得一提的是,[1]中的python代码实现了对Rosenbrock函数的求极值测试. 例子来自于[2]: --------------------------------- ...

  9. dfp方法例题_数学软件 之 基于MATLAB的DFP算法

    DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...

最新文章

  1. 【题解】 bzoj1260: [CQOI2007]涂色paint (区间dp)
  2. C++中头文件的命名规则
  3. 《写给大家看的设计书:实例与创意(修订版)》—1你已经知道多少了?
  4. Android开发之listview添加头布局(header)和脚布局(footer)的方法
  5. Hibernate generator小结
  6. 加密保护软件 WinLicense常见问题整理大全(四)
  7. Python:代码规范和命名规范
  8. Vim 实用技术,第 1 部分: 实用技巧(转)
  9. ai人工智能_相信AI?
  10. 三方支付 微信支付 支付宝支付 银联支付 分享
  11. 坚果云Outlook邮件管理体系畅享高效办公生活
  12. 19.首页异步数据的获取
  13. 一文尽览阿里小程序云应用!你想知道的都在这里!
  14. 小程序转uni-app——onLoad语法转换
  15. 苹果切换输入法_最新破解朋友圈折叠的多种方法!安卓和苹果通用!亲测有效!...
  16. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML
  17. 【易通慧谷】科技赋能金融,三新理念全面解读新金融
  18. adb、logcat
  19. fusion 谷歌空间_Google Fusion Tables的用例
  20. Java OOP 9 Java I/O

热门文章

  1. matlab手机版论坛,首页 - MATLAB中文论坛
  2. 微信小程序二维码以及如何在公众号上显示小程序
  3. 职场基本三原则——安全、进步、收益
  4. 腾讯2014校园招聘笔试试题
  5. JAVASE的学习笔记(四)(抽象类,代码块,接口)
  6. c语言录取分数线,2017全国各地高考录取分数线一览
  7. 基于C++OpenGL实现的小桌茶壶图形绘制
  8. android adk 国内镜像,Windows ADK笔记一:制作自己的Winpe镜像(2)
  9. 国产USB HUB芯片,GM8220,USB2.0集线器GL850
  10. 法律如何看待区块链资产