首页 > 编程语言 >MATLAB实验一:一维寻优法(0.618法)程序设计

MATLAB实验一:一维寻优法(0.618法)程序设计

时间:2023-05-27 15:13:35浏览次数:33  
标签:0.618 迭代 0.000000 寻优法 MATLAB tao sin 试探

一、实验目的

通过一维寻优黄金分割法的程序设计,培养计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。

二、实验内容

(1)用0.618法求解优化问题:min f(x)=x^2 - sin(x)

在区间[0,1]上的极小点和极小值;

(2)根据0.618法算法步骤编写Matlab的程序实现0.618搜索法;

(3)输出内容包括:极小点、极小值、每次迭代的a、b、al、ak的值;

三、算法步骤、代码、及结果

   1. 算法步骤

1.搜索初始区间

2.终止条件

3.第1次计算左、右试探点

4.循环搜索

5.左试探点函数

6.判断最优解,并存放到xopt最优解,fmin最小函数值

7.将每次迭代变量存放到txt文件中

 

%实验1 0.618法
clear all
close all
clc
% 搜索初始区间
a=0;
b=1;
% 终止条件
err=10^-5;
% tao=0.618
tao=0.618;
% 第1次计算左、右试探点
phia = a^2+sin(a);  %左边界函数值
phib = b^2+sin(b);  %右边界函数值
p=a+(1-tao)*(b-a);  %左试探点
phip=p^2+sin(p);    %左试探点函数值
q=a+tao*(b-a);      %右试探点
phiq=q^2+sin(q);    %右试探点函数值
k=1;                % 循环变量 k
G(k,:)=[a,b,p,q];   % 用于存储 每次迭代的左右边界,左右试探点
%循环搜索
while abs(b-a)>err
   if phip<phiq
        b = q;               %右边界更新:用上一次迭代的右试探点更新右边界          
        q = p;               %右试探点更新;
        phiq = phip;         %更新右试探点函数值;
        p = a+(1-tao)*(b-a); %左试探点更新        
        phip = p^2+sin(p);   %左试探点函数值
   else
        a = p;               % 右边界更新:用上一次迭代的右试探点更新右边界
        p = q;               % 左试探点更新
        phip = phiq;         % a_left(k)^2+sin(a_left(k)); %左试探点函数值
        q = a+tao*(b-a);     % 右试探点更新        
        phiq=q^2+sin(q);     % 右试探点函数值   
   end
   k=k+1;
   G(k,:)=[a,b,p,q];
end
% 判断最优解,并存放到xopt最优解,fmin最小函数值
if phip<phiq
    xopt=p;      %最优解
    fmin=phip;   %最小函数值
else
    xopt=q;      
    fmin=phiq;
end
%将每次迭代变量存放到txt文件中
fileID=fopen('data2.txt','w');
fprintf(fileID,'%6s %5s %10s %10s %10s \r\n','迭代次数','a','b','p','q');
for m=1:k
    fprintf(fileID,'%6.0f %10.6f %10.6f %10.6f %10.6f \r\n',m,G(m,1),G(m,2),G(m,3),G(m,4));
end
fprintf(fileID,'     x_opt=%10.7f, f_min=%10.7f',xopt,fmin);
fclose(fileID);

 

 3. 结果

 

 迭代次数     a          b          p          q

     1   0.000000   1.000000   0.382000   0.618000

     2   0.000000   0.618000   0.236076   0.382000

     3   0.000000   0.382000   0.145924   0.236076

     4   0.000000   0.236076   0.090181   0.145924

     5   0.000000   0.145924   0.055743   0.090181

     6   0.000000   0.090181   0.034449   0.055743

     7   0.000000   0.055743   0.021294   0.034449

     8   0.000000   0.034449   0.013160   0.021294

     9   0.000000   0.021294   0.008134   0.013160

    10   0.000000   0.013160   0.005027   0.008134

    11   0.000000   0.008134   0.003107   0.005027

    12   0.000000   0.005027   0.001920   0.003107

    13   0.000000   0.003107   0.001187   0.001920

    14   0.000000   0.001920   0.000734   0.001187

    15   0.000000   0.001187   0.000453   0.000734

    16   0.000000   0.000734   0.000280   0.000453

    17   0.000000   0.000453   0.000173   0.000280

    18   0.000000   0.000280   0.000107   0.000173

    19   0.000000   0.000173   0.000066   0.000107

    20   0.000000   0.000107   0.000041   0.000066

    21   0.000000   0.000066   0.000025   0.000041

    22   0.000000   0.000041   0.000016   0.000025

    23   0.000000   0.000025   0.000010   0.000016

    24   0.000000   0.000016   0.000006   0.000010

    25   0.000000   0.000010   0.000004   0.000006

     x_opt= 0.0000037, f_min= 0.0000037

 

 

标签:0.618,迭代,0.000000,寻优法,MATLAB,tao,sin,试探
From: https://www.cnblogs.com/rsy-bxf150/p/17436758.html

相关文章

  • MATLAB实验二:最速下降法程序设计
    一、实验目的通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代公式;通过此次实验,进一步巩固最速下降法的基本原理和思想。二、实验内容(1)求解无约束优化问题:(2)完成最速下降法(负梯度法)的MATLAB编程、调试;(3)要求选取多个......
  • MATLAB实验三:Newton法程序设计
    一、实验目的掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;正确处理实验数据和分析实验结果及调试程序。二、实验内容(1)求解无约束优化问题(3)完成Newton法(牛顿法)的MATLAB编程、调试;(4)选取几个与实验二中相同的初始点,并给出相关实......
  • MATLAB实验四:共轭梯度法程序设计
    一、实验目的掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。二、实验内容 (1)求解无约束优化问题:minf(x)=100(x1^2-x2)^2+(x1-1)^2,x∈R;(2)终止准则取||f(x^k)||<=10^-5,搜索方法采用非精确搜索Armijo;......
  • m基于FPGA的PID控制器实现,包含testbench测试程序,PID整定通过matlab使用RBF网络计算
    1.算法仿真效果vivado2019.2、matlab2022a仿真结果如下:    2.算法涉及理论知识概要        PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器......
  • Matlab求解非线性方程的根
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • m基于负价环N算法的无线传感器网络性能matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要负环的定义:负环是指权值和为负数的环。负环会使图的最短路径计算陷入死循环,因此,存在负环的图不存在最短路。 负环的计算方法:负环有两种计算方法,都是基于Bellman-Ford算法或者SPFA算法。第......
  • 基于QPSK调制和CoSaMP算法的信道估计均衡算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要 均衡器的分类    •均衡处理方法       时域均衡器:单载波数字通信中多采用时域均衡器,从时域的冲激响应考虑       正交频分复用OFDM调制:采用频域均衡    •是否......
  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下:matlab仿真:0.5码率,H是4608×9216的矩阵。FPGA仿真:对比如下:2.算法涉及理论知识概要LDPC译码分为硬判决译码和软判决译码。硬判决译码又称代数译码,主要代表是比特翻转(BF)译码算法,它的实现比较简单,但是译码性能很差......
  • m基于负价环N算法的无线传感器网络性能matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要负环的定义:负环是指权值和为负数的环。负环会使图的最短路径计算陷入死循环,因此,存在负环的图不存在最短路。负环的计算方法:负环有两种计算方法,都是基于Bellman-Ford算法或者SPFA算法。第一种算法是:统计每个点的......
  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下: matlab仿真: 0.5码率,H是4608×9216的矩阵。   FPGA仿真:    对比如下:   2.算法涉及理论知识概要         LDPC译码分为硬判决译码和软判决译码。         硬判决译码又称......