实验一:一维寻优法(0.618 法)程序设计
实验一:一维寻优法(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 的值;
(4)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
步骤1:置初始区间[a,b],给定待优化函数,置精度要求eps,计算左右试探点x1=a+0.382*(b-a),x2=a+0.618*(b-a)及相应的函数值f(x1), f(x2)
步骤2:如果a-b<eps, 输出最优解a+b/2, 终止, 否则进入步骤3
步骤3:置k=k+1,计算x1=a+0.382*(b-a),x2=a+0.618*(b-a)
步骤4:如果 f(x1)>f(x2) 置a=x1,b=b 否则,置a=a,b=x2; 转步骤2
2. 代码
golds.m:
function[] = goldmin()
% 黄金分割法求解函数最小值
% 输入
% f 待优化函数
% a,b 区间
% eps 精度
% 输出
% 每次迭代的 k次数 a、b、al 、ak 的值
% x 最优解
%%
clear;
format short
f=input('请输入函数表达式:f = ');
a = input('请输入区间左端点a的值:');
b = input('请输入区间右端点b的值:');
eps= input('请输入运算精度:');
k=0;
x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
fprintf(' k [a,b] x1 x2 f(x1) f(x2)\n ');
fprintf('%d [%.3f,%.3f] %.3f %.3f %.4f %.4f\n', k,a,b,x1,x2,f(x1),f(x2));
while abs(a-b)>eps
k=k+1;
x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
if f(x1)>f(x2)
a=x1;
b=b;
elseif f(x1)<=f(x2)
a=a;
b=x2;
end
fprintf(' %d [%.3f,%.3f] %.3f %.3f %.4f %.4f\n', k,a,b,x1,x2,f(x1),f(x2));
end
fprintf('经过%d次迭代,可取%.3f作为近似最优解',k,(a+b)/2);
3. 结果
golds();
请输入函数表达式:f = @(x) x^2-sin(x);
请输入区间左端点a的值:0
请输入区间右端点b的值:1
请输入运算精度:0.001
k [a,b] x1 x2 f(x1) f(x2)
0 [0.000,1.000] 0.382 0.618 -0.2269 -0.1975
1 [0.000,0.618] 0.382 0.618 -0.2269 -0.1975
2 [0.236,0.618] 0.236 0.382 -0.1782 -0.2268
3 [0.382,0.618] 0.382 0.472 -0.2268 -0.2319
4 [0.382,0.528] 0.472 0.528 -0.2319 -0.2251
5 [0.382,0.472] 0.438 0.472 -0.2323 -0.2319
6 [0.416,0.472] 0.416 0.438 -0.2311 -0.2323
7 [0.438,0.472] 0.438 0.451 -0.2323 -0.2325
8 [0.438,0.459] 0.451 0.459 -0.2325 -0.2324
9 [0.446,0.459] 0.446 0.451 -0.2324 -0.2325
10 [0.446,0.454] 0.451 0.454 -0.2325 -0.2324
11 [0.449,0.454] 0.449 0.451 -0.2325 -0.2325
12 [0.449,0.452] 0.451 0.452 -0.2325 -0.2325
13 [0.449,0.451] 0.450 0.451 -0.2325 -0.2325
14 [0.450,0.451] 0.450 0.450 -0.2325 -0.2325
15 [0.450,0.450] 0.450 0.450 -0.2325 -0.2325
经过15次迭代,可取0.450作为近似最优解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?