首页 > 其他分享 >基于matlab的黄金搜索法【开源/可直接复制粘贴】

基于matlab的黄金搜索法【开源/可直接复制粘贴】

时间:2024-09-13 12:20:35浏览次数:13  
标签:4f %. 复制粘贴 开源 搜索 matlab x2 x1 lambda

黄金搜索法是一种无须函数导数的数值优化方法。它基于黄金分割比例来选择新的搜索区间,以逐步缩小搜索范围并逼近极值点。在每次迭代中,算法会根据当前搜索区间的长度和黄金分割比例来计算两个新的点,并在这两个点处评估函数值。然后,根据这两个点的函数值比较结果,选择包含更优解(即更接近极值点)的那个区间作为新的搜索区间。

黄金搜索法不需要函数的导数信息,因此适用于函数不可导或者计算导数困难的情况

代码如下:

function Golden_Section_Search(a, b, f, tol) 
% 项目名称:黄金分割搜索法  
% 更新时间:2024/09/04 
% 背景:美国数学家Jack Kiefer在1953年提出了这种搜索方法,用于在一维空间中寻找函数的极值点。黄金比例概念最早由古希腊的毕达哥拉斯提出。
% 作者:月白风清江有声
    if a >= b    
        error('Must have a < b');    
    end    
        
    lambda = 0.618;    
    x1 = b - lambda * (b - a);    
    x2 = a + lambda * (b - a);    
    k = 0;  
  
    while abs(b - a) > tol     
        f_x1 = f(x1);    
        f_x2 = f(x2);    
        l = abs(b - a);    
        k = k + 1;  
        fprintf('num %d: a = %.4f, b = %.4f, f(x1) = %.4f, f(x2) = %.4f, l = %.4f\n', k, a, b, f_x1, f_x2, l);    
            
  
        if f_x1 < f_x2    
            b = x2;    
            x2 = x1;    
            x1 = a + lambda * (b - a);    
        else    
            a = x1;    
            x1 = x2;    
            x2 = b - lambda * (b - a);    
        end    
  
    end    
    alpha = (a + b) / 2;    
    fprintf('Final min result: a = %.4f, b = %.4f, alpha = %.4f\n', a, b, alpha);  
end    
   
% 示例用法  
    % 定义函数句柄  
    %f = @(x) 2*x^4 + x + 1;    
    % 调用黄金分割搜索法  
    %Golden_Section_Search(-2, 0, f, 0.1);

标签:4f,%.,复制粘贴,开源,搜索,matlab,x2,x1,lambda
From: https://blog.csdn.net/ws13563798156/article/details/142100384

相关文章

  • C# 开源教程带你轻松掌握数据结构与算法
    前言在项目开发过程中,理解数据结构和算法如同掌握盖房子的秘诀。算法不仅能帮助我们编写高效、优质的代码,还能解决项目中遇到的各种难题。给大家推荐一个支持C#的开源免费、新手友好的数据结构与算法入门教程:Hello算法。项目介绍《HelloAlgo》是一本开源免费、新手友好的数......
  • 【使用 3D FDTD 代码和 UPML 进行微带分支线耦合器分析】三维有限差分时域方法在平面
       ......
  • 【使用UPML的3D FDTD代码进行微带低通滤波器分析】应用三维有限差分时域法分析平面微
       ......
  • MATLAB新能源车牌识别系统
    MATLAB新能源车牌识别系统是一种利用MATLAB软件开发的自动识别新能源车辆车牌的系统。该系统通过图像处理和模式识别技术,能够从摄像头或者图片中准确地提取新能源车辆车牌的信息。该系统的工作流程如下:图像获取:通过摄像头或者从文件中获取图像数据。图像预处理:对获取的图......
  • [知识产权] 开源协议
    0引言引言这几年明显可以感受Github、Gitee上优秀的开源项目越来越多,这些开源软件给众多开发者提供了便利,小到个人兴趣爱好的小工具,大到国之重器突破卡脖子,以至于有的开发者调侃自己是面向Github编程。当然,绝大多数开源项目都会附带开源协议,大多数人可能对开源协议不太了解......
  • Github_以太网开源项目verilog-ethernet代码阅读与移植(二)
    实验背景在《Github_以太网开源项目verilog-ethernet代码阅读与移植(一)》中简要介绍了verilog-ethernet开源项目的目录构造等基本信息,下面介绍如何使用与移植步骤。实验内容verilog-ethernet项目的使用与移植准备工作实验步骤打开项目的中README.md文件内容如下:信......
  • 深入浅出ASPvNext开源框架学习视频
    学习目标:从入门到深度剖析.NetCoreABPvNext学习内容:源码目录结构依赖关系及内容ABPvNext第一课:源码目录结构依赖关系及内容DDD理论知识及代码实现ABPvNext第二课:DDD理论知识及代码实现ABP启动流程及模块化深入ABPvNext第三课:ABP启动流程及模块化深入深入动态API......
  • 一个用于管理多个 Node.js 版本的安装和切换开源工具
    大家好,今天给大家分享一个用于管理多个Node.js版本的工具 NVM(NodeVersionManager),它允许开发者在同一台机器上安装和使用不同版本的Node.js,解决了版本兼容性问题,为开发者提供了极大的便利。在开发环境中,特别是在处理多个项目时,每个项目可能依赖于不同版本的Node.js,NVM提供......
  • Matlab 2024a下载安装教程附安装包全网最详细的教程怎样安装?
    Matlab2024a是一款超厉害的数学计算软件。Matlab2024a下载安装教程附安装包全网最详细的教程怎样安装?它有很多新功能和改进呢。比如有新的常微分方程求解器,能更好地解决复杂微分方程问题,还支持灵敏度分析。后向斜杠操作符也改进了,处理大规模矩阵运算更高效。现在在脚本里可......
  • 零基础入门AI:一键本地运行各种开源大语言模型 - Ollama
    零基础入门AI:一键本地运行各种开源大语言模型-OllamaAI大模型全套学习资料“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了......