6.14学习任务

进行了工程数学实验四的练习

实验四:共轭梯度法

一、实验目的

掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序

 

二、实验内容

(1)求解无约束优化问题:

(2)终止准则取;

(3)完成FR共轭梯度法的MATLAB编程、调试;

(4)选取几个与实验二实验三中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);

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

 

三、算法步骤、代码、及结果

1. 算法步骤

 

2. 代码

% 定义目标函数及其梯度和海森矩阵

f = @(x) (x(1) + 10*x(2))^2 + 5*(x(3) - x(4))^2 + (x(2) - 2*x(3))^4 + 10*(x(1) - x(4))^4;

grad_f = @(x) [2*(x(1) + 10*x(2)) + 40*(x(1) - x(4))^3;

               20*(x(1) + 10*x(2)) + 4*(x(2) - 2*x(3))^3;

               10*(x(3) - x(4)) - 8*(x(2) - 2*x(3))^3;

               -10*(x(3) - x(4)) - 40*(x(1) - x(4))^3];

 

% 初始点和终止准则

x0_list = [-2, 2, 0, 0; -3, 3, 0, 0; 0.5, -1.5, 0, 0]; % 四个初始点

tol = 1e-5;

 

for i = 1:size(x0_list, 1)

    x0 = x0_list(i,:);

    x = x0';

    iter = 0;

    grad_norm = inf; % 初始化为正无穷

    d = -grad_f(x);

    alpha = 1; % 初始步长

    while grad_norm > tol

        iter = iter + 1;

        % 进行非精确线搜索,确定步长 alpha

        while f(x + alpha * d) > f(x) + 0.1 * alpha * grad_f(x)' * d

            alpha = alpha / 2;

        end

        % 计算 FR 共轭梯度下降方向

        if iter == 1

            g_prev = grad_f(x - d);

            beta = 0;

        else

            g = grad_f(x);

            y = g - g_prev;

            beta = (y' * (g - grad_f(x))) / (y' * y);

            g_prev = g;

        end

        s = alpha * d;

        d = -grad_f(x + s) + beta * d;

        x = x + s;

        grad_norm = norm(grad_f(x));

    end

    fprintf('Initial point (%g, %g, %g, %g)\n', x0(1), x0(2), x0(3), x0(4));

    fprintf('Number of iterations: %d\n', iter);

    fprintf('Optimal point: (%g, %g, %g, %g)\n', x(1), x(2), x(3), x(4));

    fprintf('Optimal function value: %g\n', f(x));

    fprintf('\n');

end

3. 结果

untitled7

Initial point (-2, 2, 0, 0)

Number of iterations: 179274

Optimal point: (-0.0113853, 0.00113849, -0.00567336, -0.00567451)

Optimal function value: 3.49412e-08

 

Initial point (-3, 3, 0, 0)

Number of iterations: 358642

Optimal point: (-0.0113853, 0.00113849, -0.00567336, -0.00567451)

Optimal function value: 3.49414e-08

 

Initial point (0.5, -1.5, 0, 0)

Number of iterations: 89472

Optimal point: (0.0113852, -0.00113849, 0.00567334, 0.00567449)

Optimal function value: 3.49408e-08

posted @ 2024-06-14 10:53  Code13  阅读(5)  评论(0编辑  收藏  举报