在工程上,最优化就是使被研究对象尽可能高效的过程,比如使时间花费最少,设计出最多的产品。在数学上,最优化就是寻找函数在某一区间上的局部极值,这些函数具有一个或多个变量,具有单自变量的函数,该过程被称为一维优化问题,否则称之为多维优化问题。

对于一维优化问题,在数学上往往是通过求解函数的导数,极值点导数为0,来求解的,这就变成了导数求根的问题了,可以使用划界法和开方法。

在划界法中,有一种方法被广泛应用,它就是黄金分割法

下以黄金分割法求解极小值为例,就原理,代码实现,问题求解三个方面向大家介绍。

原理

至于黄金分割法有什么好处,为什么必须用黄金分割数这个特别的比例呢?黄金分割法的优点将在下文逐渐浮出水面。

定区间:黄金分割法首先要求给出要搜索的区间,设为(xl,xr)。那么两个黄金分割点就是

其中:

黄金分割率:

以下有时写成了xr有时写成了xu,请把xr,xu看成一个点。

缩小区间:判断f1=f(x1)与f2=f(x2)的大小。

  • 若f1<f2,则x1是局部极小值,xl~x2这一段就可以抛弃了,简单更新一下迭代值:xu为上界不变;由于(xl,x2)的抛弃,xl需要更新:xl=x2;这时候黄金分割法的优点就体现出来了,因为唯有黄金分割,才能使x1仍为下一个区间的一个黄金分割点,且为左黄金分割点,这样直接令x2=x1就完成了x2的更新;最后求解出新区间的右黄金分割点,令其为x1,就完成了迭代.

  • 若f1>f2,则x2是局部极小值,x1~xu这一段就可以抛弃了,简单更新一下迭代值:xl为下界不变;xu需要更新:xu=x1;x2仍为下一个区间的一个黄金分割点,且为右黄金分割点,这样直接令x1=x2就完成了x1的更新;最后求解出新区间的左黄金分割点,令其为x2,完成迭代.

终止条件:如果最优点在x1处,则最终极小值在(x2,x1,xr)区间内

估计值最大可能距离为max(x1-x2,xr-x1)

通过计算:xr-x1=(2-)(xr-xl)=0.3820(xr-xl)>x1-x2=(2-3)(xr-xl)=0.2361(xr-xl).

故取

为终止迭代准则。

代码实现

function [x,fx,ea,iter] = goldmin(f,xl,xr,es,maxit)
%goldmin:用黄金分割法求解函数极小值
%%输入:
%f=将要解的函数方程
%xl=(x_left),xl=(x_right)搜索区间
%es=允许的容差
%maxit = 允许的最大迭代次数
%%输出:
%x=所求极小值点
%fx=所求极小值
%ea=相对误差(ea<=es时即可输出)
%iter=迭代次数
if nargin<3,error('最少需要输入三个参数——函数和搜索区间'), end
%当输入的参数少于3个时,即函数和搜索区间没有齐全时,报错!
if nargin<4 || isempty(es),es=0.0001;end
%当输入的参数少于4个时(没有输入容差),默认为0.0001
if nargin<5 || isempty(maxit),maxit=50;end
%当输入的参数少于5个时(没有输入最大迭代次数),默认为50次
phi=(1+sqrt(5))/2;    %黄金分割数
iter=0;
d=(phi-1)*(xr-xl);
x1=xl+d;x2=xr-d;    %xl和xr之间的两个黄金分割点
f1=f(x1);f2=f(x2);
while(1)xint=xr-xl;if f1 < f2xopt=x1;    %x1是当前迭代的极小值点,用xopt表示xl=x2;    %舍弃掉xl~x2这一段区间,令x2为新的xl,缩小区间x2=x1;    %由黄金分割的性质,x1恰在新区间的左黄金分割点(令其为x2)上f2=f1;    x1=xl + (phi - 1)*(xr-xl); f1=f(x1);    %更新迭代值elsexopt=x2; xr=x1; x1=x2; f1=f2;x2=xr - (phi - 1)*(xr-xl); f2=f(x2);enditer = iter + 1;if xopt~=0,ea=(2-phi)*abs(xint/xopt) ;endif ea <= es || iter>=maxit,break,end
end
x=xopt;fx=f(xopt);
end

问题求解

问题:

用黄金分割求如下函数极小值

搜索区间为(0,4)。

f=@(x) (x^2)/10-2*sin(x);
[x,fx,ea,iter] = goldmin(f,0,4,0.0001,20)

结果:

>> goldmin_test
x =1.4275
fx =-1.7757
ea =1.1448e-04
iter =20

声明:文章来源于笔者学习【美】Steven C. CHapra所著,林赐译 《工程于科学数值方法的MATLAB实现》(第4版)的笔记,如有谬误或想深入了解,请翻阅原书。

MATLAB数值分析学习笔记:黄金分割法相关推荐

  1. MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

    工程和科学计算的许多基本方程都是建立在守恒定律的基础之上的,比如质量守恒等,在数学上,可以建立起形如 [A]{x}={b} 的平衡方程.其中{x}表示各个分量在平衡时的取值,它们表示系统的状态或响应: ...

  2. MATLAB数值分析学习笔记:多项式拟合

    在很多情况下,我们需要估计精确值之间的可能取值,常用的方法是多项式插值法.多项式插值法的原理是n个数据点可以确定n-1次多项式:例如三点确定一条抛物线. 工程上常用的多项式插值的方法有两种:牛顿插值法 ...

  3. 【数值分析学习笔记】——1、数值分析中的误差

    1.1截断误差与舍入误差 误差 类型 固有误差 模型误差 测量误差 计算误差 截断误差 舍入误差 数值分析中主要讨论的是计算误差,包括截断误差与舍入误差. (1)舍入误差:由于数字计算机不能准确地表示 ...

  4. el-select 多选取值_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  5. Python数据分析学习笔记:使用SciKit-Learn进行数据规范化

    Python数据分析学习笔记:使用SciKit-Learn进行数据规范化 数据规范化是数据挖掘的一项基础工作.不同评价指标往往具有不同的量纲,数值见的差别可能很大,不进行处理可能会影响到数据分析的结果 ...

  6. 回溯法采用的搜索策略_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  7. MATLAB一维插值笔记与应用–十安辰

    MATLAB一维插值笔记与应用–十安辰 我们以一个题来了解一维插值,如下: ​ 天文学家在1914年8月份的7次观测中,测得地球与金星之间的距离(单位:m),并取其常用对数值与日期的一组历史数据,如表 ...

  8. 实验Matlab数值运算,MATLAB数值实验一(数据的插值运算及其应用完整版

    <MATLAB数值实验一(数据的插值运算及其应用完整版>由会员分享,可在线阅读,更多相关<MATLAB数值实验一(数据的插值运算及其应用完整版(6页珍藏版)>请在人人文库网上搜 ...

  9. 数据分析学习笔记——数据可视化

    数据分析学习笔记系列--数据可视化 总第45篇 ▼ 写在前面: 本篇来源于书籍<数据之美-一本书学会可视化设计>的学习后整理所得.全篇主要围绕数据可视化的5个步骤展开,其中重点内容是第三步 ...

  10. Python数据分析学习笔记:计算向量夹角

    Python数据分析学习笔记:计算向量夹角 通过计算两个向量夹角了解两个向量之间的相关性. # 计算向量夹角import numpy as npdef included_angle(a, b):a_n ...

最新文章

  1. C语言竟成TIOBE年度编程语言候选!苹果iPhone 7卖得最好!
  2. 美国美国,USA USA
  3. python和php合成,Python照片合成的方法详解
  4. 快速安装 Moodle 指南
  5. php邀请码演示代码,WordPress主题纯代码实现邀请码功能
  6. 新手填坑 java.lang.Integer cannot be cast to java.lang.String
  7. Snagit--高难度、多功能截图,有了它截图不求人!
  8. 微信小程序生成海报工具Painter
  9. icom对讲机写频线定义_自制电台通用写频线(完整版).pdf
  10. JAVA将图片转成base64导出到word中
  11. indexOf()用法
  12. uniapp使用逍遥模拟器调试项目
  13. [感动]知道我为什么喜欢SUPER JUNIOR吗?
  14. [易飞]信息传递-多表(含外表)关联取值
  15. python 微信机器人 关键词_python-微信机器人之词云
  16. 学计算机买华为还是买华硕,不考虑爱国因素,联想、华为、华硕等哪个品牌的笔记本电脑较好?...
  17. 笔记本电脑win10截图软件推荐
  18. 暴风影音邀安全厂商联手认证 提前发布特别版
  19. devc++未成年保护模式系统
  20. JSP学习笔记之基础教程

热门文章

  1. 安利几个可以搜大学网课答案的平台
  2. 最全压力传感器分类及工作原理!
  3. 李宏毅老师《机器学习》课程笔记-1深度学习简介
  4. 符号_特殊符号大全狐狸符号加字和复制
  5. 视频编码格式和封装格式有哪些?视频封装格式和编码格式有什么区别?一篇弄懂
  6. Python实现繁体字和简体字的相互转换
  7. 打造敏捷的自组织团队
  8. python程序设计课程标准_《Python程序设计》课程标准
  9. JAVA设计模式1 ---- 简单工厂模式 (以汽车工厂为例)
  10. python往npy写入数据_Python 存取npy格式数据实例