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读取oracle函数返回值
Jul 18 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python 直接赋值和copy的区别详解
Aug 07 Python
django中间键重定向实例方法
Nov 10 Python
python生成大写32位uuid代码
Mar 03 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
Apr 24 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
Python基础之数据类型知识汇总
May 18 Python
在pycharm中无法import所安装的库解决方案
May 31 Python
用Python将GIF动图分解成多张静态图片
Jun 11 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获取地址栏信息的代码
2008/10/08 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php获取错误信息的方法
2015/07/17 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
python实现浪漫的烟花秀
2019/01/30 Python
浅谈python中get pass用法
2019/03/19 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python批量启动多线程代码实例
2020/02/18 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
秘书专业自荐信范文
2013/12/26 职场文书
市场拓展计划书
2014/05/03 职场文书
先进单位事迹材料
2014/12/25 职场文书
小组组名及励志口号
2015/12/24 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
opencv检测动态物体的实现
2021/07/21 Python
nginx配置之并发频次限制
2022/04/18 Servers
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android