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多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
python实现的分层随机抽样案例
Feb 25 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
Python如何给函数库增加日志功能
Aug 04 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
PHP 基本语法格式
2009/12/15 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
JavaScript中的Location地址对象
2008/01/16 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
python绘制中国大陆人口热力图
2018/11/07 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
python实现从ftp服务器下载文件
2020/03/03 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
为什么称python为胶水语言
2020/06/16 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
PHP面试题及答案二
2015/05/23 面试题
大整数数相乘的问题
2012/07/22 面试题
应届毕业生自荐信例文
2014/02/26 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android