5.1

题目;

上机实验一:黄金分割法(0.618法)程序设计

 

 

1、基本要求

通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。

2、主要内容

(1)请用0.618法求解优化问题:

 

的极小点和极小值(进退法确定初始区间),精度为10-6

(2)根据0.618法算法步骤编写Matlab的程序实现0.618搜索法;

(3)要求输出内容包括:极小点、极小值、每次迭代的abalak的值;

(4)按照模板撰写实验报告,要求规范整洁。

3、操作要点

(1)学习MATLAB基础编程知识;

(2)认真学习0.618法算法步骤,编写MATLAB程序golds函数;

(3)调用golds函数,输入题目参数;

(4)撰写实验报告。

4、主要仪器设备

微机及Matlab软件。

 代码:

function [xmin, ymin] = golds(f, a, b, tol)

    goldenRatio = (sqrt(5) - 1) / 2;

    if f(a) > f(b) % È·±£a´¦º¯ÊýֵСÓÚb´¦£¬±ãÓÚºóÐøÅжÏ

        temp = a;

        a = b;

        b = temp;

    end

    c = b - goldenRatio * (b - a);

    d = a + goldenRatio * (b - a);

    while abs(b - a) > tol

        if f(c) < f(d)

            b = d;

            d = c;

            c = b - goldenRatio * (b - a);

        else

            a = c;

            c = d;

            d = a + goldenRatio * (b - a);

        end

    end

    xmin = (a + b) / 2;

    ymin = f(xmin);

end

 

3. 结果

>> f = @(x) x^2 - 4*x + 3; % 定义目标函数

a = -10; b = 10; % 初始搜索区间

tol = 1e-6; % 精度要求

[xmin, ymin] = golds(f, a, b, tol);

fprintf('极小点 = %f, 极小值 = %f\n', xmin, ymin);

极小点 = 2.000000, 极小值 = -1.000000

posted @ 2024-06-19 18:20  孙锺鸣  阅读(2)  评论(0编辑  收藏  举报