拟牛顿法过程如下:

DFP修正公式:

步长a根据线性搜索得出,也可以根据公式得出,证明如下:

代码如下:

import numpy as np
import sympy as sp
def jacobian(f,x):#雅可比矩阵,求一阶导数a,b=np.shape(x)#判断变量维度x1,x2=sp.symbols('x1 x2')#定义变量,如果多元的定义多元的x3=[x1,x2]#将1变量放入列表中,方便查找和循环。有几个变量放几个df=np.array([[0.00000],[0.00000]])#定义一个空矩阵,将雅可比矩阵的值放入,保留多少位小数,小数点后面就有几个0。n元变量就加n个[]for i in range(a):#循环求值df[i,0]=sp.diff(f,x3[i]).subs({x1:x[0][0],x2:x[1][0]})#求导和求值,n元的在subs后面补充return df
def hesse(f,x):#hesse矩阵a,b=np.shape(x)x1,x2=sp.symbols('x1 x2')x3=[x1,x2]G=np.zeros((a,a))for i in range(a):for j in range(a):G[i,j]=sp.diff(f,x3[i],x3[j]).subs({x1:x[0][0],x2:x[1][0]})#n元的在subs后面补充return Gdef dfp_newton(f, x, iters):"""实现DFP拟牛顿算法:param f: 原函数:param x: 初始值:param iters: 遍历的最大迭代次数:return: 最终更新完毕的x值"""a = 1#定义初始步长H = np.eye(2) # 初始化正定矩阵G=hesse(f,x)#初始化Hesse矩阵epsilon = 1e-3 # 一阶导g的第二范式的最小值(阈值)for i in range(1, iters):g = jacobian(f, x)if np.linalg.norm(g) < epsilon:xbest=[]for a in x:xbest.append(round(a[0]))#将结果从矩阵中输出放到列表中并四舍五入break
#下面的迭代公式d= -np.dot(H,g)a=-(np.dot(g.T,d)/np.dot(d.T,np.dot(G,d)))# 更新x值x_new = x +a*dprint("第 %d 次结果"%i)  print(x_new)g_new = jacobian(f, x_new)y = g_new - gs = x_new - x#更新HH=H+np.dot(s,s.T)/np.dot(s.T,y)-np.dot(H,np.dot(y,np.dot(y.T,H)))/np.dot(y.T,np.dot(H,y))#更新GG=hesse(f,x_new)x = x_newreturn xbestx1,x2=sp.symbols('x1 x2')#例子
x=np.array([[2],[1]])
f=2*x1**2+x2**2-4*x1+2
print(dfp_newton(f,x,20))

此代码可以求多元函数的DFP算法。运行结果如下:

可实现的python拟牛顿法的DFP算法相关推荐

  1. 拟牛顿法之DFP算法

    DFP算法(Davidon-Fletcher-Powell algorithm)一种秩2拟牛顿法.由戴维登(Davidon, W. D.)于1959年导出,并由弗莱彻(Fletcher,R.)和鲍威尔 ...

  2. 最优化学习笔记(十八)——拟牛顿法(4)DFP算法

    秩2算法可以保证在任意第kk步迭代下, 只要一维搜索是精确的,近似矩阵Hk\boldsymbol{H}_k就是正定的. DFP算法 令k=0k=0,选择初始点x(0)\boldsymbol{x}^{( ...

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

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

  4. 优化算法——拟牛顿法之BFGS算法

    一.BFGS算法简介 BFGS算法是使用较多的一种拟牛顿方法,是由Broyden,Fletcher,Goldfarb,Shanno四个人分别提出的,故称为BFGS校正. 同DFP校正的推导公式一样,D ...

  5. 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno...

    拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno 转载须注明出处:htt ...

  6. 无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)

    简介:最近在看逻辑回归算法,在算法构建模型的过程中需要对参数进行求解,采用的方法有梯度下降法和无约束项优化算法.之前对无约束项优化算法并不是很了解,于是在学习逻辑回归之前,先对无约束项优化算法中经典的 ...

  7. dfp matlab,MATLAB拟牛顿法之DFP与BFGS算法

    DFP算法原理 由于博主使用WPS编辑的文本,公式无法赋值粘贴,这里以截图的方法给出了推导过程.博主会上传该DOC文档. BFGS算法原理 matlab代码(DFP) syms x1 x2 f=@(x ...

  8. dfp 算法matlab,MATLAB拟牛顿法之DFP与BFGS算法

    DFP算法原理 由于博主使用WPS编辑的文本,公式无法赋值粘贴,这里以截图的方法给出了推导过程.博主会上传该DOC文档. BFGS算法原理 matlab代码(DFP) syms x1 x2 f=@(x ...

  9. matlab中bfgs的用法,MATLAB拟牛顿法之DFP与BFGS算法

    DFP算法原理 由于博主使用WPS编辑的文本,公式无法赋值粘贴,这里以截图的方法给出了推导过程.博主会上传该DOC文档. 牛顿法 阻尼牛顿法 BFGS算法原理 matlab代码(DFP) syms x ...

  10. 最优化学习笔记(十九)——拟牛顿法(5)BFGS算法

    一.BFGS算法的更新公式 为了推导BFGS算法,需要用到对偶或者互补的概念,前边已经讨论过hessian矩阵逆矩阵的近似矩阵需要满足以下条件: Hk+1Δg(i)=Δx(i)0≤i≤k \bolds ...

最新文章

  1. webpack 编译html模板文件
  2. Begin Your Service Journey
  3. Windows平板电脑将取代苹果在企业市场地位
  4. Linux之grep
  5. 大数据之mongodb -- (2)java集成 MongoDB 3.2,使用Spring-data-mongodb进行集成
  6. nginx源码分析—数组结构ngx_array_t
  7. android listview快速定位,【转】android中ListView的定位:使用setSelectionFromTop实现ListView的position的保持...
  8. P1368-工艺【最小表示法】
  9. 深入理解Python中的元类(metaclass)
  10. 使用frp进行内网穿透的实例
  11. 外媒晒一加7 Pro相机实拍样张:不惧极速F1赛车
  12. (免费领取名企Java面试题)volatile作用,指令重排相关
  13. 计算机网络知识学习(核心:网络协议)-- 运输层
  14. java基础--ObjectInputStream和ObjectInputStream类
  15. matlab傅里叶反变换举例,matlab傅里叶正逆变换详细说明+图例
  16. linux执行startx进入桌面黑屏,linux下误操作startx命令后,在登录界面进不去解决办法...
  17. [Aizu]-0558 Cheese [BFS]
  18. Java配置文件学习
  19. 谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复“谷歌BERT论文”下载彩标PDF论文)
  20. VB-Word添加页眉页脚

热门文章

  1. poythoncode-实战5--json 文件读取,文本文件,csv文件,存到系统中以大列表方式进行存储
  2. python 控制流
  3. python检测excel是否打开_Python: 如何判断远程服务器上Excel文件是否被人打开
  4. $.getjson异常信息提示_【Java视频教程】day24-异常??????
  5. python变量未定义_引入模块的全局变量未定义
  6. java 字符串拼接_不能用 + 拼接字符串? 这次我要吊打面试官!
  7. linux apache 停止命令,linux 下 apache启动、停止、重启命令
  8. Spring源码解读(1)-IOC容器BeanDefinition的加载
  9. iOS 中 常用的第三方库
  10. Linux JAVA JDK JRE 环境变量安装与配置