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批量导出导入MySQL用户的方法
Nov 15 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
python写一个md5解密器示例
Feb 23 Python
Python requests库用法实例详解
Aug 14 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
python3实现表白神器
Apr 09 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
通过实例解析Python return运行原理
Mar 04 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 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
我的论坛源代码(十)
2006/10/09 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python生成器以及应用实例解析
2018/02/08 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Python 获取项目根路径的代码
2019/09/27 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
综合实践教学反思
2014/01/31 职场文书
离职报告格式
2014/11/04 职场文书
小学毕业感言200字
2015/07/30 职场文书
小组组名及励志口号
2015/12/24 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书