黄金分割法(0.618法)优化的原理

例题

这里用黄金分割法求解 y=x2−7x+10y = x^2-7x+10y=x2−7x+10 的最优解,,初始区间 [a,b]=[2,8][a,b]=[2,8][a,b]=[2,8], 收敛精度为 0.001。

kkk aaa xk1x_{k}^{1}xk1​ xk2x_{k}^{2}xk2​ bbb f(xk1)f(x_{k}^{1})f(xk1​) f(xk2)f(x_{k}^{2})f(xk2​) [a,b][a,b][a,b] b-a
1 2 8 [2,8][2,8][2,8] 6
222 222 4.2924.2924.292 5.7085.7085.708 888 −1.6227359999999997-1.6227359999999997−1.6227359999999997 2.62526400000000142.62526400000000142.6252640000000014 [2,5.708][2, 5.708][2,5.708] 3.7083.7083.708
333 222 3.4164563.4164563.416456 4.2915444.2915444.291544 5.7085.7085.708 −2.2430204000639993-2.2430204000639993−2.2430204000639993 −1.6234580960639988-1.6234580960639988−1.6234580960639988 [2,4.291544][2, 4.291544 ][2,4.291544] 2.2915442.2915442.291544
4 2.8753698082.8753698082.875369808 3.4163483493443.4163483493443.416348349344 3.7505654586563.7505654586563.750565458656 4.2915444.2915444.291544 −2.243002401342528-2.243002401342528−2.243002401342528 −2.2429843830315406-2.2429843830315406−2.2429843830315406 [2.875369808,3.750565458656][ 2.875369808 , 3.750565458656][2.875369808,3.750565458656] 0.87519565065600040.87519565065600040.8751956506560004
18 3.4989636647843513.4989636647843513.498963664784351 3.49960490195589863.49960490195589863.4996049019558986 3.50000105895193333.50000105895193333.5000010589519333 3.5006422961234813.5006422961234813.500642296123481 −2.2499998438975357-2.2499998438975357−2.2499998438975357 −2.2499999999988773-2.2499999999988773−2.2499999999988773 [3.4996049019558986,3.500642296123481][ 3.4996049019558986 , 3.500642296123481 ][3.4996049019558986,3.500642296123481] 0.00103739416758230620.00103739416758230620.0010373941675823062
19 3.49960490195589863.49960490195589863.4996049019558986 3.5000011865279153.5000011865279153.500001186527915 3.50024601155146443.50024601155146443.5002460115514644 3.5006422961234813.5006422961234813.500642296123481 −2.249999999998593-2.249999999998593−2.249999999998593 −2.2499999394783163-2.2499999394783163−2.2499999394783163 [3.4996049019558986,3.5002460115514644][ 3.4996049019558986 , 3.5002460115514644 ][3.4996049019558986,3.5002460115514644] 0.0043951973144658040.0043951973144658040.004395197314465804

代码实现

import matplotlib.pyplot as plt
import numpy as np
from pylab import *#目标函数
def function(x):y = x**2 - 7 * x + 10return y
#黄金分割法
def GoldenBorder(a, b, accuracy):x1 = a + 0.382*(b - a)x2 = a + 0.618*(b - a)fx1 = function(x1)fx2 = function(x2)print( "a=", a,"x1=", x1, "x2=", x2 , ",b=", b,",f(x1)=",fx1, ",f(x2)=", fx2,  )if fx1 < fx2:a = ab = x2else:a = x1b = baccuracy = b - aprint("NewRange[", a, ", ",b,"]","accuracy=", b-a)return a, b ,accuracya = 2
b = 8
value = []
accuracy = b - a
epoch = 0
accuracies = []
ys = []
epoches=[]
xs = []
while accuracy > 0.001:epoch += 1print("-"*100)print("Epoch:",epoch)a, b, accuracy = GoldenBorder(a, b, accuracy)accuracies.append(accuracy)ys.append(function( a + (b - a) / 2 ))epoches.append(epoch)xs.append(a + (b - a) / 2)
x = a + (b - a) / 2
y = function(x)
print("-"*100)
print("最优点:x*=", x,",f(x*)=", y)
plt.title(' Golden Section Search ')plt.subplot(2,1,1)
plt.plot(epoches,accuracies, ":o", label = 'accuracy', color="blue")
xticks(np.linspace(0,19,20,endpoint=True))
plt.ylabel('f(x)')
plt.legend()plt.subplot(2,1,2)
plt.plot(ys, "-.o", label = 'f(x)', color="red")
xticks(np.linspace(0,19,20,endpoint=True))
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend()
plt.show()

X = np.linspace(3, 4, 20)
Epoch = np.linspace(0, 19,20)
X, Epoch= np.meshgrid(X, Epoch)
Y = X**2 - X * 7 + 10
fig = plt.figure(figsize = ((8,6)))
ax = fig.gca(projection='3d')
ax.plot_surface(Epoch ,X , Y, color="yellow", alpha=0.5)
ax.plot(epoches ,xs , ys,"-.o",color="blue")
xticks(np.linspace(0,19,20,endpoint=True))
ax.set_xlabel('epoch')                #设置坐标轴标签
ax.set_ylabel('x')
ax.set_zlabel(' f(x) ')
plt.show()

!

一维搜索之黄金分割法相关推荐

  1. 一维搜索方法/黄金分割法(附matlab代码)

    一维搜索方法中的黄金分割法(附matlab代码) 一维搜索方法:一维搜索,又称一维优化,是指求解一维目标函数 f(X) 最优解的过程,分为试探法和插值法. 黄金分割法:属于一维搜索方法中的试探法,适用 ...

  2. 黄金分割法_python

    新手,求大佬指正 我的问题: fx=str_fx.replace("x","%(x)f") # 所有的"x"换为"%(x)func ...

  3. 斐波那契法(Faboncci Method)求函数最大值的Python程序

    斐波那契法(Fibonacci method)又称斐波那契分数法,是一种一维搜索的区间消去法(区间消去法(interval elimination method)求单变量函数无约束极值的较实用的一类直 ...

  4. matlab三点确定抛物线,[转]matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...

    这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序.. 以下程序由matlab编写 程序简介 jintuifa.m 进退法,用于确定下单峰区间.根据最优化方法(天津大学出版 ...

  5. 一维搜索-黄金分割法matlab实现

    一维搜索-黄金分割法matlab实现 前言 1.黄金分割法 1.1 黄金分割法的定义 1.2 黄金分割法的搜索过程 2.黄金分割matlab实现 2.1 求f(x)=x^2-7*x+10的极值 2.2 ...

  6. matlab用进退法写程序,matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...

    这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序.. 以下程序由matlab编写 程序简介 jintuifa.m 进退法,用于确定下单峰区间.根据最优化方法(天津大学出版 ...

  7. 精确一维搜索——黄金分割法(0.618)

    文章内容摘自UESTC最优化张老师的PPT 代码:https://github.com/LHesperus/optimization-algorithm/tree/master/unconstrain ...

  8. 最优化课堂笔记05——一维最优化方法(含重点:黄金分割法)

    5-1 一维搜索区间的确定 搜索区间只是适用于单峰区间 . 例子 5.2 黄金分割法(重点) 上面的a与b都会跟着计算的推进而变化的 例子重点 5.3二次插值法 总结: 5.4 切线法(牛顿法) 5. ...

  9. c语言张振国实验报告,基于VisualC的黄金分割法程序设计实验报告.doc

    基于VisualC的黄金分割法程序设计实验报告 新疆农业大学机械交通学院 实验报告 基于Visual C 的黄金分割法程序设计 一 .实验目的 1. 加深对机械优化设计方法的基本理论和算法步骤的理解: ...

  10. 【最优化导论】一维搜索方法案例

    案例1--一维搜索方法 函数为: f(x)=8e1−x+7log(x)f(x)=8e^{1-x}+7log(x)f(x)=8e1−x+7log(x), log为自然对数. 利用MATLAB绘制函数在区 ...

最新文章

  1. python实训项目-Python开发基础-项目实训-在线投票系统.pptx
  2. WinSocket简单编程实验
  3. 各地实时摄像头_智能摄像头——城市治安防控的“天眼”
  4. 机器学习-算法背后的理论与优化(part4)--结构风险最小(上)
  5. python序列类型举例说明_Python(第八课,序列类型)
  6. 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
  7. js f12就关闭标签、禁止右击,感兴趣的可以看一下
  8. mysql show status 过滤_在线更改复制过滤选项的方法
  9. Linux 禁止和开启 ping 的方法
  10. 博客园自定义样式(标题 h1 h2 h3)
  11. centos7安装lnmp
  12. 前端项目总结与分享(PPT整理)
  13. orcad导出BOM
  14. ElasticSearch使用入门及拼音搜索介绍
  15. 短视频运营小技巧,掌握推荐机制很重要,吸粉引流也不难
  16. win10 图形驱动安装失败解决方法
  17. 【ASML】EUV光刻技术PPT
  18. 【MatLab】矩阵for循环与矩阵乘法运算速度对比
  19. js数组遍历方法总结与对比
  20. 仙剑五手游服务器维护,仙剑奇侠传五手游进不去怎么办 仙剑奇侠传五黑屏闪退解决方法...

热门文章

  1. 微信开放平台开发第三方授权登陆(一):开发前期准备
  2. Android微信页面缓存清理,安卓用户如何彻底清理微信大量缓存?4招让你彻底解决内存烦恼...
  3. 安徽财贸职业学院计算机信息管理怎么样,让别人看看安徽财贸职业学院计算机系汪永涛辅导员如何对待我的!!...
  4. html自动改成繁体怎么做,如何将繁体字转换成简体字,繁体字转换器在线转换,简体字转换为繁体字...
  5. python抢购软件/插件/脚本附完整源码
  6. 硬件电路学习之开尔文电桥双臂讲解
  7. 修改ubuntu终端显示目录和计算机名称(转)
  8. css向右箭头形状按钮,详解Bootstrap的纯CSS3箭头按钮样式
  9. 人工智能神经网络概念股,神经网络芯片概念股
  10. 微信小程序Cede获取 PC电脑版微信实现Code的获取