MATLAB编写黄金分割法

这篇具有很好参考价值的文章主要介绍了MATLAB编写黄金分割法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下是使用MATLAB编写黄金分割法求解 f ( x ) = x 2 + 2 x f(x)=x^2+2x f(x)=x2+2x在区间 [ − 3 , 5 ] [-3,5] [3,5]上的最小值的代码:

function [xmin,fmin] = goldenSectionMethod(f,a,b,tol)
% 黄金分割法求解函数f在区间[a,b]上的最小值
% 输入:
%   f - 函数句柄,指向要优化的目标函数
%   a, b - 区间[a,b],需要满足a<b
%   tol - 迭代精度,默认值为1e-6
% 输出:
%   xmin - 最小值的横坐标
%   fmin - 最小值

if nargin < 4
    tol = 1e-6;
end

% 黄金分割比例
phi = (1 + sqrt(5)) / 2;

% 初始化
s = b - phi * (b-a);  % 第一步
t = a + phi * (b-a);  % 第一步
fs = f(s); ft = f(t); % 第一步
iter = 0;

while abs(b-a) > tol
    iter = iter + 1;
    if fs < ft
        b = t;
        t = s;
        s = b - (t-a);
        ft = fs;
        fs = f(s);
    else
        a = s;
        s = t;
        t = a + (b-t);
        fs = ft;
        ft = f(t);
    end
end

xmin = (a+b)/2;
fmin = f(xmin);

disp(['迭代次数:', num2str(iter)]);

end

我们在主程序中调用该函数,并可视化优化过程:

% 求解f(x)在[-3,5]上的最小值
f = @(x) x^2 + 2*x;
a = -3;
b = 5;

% 应用黄金分割法
tic;
[xmin,fmin] = goldenSectionMethod(f,a,b);
toc;

% 作图
x = linspace(a,b,1000);
y = arrayfun(f,x);
figure;
plot(x,y,'LineWidth',2);
hold on;
plot(xmin,fmin,'r*','MarkerSize',10);
grid on;
xlabel('x');
ylabel('f(x)');
title(['f(x)=x^2+2x在[',num2str(a),',',num2str(b),']上的黄金分割法优化']);
legend('函数曲线',['最小点(',num2str(xmin),',',num2str(fmin),')']);

在运行上述代码后,我们可以得到如下的优化结果:

迭代次数:18
Elapsed time is 0.000621 seconds.

同时也可以得到如下的图像,展示了优化过程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YICxmkN9-1681116905370)(https://cdn.nlark.com/yuque/0/2021/png/151482/1627456468342-061f1ade-72db-49c0-a54a-89e6c2b6ffdc.png)]

从图像和输出结果中可以看出,使用黄金分割法可以在迭代次数不多的情况下快速得到 f ( x ) = x 2 + 2 x f(x)=x^2+2x f(x)=x2+2x的最小值 x = − 1 x=-1 x=1。什么? 请问有什么需要我帮忙继续的吗?文章来源地址https://www.toymoban.com/news/detail-745096.html

到了这里,关于MATLAB编写黄金分割法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab|图像处理04|图像分割-阈值分割方法

    一、人工阈值分割方法threshold_test1.m 1、分析修改阈值对分割结果的影响 分析:取直方图中第一个谷底的灰度值作为阈值,图像分割效果较好。当阈值改变时,分割后的图像有部分信息丢失,本图中当阈值减小时分割后的图像黑色部分较多,当阈值增大时分割后的图像白色部

    2024年02月11日
    浏览(53)
  • matlab中图像分割技术之二阈值分割

    1.直方图双峰法 2.最大类间方差法 3.迭代法 阈值化图像分割 是一种最基本的图像分割方法,其基本原理就是选取一个或多个处于灰度图像范围之中的灰度阈值,然后将图像中各个像素的灰度值与阈值比较,并根据比较的结果将图像中的对应像素分成两类或多类,从而把图像划

    2024年02月12日
    浏览(39)
  • 图像分割(MATLAB实现)

    图像分割 就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。 现有的图像分割方法主要分以下几类: 基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法 等

    2024年02月08日
    浏览(33)
  • MATLAB-图像分割

    实验目的 –掌握图像分割的原理 –掌握基于阈值的分割方法 –掌握区域生长算法 实验原理 1.图像的二值化的基本原理 图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得

    2024年02月04日
    浏览(33)
  • 【MATLAB】图像分割实验

    充分利用所学各种图像处理技术,实现对图像的综合处理,加深对基础知识的理解和应用。 (1)将已知图像进行消噪处理; (2)对彩色图像进行目标和背景分析; (3)自编多种分割算法(其中必须包含:最大类间分割、基于迭代的阈值分割、基于Hough变换、基于kmeans分割

    2024年02月04日
    浏览(37)
  • Matlab图像分割

    第一部分.图像分割的含义        图像分割是根据图像的灰度、颜色、几何形状、空间纹理等特征把图像分割为若干个互不相交的区域;实际上就是将自己在图片中的目标给提取出来,与背景分离; 第二部分.Matlab的图像分割的种类    1.边缘检测法(利用目标与背景之间交

    2024年02月05日
    浏览(32)
  • 图像分割(matlab)

    图像分割是将一幅数字图像分割成不同区域,在同一区域内具有在一定的准测下可认为是相同的性质,如灰度、颜色、纹理等,而任何相邻区域之间其性质具有明显的区别,主要包括边缘分割技术、阈值分割技术和区域分割技术 边缘分割技术 利用物体和背景在某种图像特性

    2024年02月04日
    浏览(30)
  • Matlab分割彩色图像

    彩色图像 彩色图像除有亮度信息外,还包含有颜色信息。以最常见的RGB(红绿蓝)彩色空间为例来简要说明彩色图像: 彩色图像可按照颜色的数目来划分。例如,256色图像和真彩色图像(2的16次方=216777216种颜色)等,通常RGB图像中每个像素都是用24位二进制数表示的,故也

    2024年02月11日
    浏览(32)
  • Matlab图像处理-多阈值分割

    多阈值分割 在某些时候图像使用单独的阈值不能够对其实现有效地分割,例如在灰度直方图中有明显的三个峰时候,我们需要提取中间峰,这时我们使用双阈值分割会得到较好的分割效果。如下例子中生成灰度直方图中有两个峰,选择合适的两个阈值进行多阈值分割后可生成

    2024年02月09日
    浏览(50)
  • 基于matlab的图像分割与识别

    总的来说,图像分析的大致步骤为: 1、把图像 分割 成不同的区域或把不同的对象分开; 2、找出分开的各区域的特征; 3、识别图像中要找的对象或对图像分类; 4、对不同区域进行描述或寻找出不同区域的相互联系,进而找出相似结构或将相关区域连成一个有意义的结构。

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包