4.13

所花时间:4小时

代码量:23

博客篇:1

工程数学

黄金分割法(0.618法)

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

 

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

 

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

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

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

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

 

 

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

1. 算法步骤

 

1.搜索初始区间

2.终止条件

3.1次计算左、右试探点

4.循环搜索

5.左试探点函数

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

function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon)%输入: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];
function [low,up]=minJT(fun,x0,h)
% fun是一个匿名函数

lamda=1;
x1=x0;x2=x0+h;

if fun(x1)>fun(x2)
x_panduan=x2;
while 1
x1=x2;x2=x1+lamda*h;
lamda=1.1*lamda;
if fun(x2)>fun(x_panduan)
break;
end
end
else
x_panduan=x1;
while 1
x1=x2;x2=x1-lamda*h;
lamda=1.1*lamda;
if fun(x2)>fun(x_panduan)
break;
end
end
end

low=min(x_panduan,x2);
up=max(x_panduan,x2);

end

 

posted @ 2024-04-13 18:59  umiQa  阅读(4)  评论(0编辑  收藏  举报