posts - 296,comments - 1,views - 2995

一.所花时间

0.2h

二.代码量

20行

三.博客量

1篇

四.了解到的知识点

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

一、实验目的

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

二、实验内容

(1)请用0.618法求解优化问题:的极小点和极小值(进退法确定初始区间),精度为10-6

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

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

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

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

1.算法步骤

  (1)将初始区间[a,b]分成两个相等的部分,即left=a+(1-golden_ratio)(b-a)  right=a+golden_ratio(b-a),其中golden_ratio=0.618

  (2)计算函数在left和right处的函数值,设为fl和fr

  (3)比较fl和fr的大小,如果fl<fr,则新的搜索区间为[a,right],否则为[left,b]

  (4)不断重复上述步骤,直到达到预定的精度要求为止。

2.代码

function [s,phis,G]=golds(phi,a,b,epsilon,delta)
% 输入:phi是目标函数,a,b是搜索区间的两个端点
% epsilon,delta分别是自变量和函数值的容许误差 
% 输出:i是迭代次数,s。phis分别是近似近似极小值点和极小值
% ds,dphi是s和phis的误差限,G是ix4矩阵
% 其第i行分别是a,p,q,b的第k次迭代值[ai,pi,qi,bi]
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);
i=1;  G(i,:)=[a,p,q,b];
while(abs(phib-phia)>delta)|(h>epsilon)
    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
    i=i+1; G(i,:)=[a,p,q,b];
    fprintf('每次迭代的a、b、al、ak的值: (%g, %g, %g, %g)\n', a, p, q, b);
end

if(phip<=phiq)
    s=p;phis=phip;
else
    s=q;phis=phiq;
end
ds=abs(b-a);dphi=abs(phib-phia);
fprintf('极小点: %g\n', s);
fprintf('极小值: %g\n', phis);


% 命令行输入
% phi=@(x)x^2-x+6;
% golds(phi,0,1,1e-6,1e-6);

3.结果

四、心得体会

 

posted on   leapss  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示