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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Python有序字典简单实现方法示例
Sep 28 Python
python字典操作实例详解
Nov 16 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
python分别打包出32位和64位应用程序
Feb 18 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 Python
Python之matplotlib绘制饼图
Apr 13 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Python中实现三目运算的方法
2015/06/21 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
《Python学习手册》学习总结
2018/01/17 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
学校安全工作制度
2014/01/19 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
Java 超详细讲解hashCode方法
2022/04/07 Java/Android