最优化方法——Matlab实现黄金分割法一维搜索

news2024/11/27 3:14:54

文章目录

    • 黄金分割法一维搜索原理
      • 算法流程:
    • Matlab代码
      • 命令行窗口结果打印:
      • 《最优化方法》教材上写成表的答案:
      • 黄金分割法的一些性质

黄金分割法一维搜索原理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
若保留区间为[x1,b],我们得到的结果是一致的.
该方法称为黄金分割法,实际计算取近似值: x1=a+0.382(b – a), x2=a+0.618(b – a),
所以黄金分割法又称为0.618法.
黄金分割法每次缩小区间的比例是一致的,每次将区间长度缩小到原来的0.618倍.

算法流程:

在这里插入图片描述
黄金分割法也称作0.618法,一维指的是只含有一个未知量的情况。

Matlab代码

用matlab实现黄金分割法求解f(x)=x^2-x+2在(-1,3)上的最小值:

clc,clear,close all;
a = -1; b =3;
ep = 0.08*(b-a);
x = a:0.1:b;
f_x = x.^2-x+2;
plot(x, f_x, 'linewidth', 1.5)
axis([-1, 3, 0, 8])
title('f(x)=x^2-x+2')
grid on;
flag = 0;
cnt = 0;
pause(0.5)
while 1
    fprintf('第%d次迭代:\n', cnt)
    if flag==0
        x2 = a + 0.618*(b-a);
        f2 = x2.^2-x2+2;
        x1 = a + b - x2;
        f1 = x1.^2-x1+2;
        fprintf('a = %f, b = %f\n', a, b)
        fprintf('x1 = %f, x2 = %f, f1 = %f, f2 = %f\n', x1, x2, f1, f2)
        hold on
        stem([x2, x1], [f2, f1], '--', 'linewidth', 0.8)
        pause(1)
    elseif flag==1
        x1 = a + b - x2;
        f1 = x1.^2-x1+2;
        fprintf('a = %f, b = %f\n', a, b)
        fprintf('x1 = %f, x2 = %f, f1 = %f, f2 = %f\n', x1, x2, f1, f2)
        stem([x2, x1], [f2, f1], '--', 'linewidth', 0.8)
        pause(1)
    elseif flag==2
        x2 = a + 0.618*(b-a);
        f2 = x2.^2-x2+2;
        fprintf('a = %f, b = %f\n', a, b)
        fprintf('x1 = %f, x2 = %f, f1 = %f, f2 = %f\n', x1, x2, f1, f2)
        stem([x2, x1], [f2, f1], '--', 'linewidth', 0.8)
        pause(1)
    end
    if abs(b-a)<ep
        xb = (a+b)/2;
        disp('最优解为:')
        fprintf('xb = %f, f(xb) = %f\n', xb, xb.^2-xb+2)
        disp('黄金分割法一维搜索完毕.')
        break
    elseif f1<f2
        disp('f1<f2')
        b = x2;
        x2 = x1;
        f2 = f1;
        flag = 1;
    elseif f1==f2
        disp('f1=f2')
        a = x1;
        b = x2;
        flag = 0;
    elseif f1>f2
        disp('f1>f2')
        a = x1;
        x1 = x2;
        f1 = f2;
        flag = 2;
    end
    cnt = cnt + 1;
end
pause(0.5)
stem(xb, xb^2-xb+2, 'r', 'linewidth', 2)

代码运行有动态效果,这里就不再保存为GIF动图了,可以复制一键运行尝试:
在这里插入图片描述

命令行窗口结果打印:

0次迭代:
a = -1.000000, b = 3.000000
x1 = 0.528000, x2 = 1.472000, f1 = 1.750784, f2 = 2.694784
f1<f2
第1次迭代:
a = -1.000000, b = 1.472000
x1 = -0.056000, x2 = 0.528000, f1 = 2.059136, f2 = 1.750784
f1>f2
第2次迭代:
a = -0.056000, b = 1.472000
x1 = 0.528000, x2 = 0.888304, f1 = 1.750784, f2 = 1.900780
f1<f2
第3次迭代:
a = -0.056000, b = 0.888304
x1 = 0.304304, x2 = 0.528000, f1 = 1.788297, f2 = 1.750784
f1>f2
第4次迭代:
a = 0.304304, b = 0.888304
x1 = 0.528000, x2 = 0.665216, f1 = 1.750784, f2 = 1.777296
f1<f2
第5次迭代:
a = 0.304304, b = 0.665216
x1 = 0.441520, x2 = 0.528000, f1 = 1.753420, f2 = 1.750784
f1>f2
第6次迭代:
a = 0.441520, b = 0.665216
x1 = 0.528000, x2 = 0.579764, f1 = 1.750784, f2 = 1.756362
最优解为:
xb = 0.553368, f(xb) = 1.752848
黄金分割法一维搜索完毕.
>> 

《最优化方法》教材上写成表的答案:

在这里插入图片描述

黄金分割法的一些性质

1、x1 = a+b-x2;
2、下一次迭代的区间长度是上一个区间长度的0.618倍;
3、如果f1<f2,则上一次迭代的x1, f1传给下一次迭代的x2, f2,
同理如果f1>f2,则上一次迭代的x2, f2传给下一次迭代的x1, f1;
4、迭代次数和求解精度取决于终止条件 ∣ b − a ∣ < ϵ |b-a|< \epsilon ba<ϵ ϵ \epsilon ϵ的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译工具:CMake(七) | cmake 常用变量和常用环境变量

编译工具&#xff1a;CMake&#xff08;七&#xff09; | cmake 常用变量和常用环境变量 cmake 变量引用方式cmake 自定义变量的方式cmake 常用变量总结 cmake 变量引用方式 cmake使用${}进行变量的引用。 在 IF 等语句中&#xff0c;是直接使用变量名而不通过${}取值 cmake…

京东全店商品采集教程(详解京东店铺所有商品数据采集步骤方法和代码示例)

随着电商行业的快速发展&#xff0c;京东已成为国内的电商平台之一&#xff0c;拥有着海量的商品资源。对于一些需要大量商品数据的商家或者需求方来说&#xff0c;京东全店采集是非常必要的。本文将详细介绍京东全店采集的步骤和技巧&#xff0c;帮助大家更好地完成数据采集任…

基于Spark的K-means快速聚类算法的优化

摘要 1 引言 2 相关研究 2.1 Spark计算框架 2.2 K-means算法 2.3 K-means++算法

Python异步编程高并发执行爬虫采集,用回调函数解析响应

一、问题&#xff1a;当发送API请求&#xff0c;读写数据库任务较重时&#xff0c;程序运行效率急剧下降。 异步技术是Python编程中对提升性能非常重要的一项技术。在实际应用&#xff0c;经常面临对外发送网络请求&#xff0c;调用外部接口&#xff0c;或者不断更新数据库或文…

位深bitdepth是什么

bitdepth bit depth/color depth到底是什么&#xff0c;其对视频有何影响&#xff1f; 数字数据比如数字视频、数字照片等&#xff0c;都是以二进制存储的&#xff0c;那么其一个最小的数据单元就是一位bit&#xff0c;比特位中只有0或1两种值。为了方便处理&#xff0c;把多…

McCabe度量法

概论: McCabe度量法是由 托马斯麦克凯 提出的一种基于程序控制流的复杂性度量方法。又称环路度量&#xff0c;循环复杂度&#xff08;Cyclomatic complexity&#xff09;&#xff0c; 也称为条件复杂度或圈复杂度&#xff0c;是一种软件度量。它认为程序的复杂性很大程度上取决…

《计算机视觉中的多视图几何》笔记(5)

5 Algorithm Evaluation and Error Analysis 本章主要讲述对算法的验证和误差分析。 概述了两种计算这种不确定性&#xff08;协方差&#xff09;的方法。第一个基于线性近似值&#xff0c;涉及串联各种雅各布表达式&#xff0c;第二个是更容易实施蒙特卡洛方法。 文章目录 …

Soft-Serve小巧强大-轻量级Git服务

文章目录 前言一、Soft-Serve官方解释&#xff1a;我的要求 二、使用步骤我的环境公钥、私钥生成安装镜像参数解释&#xff1a; 配置config.yamlconfig 实操创建用户及绑定公钥创建代码仓库及添加合作者之后就是 git 基本操作了 总结 前言 用过 Gitlab, 也挺好用。 遇到几个问…

固定资产管理系统的作用有哪些

固定资产管理系统的功效原因很多。  它帮助企业更好地管理其固定资金&#xff0c;包括设备的采购、维护、更新和损坏。根据系统管理计划&#xff0c;企业可以更有效地节约成本&#xff0c;提高效率&#xff0c;降低风险。  资产管理系统可以实现企业资产共享与合作应用。在…

「聊设计模式」之中介者模式(Mediator)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 在软件开发过程中&#xff0c;我们通常会遇到一个问题&…

北邮22级信通院数电:Verilog-FPGA(2)modelsim北邮信通专属下载、破解教程

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 1.下载 2.解压打开 3.modelsim初安装 4.…

控制器连接Profinet转Modbus RTU网关与精密数显温控仪通讯

Profinet是一种用于工业自动化领域的通信协议&#xff0c;而Modbus RTU则是一种常见的串行通信协议。由于生产现场中的控制器与精密数显温控仪通常采用不同的通信协议&#xff0c;因此需要借助Profinet转Modbus RTU网关&#xff08;XD-MDPN100&#xff09;完成通信的桥接与转换…

Markdown(MD)——Typora Markdown安装教程(2023九月亲测可用!!!)

目录 一、简介 1.Markdown简介 2.Markdown特点 3.Typora简介 二、安装教程 1.下载安装包 2.解压到文件夹 3.安装 4.破解 ​编辑5.激活 三、Markdown常用语法 1.常用语法 2.用于编辑LaTex公式 四、其他编辑器 一、简介 1.Markdown简介 Markdown 是一种轻量级标记语…

Java多线程篇(3)——线程池

文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize &#xff1a; 核心线程数 maximumPoolSize&#xff1a; 最…

Docsify介绍—md文件直接生成网页的工具

Markdown是一种轻量级标记语言&#xff0c;它使用易读易写的纯文本格式&#xff0c;用于编写文档&#xff0c;如README&#xff0c;wiki&#xff0c;博客文章等。Markdown语言最初由约翰格鲁伯&#xff08;John Gruber&#xff09;和亚伦斯沃茨&#xff08;Aaron Swartz&#x…

ssm637教材管理系统+vue

项目介绍 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前学校对于教材信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的管理模式已然落后。本…

YOLO系列

一、YOLOv1 Bbox使用开根号的原因&#xff1a; 小目标与大目标偏移相同尺度时&#xff0c;小目标检测效果差&#xff0c;那么公式中使用根号就会让小目标损失值更大了 V1网络的一些问题&#xff1a; 小目标检测效果差&#xff0c;当目标出现新配置也不行&#xff0c;目标定位…

红黑树插入的实现

红黑树&#xff1a; 1.概念&#xff1a; 红黑树的性质&#xff1a; 红黑树的插入操作&#xff1a; 其前面的插入和二叉搜索树的一模一样&#xff0c;只是后面需要判断是否满足红黑树的性质&#xff1a; 具体分为三种情况&#xff1a; 1.uncle节点存在且为红色的&#xff1a…

芯科蓝牙BG27开发笔记9-资料整理

SSV5中的例程 在ssv5中有少量开箱即用的例程&#xff0c;第一篇笔记就是从这里开始的&#xff1a; 然而&#xff0c;仅仅这些代码吗&#xff1f;其他例程代码在何处&#xff1f; Software Developer Docs - Silicon Labs 所有内容都可以在官网文档找到。 之前是从ssv5直接开…

Bard人工智能9月19日重大更新

1、巴德现在可以回复来自谷歌地图、航班、酒店和YouTube的实时信息&#xff0c;因此您可以在一个地方完成更多工作。 2、Bard 可能会与其他服务共享您的部分对话和其他相关信息&#xff0c;例如您的位置。这些服务可能会使用该信息进行改进&#xff0c;即使您以后删除了您的 Ba…