确定搜索区间的一维搜索算法

求多元函数 f(x) 的最优解通常采用迭代的方法:

  1. 在可行域内任取一点 x0作为初始点,从 x出发,按照一定的方法,一次找到 x1,x2,x3,…,xn,…, 使得某个xn为函数 f(x) 的最优解,或者点列 x1,x2,… 收敛到函数 f(x) 的最优解。在这个过程中,我们希望点列满足 f(xk+1) ≤ f(xk) ,即在点列上 f(x) 是下降的,这就是所谓的下降算法。
  2. 为求函数的最小值点,通常分两步进行:首先确定函数的搜索区间;然后不断缩短搜索区间,直至区间缩短到一点为止。下面介绍第一种搜索区间的方法---成功失败法。

一.成功-失败法

设函数 f(x) 是R1上的单峰函数,∀x0R,步长 h>0。

(1)若 f(x0) > f(x0+h) ,则当 f(x0+h) > f(x0+3h) 时,步长加倍,向前推进。此时令 x0=x0+h , h=2h ,重新开始搜索;否则得搜索区间[a,b]=[x0,x0+3h]。

(2)若 f(x0) = f(x0+h),则得搜索区间 [a,b] = [x0,x0+h]。

(3)若 f(x0) < f(x0+h),则缩小步长,向后转,小步后退,即令 x0=x0+h ,h= -h/4 ,重新开始搜索。

根据以上思想,确定搜索区间的成功-失败法计算框图如下:

下面我们以一道例题为例说明成功-失败法在 C++ 中的实现:

例:编写成功-失败法的计算程序确定函数 f(x)=x3-27x+10 的最小值的一个搜索区间,初始点取 x0=4.5 ,初始步长取 h=0.5 。

这里是在 Dev 编译器中实现编程的,具体代码如下:

程序运行结果如下:

以上就是成功失败法的具体样例,由于作者水平有限,希望发现不当之处的朋友及时指正,谢谢!

基于C++的成功-失败法演示的更多相关文章

  1. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  2. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  3. socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto

    socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ...

  4. InstallShield: 1628 完成基于脚本的安装失败

    问题: 第一次卸载程序失败,以后每次卸载出现1628 完成基于脚本的安装失败,使用安装包打开也会出现相同问题. 原因: 首先检查安装包是否出错,然后检查卸载脚本是否出错. InstallShield程 ...

  5. laravel基于Bootstrap的成功和失败的提示信息和验证提示信息

    message.blade.php <!-- 成功提示框 --> @if(Session::has("success")) <div class="al ...

  6. zabbix 添加主机成功失败判断

    zabbix 成功添加后: $VAR1 = bless( { 'version' => 0, 'content' => { 'jsonrpc' => '2.0', 'id' => ...

  7. 利用ExecuteMultipleRequest来批量导入数据,成功的成功失败的失败,并生成导入结果文件

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  8. 【安全性测试】解决关于appscan基于登录会话检测失败问题

    有些问题久了忽然就想通怎么解决了,很神奇.这次要说的是,关于appscan无法检测到会话的问题,因为在百度上一直找不到相关的解决方法,这个问题困扰了我很久,今天终于找到方法解决了! 日常配置扫描内容: ...

  9. C / C ++ 基于梯度下降法的线性回归法(适用于机器学习)

    写在前面的话: 在第一学期做项目的时候用到过相应的知识,觉得挺有趣的,就记录整理了下来,基于C/C++语言 原贴地址:https://helloacm.com/cc-linear-regression ...

随机推荐

  1. Problem after converting keras model into Tensorflow pb - 将keras模型转换为Tensorflow pb后的问题

    I'm using keras 2.1.* with tensorflow 1.13.* backend. I save my model during training with .h5 forma ...

  2. Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

    Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要 ...

  3. java AQS(AbstractQueuedSynchronizer)同步器详解

    除了内置锁(synchronized)外,java AQS(AbstractQueuedSynchronizer)同步器几乎是所有同步容器,同步工具类的基础.ReentrantLock.Reentra ...

  4. bash配色

    Table of Contents PS1格式 基本格式 其它可能的格式 PS1配色方案 配置文件 bash的命令提示符和终端外观由环境变量PS1定义 PS1格式 基本格式 \u 显示当前用户名 \h ...

  5. C#保留小数点后几位

    String.Format("{0:N1}", a) 保留小数点后一位 String.Format("{0:N2}", a) 保留小数点后两位 String.F ...

  6. MarkdownPan2 简单使用指南

    markdown 简单使用指南 一级标题 二级标题 三级标题加代码 四级标题 这里是加粗 这里是正文and English 888 这里有正文嵌入代码这种样式 这里是代码块 这种使用的代码块 还有引用 ...

  7. jsp视频如何播放

    网站开发小白们对如何插入视频有较大的困扰,一段时间不知道从何下手,想在数据库里面直接导入,但没能成功,后又尝试直接在myeclipse里面直接放入视频. 对于不同的播放器,视频的格式也有要求,建议使用 ...

  8. shell进程中的特殊状态变量

    $?:获取执行上一个指令的执行状态返回值(0为成功,非0为失败) $$:获取当前执行的shell脚本的进程号(PID) $!:获取上一个在后台工作的进程的进程号 $_:获取在此之前执行的命令或脚本的最 ...

  9. Python笔记4——字典的一些基本操作

    #字典 key-value #添加 my_family= {"father": "weihaiqing", "mother": " ...

  10. PHP 基于pdo的数据库操作类

    http://www.php.cn/php-weizijiaocheng-404645.html <?php class Pdodb{   protected $pdo;   protected ...