工程数学1
实验一:一维寻优法(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);
- 结果
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 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署