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中的Descriptor描述符类
Jun 14 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
简单了解python变量的作用域
Jul 30 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
Python读取文件夹下的所有文件实例代码
Apr 02 Python
Django中session进行权限管理的使用
Jul 09 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
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
javascript 闭包
2011/09/15 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python配置mysql的教程(推荐)
2017/10/13 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
python3 下载网络图片代码实例
2019/08/27 Python
python打开文件的方式有哪些
2020/06/29 Python
python利用线程实现多任务
2020/09/18 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
毕业自荐书
2013/12/09 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
MySQL 计算连续登录天数
2022/05/11 MySQL