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 相关文章推荐
详解Django框架中用context来解析模板的方法
Jul 20 Python
python 对象和json互相转换方法
Mar 22 Python
python如何使用unittest测试接口
Apr 04 Python
python使用turtle库绘制时钟
Mar 25 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
python构造IP报文实例
May 05 Python
使用Python操作MySQL的小技巧
Sep 10 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
May 31 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php时间不正确的解决方法
2008/04/09 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
Vue中keep-alive组件作用详解
2020/02/04 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
python运行其他程序的实现方法
2017/07/14 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python把转列表为集合的方法
2019/06/28 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
禁毒主题班会教案
2015/08/14 职场文书