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实现的Kmeans++算法实例
Apr 26 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
基于tensorflow加载部分层的方法
Jul 26 Python
详解python中的Turtle函数库
Nov 19 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
你可能不知道的Python 技巧小结
Jan 29 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
Python遍历指定文件及文件夹的方法
2015/05/09 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
python关闭占用端口方式
2019/12/17 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
Python中的面向接口编程示例详解
2021/01/17 Python
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
Linux机考试题
2015/10/16 面试题
青年创业培训欢迎词
2014/01/08 职场文书
农村改厕实施方案
2014/03/22 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers