工程数学实验1

源码

% 定义目标函数

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法)能够有效地搜索优化问题的解,为后续无约束优化方法的学习和编程奠定了基础。

 

 

 

 

 

 

posted @   云边上打盹  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示