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时间戳与时间字符串互相转换实例代码
Nov 28 Python
Python批量修改文件后缀的方法
Jan 26 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
python 二维数组90度旋转的方法
Jan 28 Python
Python简单I/O操作示例
Mar 18 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
ubuntu上安装python的实例方法
Sep 30 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 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实现将GB编码转换为UTF8
2006/11/25 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
详解php协程知识点
2018/09/21 PHP
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
js获取ip和地区
2017/03/10 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python中enumerate的用法实例解析
2014/08/18 Python
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python构建网页爬虫原理分析
2017/12/19 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
阿里旅行:飞猪
2017/01/05 全球购物
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
年度考核自我鉴定
2014/02/02 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
市场部经理岗位职责
2014/04/10 职场文书
演讲稿的写法
2014/05/19 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
2015新教师教学工作总结
2015/07/22 职场文书