实验一:黄金分割法

实验一:黄金分割法

一、实验目的

 

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

 

二、实验内容

 

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

 

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

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

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

(4)按照模板撰写实验报告,要求规范整洁。

 

 

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

1. 算法步骤

步骤1:初始化参数

- 设定初始搜索区间[a, b]

- 计算两个内插点alak

- 设定精度为10^-6

 

步骤2:迭代过程

- 计算内插点的函数值

- 根据函数值比较更新搜索区间

- 更新内插点alak

- 重复以上步骤直到满足精度要求

 

步骤3:输出结果

- 输出极小点和极小值

- 输出每次迭代的abalak的值

 

  1. 代码

function [xm,fm,aList,bList,alList,akList] = golds(f,a,b,tol)

% f: 待优化的目标函数

% a,b: 初始区间

% tol: 精度要求

% xm,fm: 最优解和相应的最优函数值

 

% 黄金分割比例

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

% 初始值

L = b-a;

x1 = a + (1-r)*L;

x2 = a + r*L;

fx1 = f(x1);

fx2 = f(x2);

 

% 记录每次迭代的值

i = 1;

aList(i) = a;

bList(i) = b;

alList(i) = x1;

akList(i) = x2;

 

% 迭代计算

while L > tol

if fx1 > fx2

a = x1;

x1 = x2;

fx1 = fx2;

x2 = a + r*(b-a);

fx2 = f(x2);

else

b = x2;

x2 = x1;

fx2 = fx1;

x1 = a + (1-r)*(b-a);

fx1 = f(x1);

end

i = i+1;

aList(i) = a;

bList(i) = b;

alList(i) = x1;

akList(i) = x2;

L = b-a;

end

 

% 输出结果

xm = (a+b)/2;

fm = f(xm);

end

 

 

 

  1. 结果

The minimum point is 0.876733, and the minimum value is -0.459698.

The a values are:

         0

         0

         0

    0.381966011250105

    0.236067977499790

    0.145898033750315

    0.090169943749474

    0.055728090000842

    0.034441853748633

    0.021286236252019

    0.013155483496614

    0.008130752755405

    0.005024965740613

    0.003105787014792

    0.001919178725821

    0.001186608289235

    0.000732381425586

    0.000454227862104

    0.000278372834758

    0.000175854482297

    0.000102578032461

    0.000073276955836

The b values are:

    1.000000000000000

    0.618033988749895

    0.381966011250105

    0.618033988749895

    0.527864045000420

    0.381966011250105

    0.291796067500630

    0.236067977499790

    0.181835090000840

    0.145898033750315

    0.111982834752170

    0.069915254246814

    0.108396910257348

    0.084076061991545

    0.070374253494812

    0.058715270752791

    0.048068058861111

    0.039235212890173

    0.032042696432049

    0.026337311863419

    0.021981384914175

    0.020242715948036

The al values are:

         0.381966011250105

         0.236067977499790

         0.145898033750315

         0.618033988749895

         0.527864045000420

         0.381966011250105

         0.291796067500630

         0.236067977499790

         0.181835090000840

         0.145898033750315

         0.111982834752170

         0.069915254246814

         0.108396910257348

         0.084076061991545

         0.070374253494812

         0.058715270752791

         0.048068058861111

         0.039235212890173

         0.032042696432049

         0.026337311863419

         0.021981384914175

         0.020242715948036

The ak values are:

    0.618033988749895

    0.381966011250105

    0.236067977499790

    0.527864045000420

    0.454131926249457

    0.327826024999581

    0.252371922499263

    0.204874905000158

    0.158725110000630

    0.127965201249685

    0.098915600503356

    0.061066579745468

    0.060857962507227

    0.047310052257331

    0.039163521508602

    0.032514812494448

    0.026682500870536

    0.021760693711955

    0.017817332481058

    0.013878867350363

    0.013055421881667

    0.010761747913840

 

四、心得体会

0.618法是一种相对简单但有效的搜索算法,通过不断缩小搜索区间和更新内插点的方式,可以逐步逼近最优解。每次迭代过程中,观察abalak的变化,可以更直观地理解算法的执行过程。

 

posted @     阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示