python实现最速下降法


Posted in Python onMarch 24, 2020

本文实例为大家分享了python实现最速下降法的具体代码,供大家参考,具体内容如下

代码:

from sympy import *
import numpy as np
def backtracking_line_search(f,df,x,x_k,p_k,alpha0):
  rho=0.5
  c=10**-4
  alpha=alpha0
  replacements1=zip(x,x_k)
  replacements2=zip(x,x_k+alpha*p_k)
  f_k=f.subs(replacements1)
  df_p=np.dot([df_.subs(replacements1) for df_ in df],p_k)
  while f.subs(replacements2)>f_k+c*alpha*df_p:
    alpha=rho*alpha
    replacements2 = zip(x, x_k +alpha * p_k)
  return alpha
def stepest_line_search(f,x,x0,alpha0):
  df = [diff(f, x_) for x_ in x]
  x_k=x0
  alpha=alpha0
  replacements=zip(x,x_k)
  len_df = sqrt(np.sum([df_.subs(replacements) ** 2 for df_ in df]))
  while len_df>1e-6:
    p_k=-1*np.array([df_.subs(replacements) for df_ in df])
    alpha = backtracking_line_search(f, df, x, x_k, p_k, alpha)
    x_k=x_k+alpha*p_k
    replacements = zip(x, x_k)
    len_df=np.sum([df_.subs(replacements)**2 for df_ in df])
  return x_k
if __name__=="__main__":
  init_printing(use_unicode=True)
  x1 = symbols("x1")
  x2 = symbols("x2")
  x = np.array([x1, x2])
  f = 100 * (x2 - x1 ** 2)**2 + (1 - x1) ** 2
  ans=stepest_line_search(f, x, np.array([1.2, 1]), 1)
  print "the minimal value in point:",ans

分析:

这个采用的是backtracking line search来寻找alpha。

python实现最速下降法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
wxPython 入门教程
Oct 07 Python
探究数组排序提升Python程序的循环的运行效率的原因
Apr 01 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Python中进程和线程的区别详解
Oct 29 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
基于python实现从尾到头打印链表
Nov 02 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Python如何对XML 解析
Jun 28 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
python实现梯度法 python最速下降法
Mar 24 #Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 #Python
python实现梯度下降法
Mar 24 #Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 #Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 #Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 #Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 #Python
You might like
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
php获取远程文件大小
2015/10/20 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
python中self原理实例分析
2015/04/30 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
python2.7安装图文教程
2018/03/13 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
解决Python安装cryptography报错问题
2020/09/03 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
担保书范文
2015/01/20 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
毕业生政审意见范文
2015/06/04 职场文书
单身证明范本
2015/06/15 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL