matlab 取共轭_优化算法之共轭梯度法

ab4021d05ba41933992a7046ed0c70a6.png

共轭梯度法是Hestenes和Stiefel(1952年)在求解大规模线性方程组时创立的一种迭代算法。1964年,Fletcher和Reeves将其引入非线性最优化问题,创立了非线性共轭梯度法。

该方法基于前一迭代点的搜索方向当前迭代点的负梯度方向进行修正来产生新的搜索方向,即搜索方向当前迭代点的负梯度方向与前一搜索方向的线性组合

本期大纲

1. 共轭方向

2. 共轭方向法

3. 正定二次函数的共轭梯度法

4. 一般函数的共轭梯度法

5. 算法实现

6. 总结

1 共轭方向 在介绍共轭梯度法之间,小编首先介绍一个重要的定义—— 共轭方向 ,并给出共轭方向的一些性质。

定义(共轭方向):设Q是一个n×n的对称正定矩阵,若n维向量空间中的非零向量d40df12b60db1ce5c4c5b7f284ecea56.png满足

5d070fe3af85279b36cc66ccff28c63b.png  

则称d40df12b60db1ce5c4c5b7f284ecea56.png是Q的共轭向量或称向量d40df12b60db1ce5c4c5b7f284ecea56.png关于Q共轭的(简称共轭),也称d40df12b60db1ce5c4c5b7f284ecea56.png是Q的m个共轭方向。

例如:

ec42e0f04559b264f2de6e3de910f472.png

注:当 Q=I(单位矩阵)时,公式(1)变为

d6612437df02a7dd69f1e1c6bbbb7afe.png

即向量 d40df12b60db1ce5c4c5b7f284ecea56.png 互相正交。由此可见,正交是共轭的一种特殊情况共轭是正交的推广。 

性质(线性无关性)设Q是一个n×n的对称正定矩阵,若d40df12b60db1ce5c4c5b7f284ecea56.png是Q的m个非零共轭向量,则这m个向量是线性无关的。

15db86733123c0aef96fdcbb978008ad.png

注:在n维的向量空间中,非零的共轭向量个数不超过n

2 共轭方向法 共轭方向 法的算法步骤如下:

4f19b54606b74b01b285e71ba205c537.png

 在考虑普通函数之前,首先考虑如下的正定二次函数

c5f5104ed0c56eb7f2cc05428e0dc17e.png

定理1:设有二次函数

c5f5104ed0c56eb7f2cc05428e0dc17e.png

其中Q是一个n×n的对称正定矩阵,若d40df12b60db1ce5c4c5b7f284ecea56.png是Q的m个非零共轭向量,从任意一点出发3e7e24a721b61a52c253e4abd8268fb4.png出发,依次沿这组向量进行一维搜索

04ce55be9ecbf47d3105a7832e12ef55.png

则有

9e443dd2781b713734f4f9ac6c684b8c.png

当前点的梯度方向之前所有搜索方向正交

定理2(算法收敛性——二次终止性):设有二次函数

c5f5104ed0c56eb7f2cc05428e0dc17e.png

其中Q是一个n×n的对称正定矩阵,若d40df12b60db1ce5c4c5b7f284ecea56.png是Q的m个非零共轭向量,从任意一点出发3e7e24a721b61a52c253e4abd8268fb4.png出发,依次沿这组向量进行一维搜索

04ce55be9ecbf47d3105a7832e12ef55.png

至多经过n步算法收敛,即36c502b2340c30c0a459e8d944e56dfa.png是f(x)在d8fddf3f7eb4fed5e7a26cf5f4a287d9.png上的极小值点。

因此,对于任意n元正定二次函数,我们可以从任意点出发,然后沿着n个共轭方向最多做n次线搜索,就可以求的目标函数的最优点。3 正定二次函数的共轭梯度法 在共轭方向法中,我们需要预先给定共轭方向,这在实际应用中是很难实现的,下面我们给出一种新的算法——共轭梯度法,它可以随着迭代的进行不断产生共轭方向。 共轭梯度法基本思想: 在FR共轭梯度法中,初始点处的搜索方向取为该点的负梯度方向,即取  

ffe8f10658a419cf79dd16126de59eef.png

而之后点 910e5c9f058b5d4488b7787a50fd9f9a.png 的搜索方向 36b6581771cacf2232fa189956c4c22a.png 由该点的负梯度 4bbb79633ff3dbc701d6e965838b7e42.png 与已得的共轭向量 2dac90888210d1011b378bf48bdf6613.png 的线性组合来确定。

命题1:设有二次函数

c5f5104ed0c56eb7f2cc05428e0dc17e.png

其中Q是一个n×n的对称正定矩阵。若选取初始点为037d206759c3072af92f9d35531dabc5.png,取bf29bd8c9037f4292be4bde53203538a.png。依次从56de8b4d95ed46d1e202e2f8754442a5.png出发,沿a2e4e988a969c18f7afe8415bb63e92f.png在最优步长规则下做一维线搜索,可得:

44716832a8a20119423e9083f54159d2.png

      共轭梯度法的算法步骤如下:

Step 0. 选取初始点97b681f5dc16f2f305c305cd3fbae31e.png,允许误差ε> 0,令 k=1;

Step 1. 计算b3d361dc79a9faabcf19685cfd2dcc5d.png。若7077cd633a45aa394e99e61f5578f333.png,算法停止;.否则,转 Step 2;

Step 2. 依次计算

19d2a224b5158bf91ae3bdd06c2ed2ac.png

并置k=k+1,转 step 1.

定理3:对于正定二次函数,最优步长规则下的共轭梯度法经过m≤n次一维搜索后终止,且对任意的1≤i≤m,下列关系式成立:

195d21f5a9fb977a5e541ba8fd8fdac5.png

注: 定理3中,(1)说明共轭梯度法生成的搜索方向是关于Q共轭的;(2)说明共轭梯度法生成的点列的梯度是相互正交的。

命题2:

4ecdbcd4b747b63ea4477673bc078f41.png

注: 共轭梯度法中β的取值不同又可细分FR、PRP等方法,上述命题β的取值所对应的方法被称为FR共轭梯度法。4 一般函数的共轭梯度法

 上面所讲的迭代公式要想适用于非二次函数,存在以下问题:

(1) 步长 bb0b7c7e525662b55683916c6fa17499.png 不能再用公式 42880bffabec5abb3e13c3b2eab0afcc.png 计算,必须使用其他的一维搜索方法来确定; (2) 凡用到矩阵Q之处,需要用现行点处的Hessian矩阵 44c64ad212e42684d0dbeeb1ae875281.png 代替; (3) 有限步内迭代达不到极小点。


    迭代的延续:

(1)  直接搜索:即总用公式6ab6945bf1a7b8bf05c44cf20bfaa20b.png构造搜索方向。

(2)  重新开始,把n步作为一轮,每搜索一轮之后,取一次最速下降方向,开始下一轮。

    一般函数的FR共轭梯度法的算法步骤如下:

cf74058a1511b092e4c4359fa827d921.png

e816e7759cdc8a79e466b5c175c01f0f.png

70002c81a8ae4e6fdf7c3a79604e6479.png

b48e85722565d19dbbf33622a1cc727f.png

24860696f01c4bf2de6452f02d8e0379.png

5 算法实现

例1:求解无约束优化问题

12de8d510c942db3f5f347aabe82ab8a.png

该问题有精确解18cf59fec38f5c9338c3e35511954cf5.png

解:调用格式如下:

function [X,Y,Error] = frcg(x0)

%使用FR共轭梯度法求解无约束问题:min f(x)

%使用非精确Armijo搜索步长规则

%输入:x0为初始点,fun为目标函数,grad为梯度函数

%输出:X,Y分别为每一步的迭代点及相应函数值,Error为误差

tic

%% 初始化参数

f = @(x)100*(x(1)^2-x(2))^2+(x(1)-1)^2;                             %目标函数

g = @(x)[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1);-200*(x(1)^2-x(2))];     %一阶导数

G = @(x)[1200*x(1)^2-400*x(2)+2, -400*x(1);-400*x(1), 200 ];        %二阶导数   

%% 初始化算法参数

k = 1;

n = length(x0);

e = norm(g(x0));

X = x0;

Y = f(x0);

Error = e;

rho=0.6;sigma=0.4;

%% 设定终止条件

N = 5000;                                                           %最大迭代步                

E = 1e-6;                                                           %给定误差

%% 迭代

while k < N && e > E

    % 计算搜索方向

    if(k == 1)

        d = -g(x0);

    else       

        beta = (g(x0)'*g(x0))/(g0'*g0);

        d = -g(x0) + beta*d0;

        if(g(x0)'*d>=0)

            d = -g(x0);

        end

    end

    %使用Armijo法求步长

    m=0; mk=0;

    while(m<20)

        if(f(x0+rho^m*d)

            mk=m; break;

        end

        m=m+1;

    end

    g0 = g(x0);

    d0 = d;

    x0 = x0+rho^mk*d;                                       %迭代公式

    k = k+1;

    X(:,k) = x0;

    Y(k) = f(x0);

    e = norm(g(x0));

    Error(k) = e;

end

toc

end

调用格式如下:

x0 = [0;0];                 %迭代初始点(可以根据需要修改)

[X,Y,E]=frcg(x0);

本问题求解结果如下:

a196b4d1e72598eeff58e8dd535056da.png

23a966eb0e4078286a22aa18d2f18b8a.png

c57290f39928f4a13455728d8d445ad8.png

6 总结 共轭方向法是介于最速下降法和Newton法之间的一种方法——它的收敛速度(二阶收敛)比最速下降法(线性收敛)快;它克服了最速下降法的锯齿现象,同时它的计算量和存储量又比牛顿法要小。 共轭梯度法不需要预先给定Q的共轭方向,而是随着迭代的进行不断产生Q的共轭方向——在每次的迭代中,利用前一个搜索方向和当前迭代点的梯度的线性组合构造一个新的方向。 78c00ed613913fd897c2f6ccc604a172.png 几种下降算法的迭代过程

往期回顾

算法丨优化算法之牛顿法

算法丨优化算法之最速下降法

算法丨经典优化算法大合集(比赛备用,值得收藏)

算法丨优化算法系列之遗传算法原理

算法丨优化算法系列之遗传算法MATLAB程序设计及应用实例

算法丨优化算法系列之模拟退火算法(1)

算法丨优化算法系列之模拟退火算法(2)——0-1背包问题

参考文献:马昌凤.最优化方法及其 Matlab 程序设计[M]. 科学出版社, 2010.

d50546f0a8ad1c6843ad6e427d60dd72.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值