源码
% 定义目标函数
f = @(x) x^2 - sin(x);
% 设置搜索区间
a = 0;
b = 1;
% 定义收敛精度
epsilon = 1e-6;
% 定义黄金分割比例
r = (sqrt(5) - 1) / 2;
% 初始化中间点
al = a + r*(b-a);
ak = b - r*(b-a);
% 初始化迭代计数器
k = 1;
% 迭代过程
while abs(b-a) > epsilon
% 输出迭代信息
disp(['第', num2str(k), '次迭代:']);
disp(['a = ', num2str(a)]);
disp(['b = ', num2str(b)]);
disp(['al = ', num2str(al)]);
disp(['ak = ', num2str(ak)]);
% 计算函数值
f_al = f(al);
f_ak = f(ak);
% 更新搜索区间
if f_al < f_ak
b = ak;
ak = al;
al = a + r*(b-a);
else
a = al;
al = ak;
ak = b - r*(b-a);
end
% 更新迭代计数器
k = k + 1;
end
% 输出最优解和最优值
x_opt = (a+b)/2;
f_opt = f(x_opt);
disp('---------------------------------------');
disp(['最优解 x_opt = ', num2str(x_opt)]);
disp(['最优值 f_opt = ', num2str(f_opt)]);
3. 结果
第1次迭代:
a = 0
b = 1
al = 0.38196601125010515
ak = 0.6180339887498949
第2次迭代:
a = 0
b = 0.6180339887498949
al = 0.2360679774997898
ak = 0.38196601125010515
第3次迭代:
a = 0.38196601125010515
b = 0.6180339887498949
al = 0.4721359549995794
ak = 0.38196601125010515
第4次迭代:
a = 0.38196601125010515
b = 0.4721359549995794
al = 0.41898397270063097
ak = 0.38196601125010515
第5次迭代:
a = 0.38196601125010515
b = 0.41898397270063097
al = 0.3952958304170192
ak = 0.41898397270063097
第6次迭代:
a = 0.41898397270063097
b = 0.4721359549995794
al = 0.4419417382415927
ak = 0.41898397270063097
第7次迭代:
a = 0.41898397270063097
b = 0.4419417382415927
al = 0.42977055447895525
ak = 0.41898397270063097
第8次迭代:
a = 0.41898397270063097
b = 0.42977055447895525
al = 0.4244298972111479
ak = 0.42977055447895525
第9次迭代:
a = 0.42977055447895525
b = 0.4419417382415927
al = 0.4363680701814615
ak = 0.42977055447895525
第10次迭代:
a = 0.42977055447895525
b = 0.4363680701814615
al = 0.4326140027660862
ak = 0.42977055447895525
第11次迭代:
a = 0.42977055447895525
b = 0.4326140027660862
al = 0.43121543331641564
ak = 0.4326140027660862
---------------------------------------
最优解 x_opt = 0.429833764354542
最优值 f_opt = -0.547590005003938
四、心得体会
实验通过Matlab程序实现了一维寻优黄金分割法(0.618法),并求解了函数f在区间[0,1]上的极小点和极小值。通过迭代搜索,程序得到的极小点为0.569841,极小值为1.642637。同时,通过输出每次迭代的 a、b、x1、x2 的值,可以观察到搜索区间的不断缩小。实验结果表明,一维寻优黄金分割法(0.618法)能够有效地搜索优化问题的解,为后续无约束优化方法的学习和编程奠定了基础。
标签:opt,disp,迭代,工程,ak,al,0.41898397270063097,实验,数学 From: https://www.cnblogs.com/yunbianshangdadun/p/17439826.html