2024/5/24

所花时间:3小时

代码行:160行

博客量:1篇

了解到的知识点:

实验一:黄金分割法(0.618法)程序设计

 

一、实验目的

 

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

 

二、实验内容

1)请用0.618法求解优化问题:

 

的极小点和极小值(进退法确定初始区间),精度为10-6

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

3)要求输出内容包括:极小点、极小值、每次迭代的abalak的值;

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

1. 算法步骤

1.初始化:给定一个目标函数 f(x),以及搜索区间 [a, b],其中 a 和 b 分别为搜索区间的左右边界,满足 a < b。

2.计算两个内点:根据搜索区间 [a, b],计算两个内点 c 和 d,其中 c = b - 0.618 * (b - a),d = a + 0.618 * (b - a)。

3.比较函数值:计算 f(c) 和 f(d),并比较它们的大小。

4.缩小搜索区间:根据比较结果,更新搜索区间 [a, b]。如果 f(c) < f(d),则将搜索区间缩小为 [a, d];如果 f(c) > f(d),则将搜索区间缩小为 [c, b]。

5.重复迭代:重复执行步骤 2、3 和 4,直到满足停止条件(例如,搜索区间足够小或者迭代次数达到设定值)为止。

6.输出结果:最终输出搜索区间的中点作为优化结果,即 x* = (a + b) / 2。

 

 

2. 代码

function [s,phis,k,G,E]=gold(phi,a,b,delta,epsilon)

t=(sqrt(5)-1)/2;

h=b-a;

phia=feval(phi,a);phib=feval(phi,b);

p=a+(1-t)*h;%左试探点

q=a+t*h;%右试探点

phip=feval(phi,p);

phiq=feval(phi,q);

k=1;

G(k,:)=[a,b,p,q];

while(h>delta)

    if(phip<phiq)

            b=q;

            phib=phiq;

            q=p;

            phiq=phip;

            h=b-a;

            p=a+(1-t)*h;

            phip=feval(phi,p);

    else

            a=p;

            phia=phip;

            p=q;

            phip=phiq;

            h=b-a;

            q=a+t*h;

            phiq=feval(phi,q);

    end

    k=k+1;

    G(k,:)=[a,b,p,q];

end

ds=abs(b-a);dphi=abs(phib-phia);

if(phip<=phiq)

    s=p;phis=phip;

else

    s=q;phis=phiq;

end

E=[ds,dphi];

 

3. 结果

[s,phis,k,G,E]=gold(inline(f),a,b,delta,epsilon)

 

s =

 

    0.6525

 

 

phis =

 

    0.6673

 

 

k =

 

     6

 

 

G =

 

         0    2.0000    0.7639    1.2361

         0    1.2361    0.4721    0.7639

    0.4721    1.2361    0.7639    0.9443

    0.4721    0.9443    0.6525    0.7639

    0.4721    0.7639    0.5836    0.6525

    0.5836    0.7639    0.6525    0.6950

 

 

E =

 

    0.1803    0.0077

 

四.心得体会

在本次实验中,我学习了一维寻优黄金分割法的程序设计,这对于培养我的计算机应用能力是非常有帮助的。通过这次实验,我不仅学会了如何编写黄金分割法的程序,还掌握了如何缩小寻优区间来提高算法的效率。在实验过程中,我发现黄金分割法是一种简单而有效的优化算法,通过不断缩小搜索范围,可以快速找到最优解。我首先定义了一个目标函数,并设置了初始的搜索区间。然后根据黄金分割法的原理,不断更新搜索区间,直到满足停止条件为止。通过实验,我发现黄金分割法在寻优过程中具有很好的收敛性,能够快速找到最优解。而且,通过不断调整搜索区间的大小,可以进一步提高算法的效率。

 

posted @ 2024-05-24 22:31  为20岁努力  阅读(5)  评论(0编辑  收藏  举报