5.26

实验四:共轭梯度法程序设计

 

一、实验目的

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

 

 

二、实验内容

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

(2)终止准则取

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

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

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

 

 

 

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

1. 算法步骤

初始点和初始梯度计算

 

选择初始点x0

计算初始梯度  g0=∇f(x0)

初始搜索方向  d0= - g0

迭代步骤

 

线搜索找到最佳步长  ak

αk​=argminαf(xk+αdk)

更新点:

xk+1=xk+αkdk

 

计算新的梯度:gk+1=∇f(xk+1)

计算 β

βk​=(gk)Tgk(gk+1)Tgk+1​

更新搜索方向:dk+1=−gk+1+βkdk

终止条件

 

如果 ∥gk+1∥≤10−6,则停止迭代。

2. 代码

function [x, k] = fr_conjugate_gradient()

    % 初始猜测

    x = [1; 2; 2; 2];

   

    % 计算初始梯度

    g = grad_f(x);

   

    % 初始搜索方向

    d = -g;

   

    % 终止准则的容差

    tol = 1e-6;

   

    % 最大迭代次数

    max_iter = 1000;

   

    for k = 1:max_iter

        % 线搜索找到最优步长 alpha

        alpha = line_search(@f, x, d);

       

        % 更新 x

        x = x + alpha * d;

       

        % 计算新的梯度

        g_new = grad_f(x);

       

        % 检查收敛性

        if norm(g_new) <= tol

            break;

        end

       

        % 计算 beta

        beta = (g_new' * g_new) / (g' * g);

       

        % 更新搜索方向

        d = -g_new + beta * d;

       

        % 更新梯度

        g = g_new;

    end

end

 

function y = f(x)

    % 计算目标函数值

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

end

 

function g = grad_f(x)

    % 计算目标函数的梯度

    g = zeros(4,1);

    g(1) = 2 * (x(1) + 10 * x(2)) + 40 * (x(1) - x(4))^3;

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

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

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

end

 

function alpha = line_search(f, x, d)

    % 简单回溯线搜索

    alpha = 1;

    rho = 0.5;

    c = 1e-4;

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

        alpha = alpha * rho;

    end

end

 

3. 结果

 

四、心得体会

最优梯度法 每次下降时 都是垂直梯度,如下图

共轭梯度法对最优梯度法进行了修正,搜索方向为共轭方向,将负梯度方向旋转了一个角度,每次往最优方向需要在负梯度方向进行修正。

 

posted @ 2024-06-18 09:21  晨观夕  阅读(0)  评论(0编辑  收藏  举报