共轭梯度法程序设计

一、实验目的

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

 

二、实验内容

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

(2)终止准则取;

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

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

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

1. 算法步骤

FR共轭梯度法的步骤

初始化:

x = x0:将初始点设为x0。

g = gradf(x):计算目标函数在x处的梯度g。

d = -g:将搜索方向设为梯度的负值-g。

iter = 0:迭代次数初始化为0。

delta_new = g' * g:计算当前梯度范数的平方delta_new。

delta0 = delta_new:记录初始梯度范数的平方delta0。

 

迭代条件:

while (sqrt(delta_new) > tol * sqrt(delta0)) && (iter < maxIter):

当当前梯度范数的平方根大于tol乘以初始梯度范数的平方根,且迭代次数小于最大迭代次数时,进行迭代。

 

线搜索:

alpha = lineSearch(f, gradf, x, d):进行线搜索,找到合适的步长alpha。

x = x + alpha * d:更新当前点x。

 

更新梯度和计算beta:

g = gradf(x):计算新的梯度g。

delta_old = delta_new:保存旧的梯度范数平方delta_old。

delta_new = g' * g:计算新的梯度范数平方delta_new。

beta = delta_new / delta_old:计算共轭方向系数beta。

 

更新搜索方向:

d = -g + beta * d:更新搜索方向d。

iter = iter + 1:迭代次数加1。

 

返回结果:

当迭代结束时,返回最优解x、最优值fval及迭代次数iter。

fval = f(x):计算最优解处的目标函数值。

 

 

2. 代码

function [x, fval, iter] = FR_ConjugateGradient(f, gradf, x0, tol, maxIter)

    % 输入:

    % f      - 目标函数句柄

    % gradf  - 目标函数的梯度句柄

    % x0     - 初始点

    % tol    - 终止准则

    % maxIter- 最大迭代次数

   

    % 输出:

    % x      - 最优解

    % fval   - 最优值

    % iter   - 迭代次数

   

    % 初始化

    x = x0;

    g = gradf(x);

    d = -g;

    iter = 0;

    delta_new = g' * g;

    delta0 = delta_new;

   

    % 迭代

    while (sqrt(delta_new) > tol * sqrt(delta0)) && (iter < maxIter)

        % 线搜索

        alpha = lineSearch(f, gradf, x, d);

        x = x + alpha * d;

        g = gradf(x);

        delta_old = delta_new;

        delta_new = g' * g;

       

        % 计算beta

        beta = delta_new / delta_old;

       

        % 更新搜索方向

        d = -g + beta * d;

        iter = iter + 1;

    end

   

    fval = f(x);

end

 

function alpha = lineSearch(f, gradf, x, d)

    % 简单线搜索算法,可以根据需求修改

    alpha = 1;

    rho = 0.1;

    c = 1e-4;

   

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

        alpha = rho * alpha;

    end

end

 

 

 

 

3. 结果

最优解:

   -0.0018

    0.0002

   -0.0069

   -0.0069

 

最优值:

   4.5406e-08

 

迭代次数:

   311

posted on 2024-06-05 16:24  Daniel350  阅读(29)  评论(0编辑  收藏  举报