使用Python实现牛顿法求极值


Posted in Python onFebruary 10, 2020

对于一个多元函数 使用Python实现牛顿法求极值 用牛顿法求其极小值的迭代格式为

使用Python实现牛顿法求极值

其中 使用Python实现牛顿法求极值 为函数 使用Python实现牛顿法求极值 的梯度向量, 使用Python实现牛顿法求极值 为函数 使用Python实现牛顿法求极值 的Hesse(Hessian)矩阵。

上述牛顿法不是全局收敛的。为此可以引入阻尼牛顿法(又称带步长的牛顿法)。

我们知道,求极值的一般迭代格式为

使用Python实现牛顿法求极值

其中 使用Python实现牛顿法求极值 为搜索步长,使用Python实现牛顿法求极值 为搜索方向(注意所有的迭代格式都是先计算搜索方向,再计算搜索步长,如同瞎子下山一样,先找到哪个方向可行下降,再决定下几步)。

取下降方向 使用Python实现牛顿法求极值 即得阻尼牛顿法,只不过搜索步长 使用Python实现牛顿法求极值 不确定,需要用线性搜索技术确定一个较优的值,比如精确线性搜索或者Goldstein搜索、Wolfe搜索等。特别地,当 使用Python实现牛顿法求极值 一直取为常数1时,就是普通的牛顿法。

以Rosenbrock函数为例,即有

使用Python实现牛顿法求极值

于是可得函数的梯度

使用Python实现牛顿法求极值

函数使用Python实现牛顿法求极值 的Hesse矩阵为

使用Python实现牛顿法求极值

编写Python代码如下(使用版本为Python3.3):

"""
Newton法
Rosenbrock函数
函数 f(x)=100*(x(2)-x(1).^2).^2+(1-x(1)).^2
梯度 g(x)=(-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)),200*(x(2)-x(1)^2))^(T)
"""

import numpy as np
import matplotlib.pyplot as plt

def jacobian(x):
 return np.array([-400*x[0]*(x[1]-x[0]**2)-2*(1-x[0]),200*(x[1]-x[0]**2)])

def hessian(x):
 return np.array([[-400*(x[1]-3*x[0]**2)+2,-400*x[0]],[-400*x[0],200]])

X1=np.arange(-1.5,1.5+0.05,0.05)
X2=np.arange(-3.5,2+0.05,0.05)
[x1,x2]=np.meshgrid(X1,X2)
f=100*(x2-x1**2)**2+(1-x1)**2; # 给定的函数
plt.contour(x1,x2,f,20) # 画出函数的20条轮廓线


def newton(x0):

 print('初始点为:')
 print(x0,'\n')
 W=np.zeros((2,10**3))
 i = 1
 imax = 1000
 W[:,0] = x0 
 x = x0
 delta = 1
 alpha = 1

 while i<imax and delta>10**(-5):
  p = -np.dot(np.linalg.inv(hessian(x)),jacobian(x))
  x0 = x
  x = x + alpha*p
  W[:,i] = x
  delta = sum((x-x0)**2)
  print('第',i,'次迭代结果:')
  print(x,'\n')
  i=i+1
 W=W[:,0:i] # 记录迭代点
 return W

x0 = np.array([-1.2,1])
W=newton(x0)

plt.plot(W[0,:],W[1,:],'g*',W[0,:],W[1,:]) # 画出迭代点收敛的轨迹
plt.show()

上述代码中jacobian(x)返回函数的梯度,hessian(x)返回函数的Hesse矩阵,用W矩阵记录迭代点的坐标,然后画出点的搜索轨迹。

可得输出结果为

初始点为:
[-1.2 1. ] 

第 1 次迭代结果:
[-1.1752809 1.38067416] 

第 2 次迭代结果:
[ 0.76311487 -3.17503385] 

第 3 次迭代结果:
[ 0.76342968 0.58282478] 

第 4 次迭代结果:
[ 0.99999531 0.94402732] 

第 5 次迭代结果:
[ 0.9999957 0.99999139] 

第 6 次迭代结果:
[ 1. 1.]

即迭代了6次得到了最优解,画出的迭代点的轨迹如下:

使用Python实现牛顿法求极值

由于主要使用了Python的Numpy模块来进行计算,可以看出,代码和最终的图与Matlab是很相像的。

以上这篇使用Python实现牛顿法求极值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python自动安装pip
Apr 24 Python
python 全文检索引擎详解
Apr 25 Python
python如何为创建大量实例节省内存
Mar 20 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
详解python使用turtle库来画一朵花
Mar 21 Python
pandas.cut具体使用总结
Jun 24 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 #Python
TensorFlow 多元函数的极值实例
Feb 10 #Python
给 TensorFlow 变量进行赋值的方式
Feb 10 #Python
Python 中的pygame安装与配置教程详解
Feb 10 #Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 #Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 #Python
Python的pygame安装教程详解
Feb 10 #Python
You might like
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
一个数据采集类
2007/02/14 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
php阳历转农历优化版
2016/08/08 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
Less 安装及基本用法
2018/05/05 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
高效使用Python字典的清单
2018/04/04 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python docx库用法示例分析
2019/02/16 Python
python的debug实用工具 pdb详解
2019/07/12 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
高一政治教学反思
2014/01/28 职场文书
竞聘上岗演讲
2014/05/19 职场文书
校庆活动策划方案
2014/06/05 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
面试通知单大全
2015/04/20 职场文书
被告代理词范文
2015/05/25 职场文书
离婚律师函范本
2015/05/27 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书