MATLAB实验一:一维寻优法(0.618法)程序设计
一、实验目的
通过一维寻优黄金分割法的程序设计,培养计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。
二、实验内容
(1)用0.618法求解优化问题:min f(x)=x^2 - sin(x)
在区间[0,1]上的极小点和极小值;
(2)根据0.618法算法步骤编写Matlab的程序实现0.618搜索法;
(3)输出内容包括:极小点、极小值、每次迭代的a、b、al、ak的值;
三、算法步骤、代码、及结果
1. 算法步骤
1.搜索初始区间
2.终止条件
3.第1次计算左、右试探点
4.循环搜索
5.左试探点函数
6.判断最优解,并存放到xopt最优解,fmin最小函数值
7.将每次迭代变量存放到txt文件中
%实验1 0.618法 clear all close all clc % 搜索初始区间 a=0; b=1; % 终止条件 err=10^-5; % tao=0.618 tao=0.618; % 第1次计算左、右试探点 phia = a^2+sin(a); %左边界函数值 phib = b^2+sin(b); %右边界函数值 p=a+(1-tao)*(b-a); %左试探点 phip=p^2+sin(p); %左试探点函数值 q=a+tao*(b-a); %右试探点 phiq=q^2+sin(q); %右试探点函数值 k=1; % 循环变量 k G(k,:)=[a,b,p,q]; % 用于存储 每次迭代的左右边界,左右试探点 %循环搜索 while abs(b-a)>err if phip<phiq b = q; %右边界更新:用上一次迭代的右试探点更新右边界 q = p; %右试探点更新; phiq = phip; %更新右试探点函数值; p = a+(1-tao)*(b-a); %左试探点更新 phip = p^2+sin(p); %左试探点函数值 else a = p; % 右边界更新:用上一次迭代的右试探点更新右边界 p = q; % 左试探点更新 phip = phiq; % a_left(k)^2+sin(a_left(k)); %左试探点函数值 q = a+tao*(b-a); % 右试探点更新 phiq=q^2+sin(q); % 右试探点函数值 end k=k+1; G(k,:)=[a,b,p,q]; end % 判断最优解,并存放到xopt最优解,fmin最小函数值 if phip<phiq xopt=p; %最优解 fmin=phip; %最小函数值 else xopt=q; fmin=phiq; end %将每次迭代变量存放到txt文件中 fileID=fopen('data2.txt','w'); fprintf(fileID,'%6s %5s %10s %10s %10s \r\n','迭代次数','a','b','p','q'); for m=1:k fprintf(fileID,'%6.0f %10.6f %10.6f %10.6f %10.6f \r\n',m,G(m,1),G(m,2),G(m,3),G(m,4)); end fprintf(fileID,' x_opt=%10.7f, f_min=%10.7f',xopt,fmin); fclose(fileID);
3. 结果
迭代次数 a b p q 1 0.000000 1.000000 0.382000 0.618000 2 0.000000 0.618000 0.236076 0.382000 3 0.000000 0.382000 0.145924 0.236076 4 0.000000 0.236076 0.090181 0.145924 5 0.000000 0.145924 0.055743 0.090181 6 0.000000 0.090181 0.034449 0.055743 7 0.000000 0.055743 0.021294 0.034449 8 0.000000 0.034449 0.013160 0.021294 9 0.000000 0.021294 0.008134 0.013160 10 0.000000 0.013160 0.005027 0.008134 11 0.000000 0.008134 0.003107 0.005027 12 0.000000 0.005027 0.001920 0.003107 13 0.000000 0.003107 0.001187 0.001920 14 0.000000 0.001920 0.000734 0.001187 15 0.000000 0.001187 0.000453 0.000734 16 0.000000 0.000734 0.000280 0.000453 17 0.000000 0.000453 0.000173 0.000280 18 0.000000 0.000280 0.000107 0.000173 19 0.000000 0.000173 0.000066 0.000107 20 0.000000 0.000107 0.000041 0.000066 21 0.000000 0.000066 0.000025 0.000041 22 0.000000 0.000041 0.000016 0.000025 23 0.000000 0.000025 0.000010 0.000016 24 0.000000 0.000016 0.000006 0.000010 25 0.000000 0.000010 0.000004 0.000006 x_opt= 0.0000037, f_min= 0.0000037
作者:冰稀饭Aurora
出处:https://www.cnblogs.com/rsy-bxf150/p/17436758.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!