python中黄金分割法实现方法


Posted in Python onMay 06, 2015

本文实例讲述了python中黄金分割法实现方法。分享给大家供大家参考。具体实现方法如下:

''' a,b = bracket(f,xStart,h)
  Finds the brackets (a,b) of a minimum point of the
  user-supplied scalar function f(x).
  The search starts downhill from xStart with a step
  length h.
  x,fMin = search(f,a,b,tol=1.0e-6)
  Golden section method for determining x that minimizes
  the user-supplied scalar function f(x).
  The minimum must be bracketed in (a,b).
'''    
from math import log, ceil
def bracket(f,x1,h):
  c = 1.618033989 
  f1 = f(x1)
  x2 = x1 + h; f2 = f(x2)
 # Determine downhill direction and change sign of h if needed
  if f2 > f1:
    h = -h
    x2 = x1 + h; f2 = f(x2)
   # Check if minimum between x1 - h and x1 + h
    if f2 > f1: return x2,x1 - h 
 # Search loop
  for i in range (100):  
    h = c*h
    x3 = x2 + h; f3 = f(x3)
    if f3 > f2: return x1,x3
    x1 = x2; x2 = x3
    f1 = f2; f2 = f3
  print "Bracket did not find a mimimum"    
def search(f,a,b,tol=1.0e-9):
  nIter = int(ceil(-2.078087*log(tol/abs(b-a)))) # Eq. (10.4)
  R = 0.618033989
  C = 1.0 - R
 # First telescoping
  x1 = R*a + C*b; x2 = C*a + R*b
  f1 = f(x1); f2 = f(x2)
 # Main loop
  for i in range(nIter):
    if f1 > f2:
      a = x1
      x1 = x2; f1 = f2
      x2 = C*a + R*b; f2 = f(x2)
    else:
      b = x2
      x2 = x1; f2 = f1
      x1 = R*a + C*b; f1 = f(x1)
  if f1 < f2: return x1,f1
  else: return x2,f2

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
Python计算一个文件里字数的方法
Jun 15 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
django用户登录和注销的实现方法
Jul 16 Python
Python3中关于cookie的创建与保存
Oct 21 Python
对python制作自己的数据集实例讲解
Dec 12 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
Feb 28 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
python中xlrd模块的使用详解
Feb 01 Python
使用rpclib进行Python网络编程时的注释问题
May 06 #Python
pymongo给mongodb创建索引的简单实现方法
May 06 #Python
Python中用PIL库批量给图片加上序号的教程
May 06 #Python
python写入中英文字符串到文件的方法
May 06 #Python
python使用xlrd模块读写Excel文件的方法
May 06 #Python
在Python中使用全局日志时需要注意的问题
May 06 #Python
python通过post提交数据的方法
May 06 #Python
You might like
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
解析strtr函数的效率问题
2013/06/26 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python解析json代码实例解析
2019/11/25 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
EJB的角色和三个对象
2015/12/31 面试题
遗产继承公证书
2014/04/09 职场文书
团员个人年度总结
2015/02/26 职场文书
内勤岗位职责范本
2015/04/13 职场文书
第二次离婚起诉书
2015/05/18 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
React四级菜单的实现
2022/04/08 Javascript
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB