使用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生成验证码实例
Aug 21 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
Django rest framework工具包简单用法示例
Jul 20 Python
python实现的汉诺塔算法示例
Oct 23 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 Python
Python实现批量自动整理文件
Mar 16 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
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
深入浅析Python字符编码
2015/11/12 Python
pandas带有重复索引操作方法
2018/06/08 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Django 反向生成url实例详解
2019/07/30 Python
安装docker-compose的两种最简方法
2019/07/30 Python
简单介绍django提供的加密算法
2019/12/18 Python
python脚本后台执行方式
2019/12/21 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
加入学生会自荐书
2015/03/05 职场文书
消费者投诉书范文
2015/07/02 职场文书
cf战队宣传语
2015/07/13 职场文书
新手入门Mysql--概念
2021/06/18 MySQL