实验一:黄金分割法(0.618法)程序设计
一、实验目的
通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。
二、实验内容
(1)请用0.618法求解优化问题:
的极小点和极小值(进退法确定初始区间),精度为10-6;
(2)根据0.618法算法步骤编写Matlab的程序实现0.618搜索法;
(3)要求输出内容包括:极小点、极小值、每次迭代的a、b、al、ak的值;
(4)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
(1)学习MATLAB基础编程知识;
(2)认真学习0.618法算法步骤,编写MATLAB程序golds函数;
2. 代码
function [s,phis,k,G,E]=golds(phi,a,b,delta)%输入:phi是目标函数,a,b是搜索区间的两个端点delta,epsilon分别是自变量和函数值的容许误差9%输出:s,phis分别是近似极小点和极小值,G是nx4矩阵。其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk],E=[ds,dphi],分别是s和phis的误差限
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,p,q,b,h];
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,p,q,b,h];
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. 结果
四、心得体会
- 理论与实践结合的重要性:将数学理论如黄金分割比应用到实际问题中,如优化函数的最小值搜索,能够深刻理解理论知识的力量和实用性。通过编程实现这一算法,让抽象的概念变得具体可操作。
- 算法效率与精度平衡:0.618法以其简洁的计算规则和快速的收敛速度,在很多情况下都能有效找到极值点。但同时,通过实验我也会意识到选择合适的初始区间和终止条件对于提高搜索效率和保证解的精度至关重要。
- 编程技能的提升:编写和调试MATLAB代码不仅增强了我的编程能力,还让我学会了如何利用编程语言工具解决实际问题。这包括了如何定义函数、循环控制、条件判断以及数组操作等基本技能。
- 数据分析能力:通过观察每次迭代过程中的a、b、c、d值变化,可以直观地理解算法逐步逼近最优解的过程,增强对迭代算法工作原理的理解,同时也锻炼了数据分析和解读实验结果的能力。
- 问题解决思路的拓展:面对不同的优化问题,学会灵活调整和应用现有的算法框架,思考如何根据问题特性进行微调,比如调整初始区间的选择策略、设定更合理的收敛准则等,培养了解决复杂问题的创新思维。
- 实验报告撰写技巧:整理实验过程、分析结果并撰写报告,锻炼了科学严谨的写作习惯,以及如何清晰、逻辑性地表达实验思想和结论,这对于学术研究和工程实践都是极其重要的技能。
综上所述,本次实验不仅是对0.618法这一经典优化算法的学习和应用,更是对解决问题能力、编程技能、数据分析和科研写作等多方面能力的综合训练,对今后的学习和工作都将产生深远的影响。
标签:feval,phi,0.618,6.15,算法,实验,phiq,phip,数学 From: https://www.cnblogs.com/zzqq1314/p/18246004