共轭梯度算法分析与实现

合集下载

共轭梯度法(精品文档)

共轭梯度法(精品文档)

1

g2T (g2 d1T (g2
g1) g1)

g2T g2 g1T g1
4) 一般地,在第 k 次迭代中,令
k 1
dk gk idi i0
适当选取 i ,使 dkTGdi 0 ( i 0,
, k 1),可得到
i

gkT Gdi diT Gdi

gkT (gi1 gi ) diT (gi1 gi )
§4.2 共轭梯度法
提纲
1、共轭梯度法---F-R共轭梯度法 2、共轭梯度法性质定理及例题 3、再开始FR共轭梯度法 4、Beale三项共轭梯度法 5、预条件共轭梯度法(了解)
共轭梯度法
在上一节中讨论了共轭方向法,其中n个共轭方向是预先设定好的。但是如何 让获取这些共轭方向并为提及。本节讨论一种重要的共轭方向法——共轭梯 度法。这种方法是将共轭性和最速下降方向相结合,利用已知迭代点处的梯 度方向构造一组共轭方向,并沿此方向进行搜索,求出函数的极小点。因在 迭代过程中通过对负梯度方向进行适当校正获得共轭方向,故而称之为共轭 梯度法。
算法步骤—FR共轭梯度法
1、选取初始数据,选取初始点 x0 ,给定允许误差 0 ;
2、检查是否满足终止准则,计算 f (x0 ) ,若 || f (x0 ) || ,迭代终
止,x0为近似最优解,否则转向3;
3、 构造初始搜索方向,计算 d0 f (x0 ), k 0;

k 1

gkT (gk gk1)
dT k 1
(
gk

gk 1 )

gkT gk gkT1 gk 1
共轭梯度法的迭代公式为:

共轭梯度迭代算法

共轭梯度迭代算法

共轭梯度迭代算法共轭梯度迭代算法(Conjugate Gradient Algorithm)是一种用于求解线性方程组的迭代算法。

该算法结合了梯度法和共轭方向法的优点,能够快速收敛到精确解。

在本文中,将详细介绍共轭梯度迭代算法的原理、步骤以及其优点。

1.原理:2.步骤:1)初始化:选择一个初始解x0,设置初始残差r0=b-Ax0,初始化方向p0=r0。

2)迭代更新:对于迭代次数k=0,1,2,...,执行以下步骤:a)计算步长αk:αk = (rk^T rk) / (pk^T A pk)b)更新解和残差:xk+1 = xk + αk pkrk+1 = rk - αk A pkc)计算新的方向:βk = (rk+1^T rk+1) / (rk^T rk)pk+1 = rk+1 + βk pk3) 终止条件:当残差的二范数小于一些预先给定的精度ε时,停止迭代,返回解xk。

3.优点:a)快速收敛:对于对称正定矩阵,共轭梯度迭代算法通常能够在较少的迭代次数内收敛到精确解。

b)低存储开销:共轭梯度迭代算法只需要存储两个向量,即解和残差,而不需要存储整个矩阵。

c)适用性广泛:共轭梯度迭代算法适用于大规模稀疏矩阵的求解问题,如图像处理、优化问题等。

4.示例:下面以一个简单的线性方程组的求解问题为例来说明共轭梯度迭代算法的应用:考虑线性方程组Ax=b,其中A是一个对称正定矩阵,b是一个已知向量。

A=[41;13]b=[1;2]首先,计算A的特征值和特征向量,确认A是对称正定矩阵。

然后,选择一个初始解x0=[0;0],计算初始残差r0=b-Ax0,并将方向p0设为r0。

开始迭代过程:迭代1:α0=(r0^Tr0)/(p0^TAp0)=(r0^Tr0)/(p0^Tp0)x1=x0+α0p0=[α0;2α0/3]r1=r0-α0Ap0=[-2α0;-α0/3]β0=(r1^Tr1)/(r0^Tr0)=(r1^Tr1)/(r0^Tr0)p1=r1+β0p0=[-2α0;-α0/3]+β0[0;0]=r1迭代2:α1=(r1^Tr1)/(p1^TAp1)=(r1^Tr1)/(p1^Tp1)x2=x1+α1p1r2=r1-α1Ap1β1=(r2^Tr2)/(r1^Tr1)p2=r2+β1p1依此类推,直到满足终止条件为止。

共轭梯度法prp

共轭梯度法prp

共轭梯度法prp共轭梯度法prp是求解线性方程组Ax=b的一种有效方法,它具有收敛速度快的优点,在计算机科学、经济学等领域被广泛应用。

在本文中,我们将分步骤阐述共轭梯度法prp的原理和算法流程,并探讨它的一些优缺点。

一、共轭梯度法prp的原理:求解线性方程组Ax=b的时候,如果我们采用梯度下降法,每次迭代时都是从当前点xk出发,按照负梯度方向向下移动一定距离得到下一个点xk+1。

如果点的数目很大,那么求解所需的时间也相应很长。

共轭梯度法prp则是在迭代过程中,每一次移动的方向都是共轭的,这样可以提高迭代收敛的速度。

二、共轭梯度法prp的算法流程:共轭梯度法prp的算法过程非常简单,我们可以用以下五个步骤来描述它的基本流程。

1.初始化:设xi=0,ri=b,pi=ri,i=0。

2.迭代:当i<n时,执行以下操作:(a)计算αi=(ri,pi)/(Api,pi)。

(b)更新:xi+1=xi+αipi。

(c)计算ri+1=ri-αiApi。

(d)选择βi=(ri+1,ri+1)/(ri,ri)。

(e)计算pi+1=ri+1+βipi。

3.输出结果。

三、共轭梯度法prp的优缺点:共轭梯度法prp与梯度下降法相比具有许多优点。

例如,它收敛速度快、计算复杂度低等等。

但是也存在一些缺点。

例如,收敛速度可以很快,但是随着迭代次数的增加,其收敛速度会逐渐变慢,甚至可能陷入振荡状态。

此外,如果矩阵的条件数太大,则共轭梯度法prp 的效果会变得很差,需要使用其他方法来求解方程组。

总之,共轭梯度法prp是求解线性方程组Ax=b的一个优秀方法,它可以提高计算速度和准确度。

尽管存在一些缺点,但共轭梯度法prp 仍是一个值得推崇的算法。

共轭梯度(CG)算法

共轭梯度(CG)算法

共轭梯度(CG)算法共轭梯度(Conjugate Gradient, CG)算法是一种用于求解线性方程组的迭代算法。

它主要用于求解对称正定矩阵的线性方程组,如最小二乘问题、PDE(偏微分方程)问题等。

CG算法通过利用矩阵的对称性和正定性,以及向量的共轭关系,实现了高效的求解线性方程组的能力。

CG算法的基本思想是通过一系列共轭的方向,逐步逼近方程组的解。

它利用了矩阵的特性,减少了计算量和存储需求,并且具有较快的收敛速度。

下面将介绍CG算法的原理和过程。

首先,假设我们要求解一个线性方程组Ax=b,其中A是对称正定矩阵,b是已知向量,x是待求解向量。

我们通过迭代的方式逼近x的解,即x(k)。

CG算法的迭代过程如下:1.初始化:选择一个初始解x(0),设置r(0)=b-Ax(0),p(0)=r(0),k=0;2. 迭代计算:计算步长alpha(k)和更新向量x(k+1):alpha(k) = (r(k)^T * r(k)) / (p(k)^T * A * p(k))x(k+1) = x(k) + alpha(k) * p(k)3. 计算残差向量r(k+1)和比例系数beta(k+1):r(k+1) = r(k) - alpha(k) * A * p(k)beta(k+1) = (r(k+1)^T * r(k+1)) / (r(k)^T * r(k))4.更新方向p(k+1):p(k+1) = r(k+1) + beta(k+1) * p(k)5.终止条件判断:如果满足终止条件,停止迭代;否则,令k=k+1,返回步骤2在CG算法中,为了降低数值误差和迭代次数,通常会使用预条件技术,如Jacobi预条件、不完全Cholesky预条件等。

预条件技术可以通过对矩阵进行适当的近似,加速算法的收敛。

CG算法的收敛性和效率主要与矩阵的条件数有关。

对于条件数较大的矩阵,CG算法的迭代次数会增加,收敛速度会减慢。

因此,在实际应用中,通常会选择合适的预条件技术和求解策略,以提高CG算法的效率和稳定性。

共轭梯度实验报告

共轭梯度实验报告

共轭梯度实验报告共轭梯度实验报告引言:共轭梯度是一种常用的优化算法,广泛应用于数值计算和机器学习等领域。

本实验旨在探究共轭梯度算法的原理和应用,并通过实验验证其在解决线性方程组和最小二乘问题中的有效性和优越性。

一、共轭梯度算法的原理共轭梯度算法是一种迭代法,用于求解对称正定矩阵的线性方程组。

其基本思想是通过选择一组互相共轭的搜索方向,以最小化目标函数的二次型形式。

共轭梯度算法的核心步骤包括初始化、计算搜索方向、计算步长和更新解向量等。

二、共轭梯度算法在线性方程组求解中的应用共轭梯度算法在求解线性方程组方面具有独特的优势。

相比于传统的直接求解方法,共轭梯度算法不需要存储整个矩阵,仅需存储向量和少量中间变量,节省了内存空间。

同时,共轭梯度算法具有较快的收敛速度,能够在有限的迭代次数内得到较精确的解。

三、共轭梯度算法在最小二乘问题中的应用最小二乘问题是一类常见的优化问题,广泛应用于数据拟合和参数估计等领域。

共轭梯度算法在最小二乘问题中的应用主要体现在正规方程法和QR分解法的改进上。

通过共轭梯度算法,可以有效地求解最小二乘问题,得到更准确的拟合结果。

四、实验设计与结果分析本实验选择了一组线性方程组和最小二乘问题进行测试,分别使用共轭梯度算法和传统直接求解方法进行比较。

实验结果表明,共轭梯度算法在求解线性方程组和最小二乘问题时,具有更快的收敛速度和更高的精度。

尤其在大规模问题上,共轭梯度算法的优势更加明显。

结论:共轭梯度算法是一种有效的优化算法,适用于求解对称正定矩阵的线性方程组和最小二乘问题。

通过选择互相共轭的搜索方向,共轭梯度算法能够在有限的迭代次数内得到较精确的解。

在实际应用中,共轭梯度算法具有较快的收敛速度和较高的精度,是一种值得推广和应用的算法。

总结:通过本次实验,我们深入了解了共轭梯度算法的原理和应用,并通过实验验证了其在线性方程组和最小二乘问题中的有效性和优越性。

共轭梯度算法作为一种常用的优化算法,在数值计算和机器学习等领域具有广泛的应用前景。

共轭梯度算法分析与实现

共轭梯度算法分析与实现

共轭梯度算法分析与实现
梯度下降是一种常用的优化算法,用于求解优化问题。

它通过迭代的
方式不断沿着梯度的反方向更新参数,以最小化损失函数。

然而,梯度下
降算法在处理大规模数据时会变得非常慢,因为它需要计算全部训练样本
的梯度。

为了解决这个问题,共轭梯度算法被提出。

共轭梯度算法是一种适用于解决对称正定矩阵形式下的线性方程组的
优化算法。

它在每一步更新参数时,会按照预先选择好的方向进行更新。

这些方向通常是互相共轭的,这意味着每一个方向都是相对于其他方向来
说是正交的。

共轭梯度算法的原理是,通过每次迭代选择共轭方向来加速
梯度下降算法的收敛速度。

具体而言,共轭梯度算法中的每一步迭代可以分为四个部分:初始化、步长、更新参数和计算残差。

首先,在初始化阶段设定初始参数和初始残差,并选择一个适当的共轭方向。

然后,在步长阶段,通过线方法选择一
个合适的步长。

接下来,在更新参数阶段,根据步长和共轭方向更新参数。

最后,在计算残差阶段,计算新的残差,并检查是否达到停止条件。

如果
没有达到停止条件,那么就继续迭代进行和更新。

共轭梯度算法相对于梯度下降算法有几个优点。

首先,它不需要计算
全部训练样本的梯度,这样可以加速算法的收敛速度。

其次,它可以解决
对称正定矩阵形式下的线性方程组,这在很多实际问题中非常常见。

最后,共轭梯度算法在存储以及计算量上都比较少,所以可以处理大规模数据。

共轭梯度法实验报告

共轭梯度法实验报告

数值代数实验报告一、实验名称:用共轭梯度法解线性方程组。

二、实验目的:进一步熟悉理解掌握共轭梯度法解法思路,提高matlab 编程能力。

三、实验要求:已知线性方程矩阵,应用共轭梯度法在相关软件编程求解线性方程组的解。

四、实验原理:1.共轭梯度法:考虑线性方程组Ax b =的求解问题,其中A 是给定的n 阶对称正定矩阵,b 是给定的n 维向量,x 是待求解的n 维向量.为此,定义二次泛函()2T T x x Ax b x ϕ=-.定理1 设A 对称正定,求方程组Ax b =的解,等价于求二次泛函()x ϕ的极小值点. 定理1表明,求解线性方程组问题就转化为求二次泛函()x ϕ的极小值点问题.求解二次函数极小值问题,通常好像盲人下山那样,先给定一个初始向量0x ,确定一个下山方向0p ,沿着经过点0x 而方向为0p 的直线00x x p α=+找一个点1000x x p α=+,使得对所有实数α有()()00000x p x p ϕαϕα+≤+,即在这条直线上1x 使()x ϕ达到极小.然后从1x 出发,再确定一个下山的方向1p ,沿着直线11x x p α=+再跨出一步,即找到1α使得()x ϕ在2111x x p α=+达到极小:()()11111x p x p ϕαϕα+≤+.重复此步骤,得到一串012,,,ααα 和 012,,,p p p ,称k p 为搜索方向,k α为步长.一般情况下,先在k x 点找下山方向k p ,再在直线k k x x p α=+上确定步长k α使()(),k k k k k x p x p ϕαϕα+≤+最后求出1k k k k x x p α+=+.然而对不同的搜索方向和步长,得到各种不同的算法.由此,先考虑如何确定k α.设从k x 出发,已经选定下山方向k p .令 ()()k k f x p αϕα=+()()()2TT k k k k k k x p A x p b x p ααα=++-+()22TT k k k k k p Ap r p x ααϕ=-+,其中k k r b Ap =-.由一元函数极值存在的必要条件有()220TT k k k k f p Ap r p αα'=-=所确定的α即为所求步长k α,即 T k kk Tk kr p p Ap α=. 步长确定后,即可算出1k k k k x x p α+=+.此时,只要0T k k r p ≠,就有()()()()1k k k k k k x x x p x ϕϕϕαϕ+-=+-()2220T k k TT k kk k k k Tk kr p p Ap r p p Ap αα=-=-<即()()1k k x x ϕϕ+<.再考虑如何确定下山方向k p .易知负梯度方向是()x ϕ减小最快的方向,但简单分析就会发现负梯度方向只是局部最佳的下山方向,而从整体来看并非最佳.故采用新的方法寻求更好的下山方向——共轭梯度法. 下面给出共轭梯度法的具体计算过程:给定初始向量0x ,第一步仍选用负梯度方向为下山方向,即00p r =,于是有00010001000,,T T r r x x p r b Ax p Ap αα==+=-.对以后各步,例如第k+1步(k ≥1),下山方向不再取k r ,而是在过点由向量k r 和1k p -所张成的二维平面21{|,,}k k k x x x r p R πξηξη-==++∈内找出使函数ϕ下降最快的方向作为新的下山方向k p .考虑ϕ在2π上的限制:()1,()k k k x r p ψξηϕξη-=++11()()T k k k k k k x r p A x r p ξηξη--=++++12()T k k k b x r p ξη--++. 计算ψ关于,ξη的偏导得: ()()11112,2,T T T k k k k k kT T k k k k r Ar r Ap r r r Ap p Ap ψξηξψξηη----∂=+-∂∂=+∂其中最后一式用到了10T k k r p -=,这可由k r 的定义直接验证.令 0ψψξη∂∂==∂∂, 即知ϕ在2π内有唯一的极小值点001k k k x x r p ξη-=++,其中0ξ和0η满足 00101011,0.T T T k k k k k k T Tk k k k r Ar r Ap r r r Ap p Ap ξηξη----⎧+=⎨+=⎩由于0k r ≠必有00ξ≠,所以可取()01001k k k k p x x r p ηξξ-=-=+作为新的下山方向.显然,这是在平面2π内可得的最佳下山方向.令010k ηβξ-=,则可得1111.T k k k T k k r Ap p Ap β----=-注:这样确定的k p 满足10Tkk p Ap -=,即k p 与1k p -是相互共轭的. 总结上面的讨论,可得如下的计算公式:T k kk Tk kr p p Ap α= , 1k k k k x x p α+=+, 11k k r b Ax ++=-,1T k kk Tk kr Ap p Ap β+=-, 11k k k k p r p β++=+. 在实际计算中,常将上述公式进一步简化,从而得到一个形式上更为简单而且对称的计算公式.首先来简化1k r +的计算公式:11()k k k k k k k k r b Ax b A x p r Ap αα++=-=-+=-.因为k Ap 在计算k α是已经求出,所以计算1k r +时可以不必将1k x +代入方程计算,而是从递推关系1k k k r b Ap α+=-得到.再来简化k α和k β的计算公式.此处需要用到关系式1110,T T T k k k k k k r r r p r p +-+=== 1,2,k =.从而可导出1111,T T k k k k r r r α+++=-, ()111TT T k k k k k k k k k p Ap p r r p r αα+=-=()1111T Tk k k k k k k kr r p r r βαα--=+=.由此可得,T k k k T k k r r p Ap α=, 11.T k k k T k kr r r r β++=.从而有求解对称正定方程组的共轭梯度法算法如下:0x =初值00r b Ax =-;0k =while 0k r ≠1k k =+ if 1k = 00p r =else21122T T k k k k k r r r r β-----= 1122k k k k p r p β----=+ end11111T Tk k k k k r r p Ap α-----=111k k k k x x p α---=+111k k k k r r Ap α---=-endk x x =注:该算法每迭代一次仅需要使用系数矩阵A 做一次矩阵向量积运算. 定理2 由共轭梯度法得到的向量组{}i r 和{}i p 具有如下基本性质: (1)0T i j p r =, 0;i j k ≤<≤ (2)0T i j r r =, i j ≠,0,;i j k ≤≤ (3)0T i j p Ap =, i j ≠,0,;i j k ≤≤ (4)000{,,}{,,}(,,1)k k span r r span p p A r k κ==+,其中0000(,,1){,,,}k A r k span r Ar A r κ+=,通常称之为Krylov 子空间.下面给出共轭梯度法全局最优性定理:定理3 用共轭梯度法计算得到的近似解k x 满足()(){}00min :(,,)k x x x x A r k ϕϕκ=∈+或{}**00min :(,,)k AAx x x x x x A r k κ-=-∈+,其中Ax=*x 是方程组Ax b =的解,0(,,)A r k κ是由所定义的Krylov 子空间. 定理2表明,向量组0,,k r r 和0,,k p p 分别是Krylov 子空间0(,,1)A r k κ+的正交基和共轭正交基.由此可知,共轭梯度法最多n 步便可得到方程组的解*x .因此,理论上来讲,共轭梯度法是直接法.然而实际使用时,由于误差的出现,使k r 之间的正交性很快损失,以致于其有限步终止性已不再成立.此外,在实际应用共轭梯度法时,由于一般n 很大,以至于迭代()O n 次所耗费的计算时间就已经使用户无法接受了.因此,实际上将共轭梯度法作为一种迭代法使用,而且通常是k r 是否已经很小及迭代次数是否已经达到最大允许的迭代次数max k 来终止迭代.从而得到解对称正定线性方程组的实用共轭梯度法,其算法如下:x =初值0;k =;r b Ax =-T r r ρ=while)()max2band k kε><1k k =+if 1k = p r = else;p r p βρρβ==+ end;;T Ap p x x p ωαρωα===+ ;;T r r r r αωρρρ=-== end算法中,系数矩阵A 的作用仅仅是用来由已知向量p 产生向量Ap ω=,这不仅可以充分利用A 的稀疏性,而且对某些提供矩阵A 较为困难而由已知向量p 产生向量Ap ω=又十分方便的应用问题是十分有益的。

共轭梯度法总结

共轭梯度法总结

共轭梯度法总结
共轭梯度法总结
一、什么是共轭梯度法
共轭梯度法(Conjugate Gradient Method),是一种用于求解线性方程组的迭代优化算法,它是一种搜索梯度的迭代算法。

共轭梯度法的基本思想是沿梯度的反方向搜索,并在每一步令搜索的方向接近更新的局部梯度。

它是一种非常有效的求解有约束的非线性优化问题的方法,是求解线性方程组的有效算法。

共轭梯度法可以看作是一种极小化函数的迭代方法,它最主要的思想是不断更新梯度的方向,从而寻找函数值最小的点。

二、共轭梯度法的原理
共轭梯度法是一种迭代优化算法,它以凸二次型函数为例,可以用来求解最小值问题。

它的基本思想是:
(1)首先求得函数的梯度,即每一步优化的搜索方向,使梯度变为最小;
(2)以梯度的反方向搜索,令搜索的方向接近更新的局部梯度,而不是与旧的梯度成正比的步长;
(3)逐步更新搜索的方向为新的梯度;
(4)重复这个过程,直到所有的自变量满足限制条件。

三、共轭梯度法的优缺点
共轭梯度法最大的优点是它具有收敛速度快,可以在有限的迭代步数内收敛到最优解;另外,它还具有计算量小,不需要计算精确的
Hessian矩阵的优点。

共轭梯度法的缺点是它不能用来求解非凸优化问题,因为它只能求解凸优化问题;另外,它也不能用于强不可约的优化问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编号:_ 09《最优化方法》课程设计题目:共轭梯度算法分析与实现院系:数学与计算科学学院专业:数学与应用数学姓名学号:指导教师:日期:2013 年12 月23 日摘要在最优化计算中,共轭梯度法是非常重要的一种方法。

共轭梯度法是一种改进的最速下降法,介于最速下降法与牛顿法之间的一种无约束优化算法,是为求解目标函数为二次函数的问题而设计的一类算法。

它利用目标函数的梯度逐步产生共轭方向并将其作为搜索方向的方法,收敛速度快。

共轭梯度法仅需利用一阶导数信息,避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,具有二次终止性。

关键词:共轭梯度法;牛顿法;二次函数;无约束优化AbstractIn the calculation of optimization method, conjugate gradient method is a very important one. The conjugate gradient method is a unconstrained optimization method between the steepest descent method and Newton method, and sove the objective function for the original quadratic function problems and design for a class of algorithm. Conjugate gradient method using only first derivative information, to avoid the Newton method requires storage and computing the inverse Hesse matrix and shortcomings, this method has the quadratic termination.Keywords: Conjugate gradient method; Newton method;Unconstrained optimization目录1、引言 (1)2、共轭梯度算法的描述 (1)2.1 无约束优化问题概述 (1)2.2 共轭方向 (1)2.3 共轭梯度法 (1)2.4 共轭梯度算法的步骤 (2)3、数值实验 (2)3.1 代码实现 (2)3.2 算法测试 (3)3.3 结果分析 (5)4、算法比较 (5)4.1 最速下降法描述 (6)4.1.1最速下降方向 (6)4.1.2 最速下降法 (6)4.2 最速下降法实现 (6)4.3 最速下降法测试 (7)4.4共轭梯度法与最速下降法比较 (8)5、总结 (8)5.1 总结概括 (8)5.2 个人感言 (9)6、参考文献: (9)1、引言共轭梯度法最早是由Hesternes 和Stiefle(1952)提出来的,用于解正定系数矩阵的线性方程组,在这个基础上,Fletcher 和Reeves(1964)首先提出了解非线性最优化问题的共轭梯度法。

在各种优化算法中,共轭梯度法(Conjugate Gradient )是非常重要的一种。

是一种介于最速下降法与牛顿法之间的优化算法,是为求解目标函数为二次函数的问题而设计的一类算法。

它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse 矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。

可微的非二次函数在极小点附近的形态近似于二次函数,因此共轭梯度法也能用于求可微的非二次函数的无约束极小问题。

共轭梯度法是一个典型的共轭方向法,它在共轭方向法基础上增加了一些性质:计算当前方向计算当前方向只需用到前一方向,对其他方向则无要求;计算出来的当前方向自动与前面所有方向共轭,因此,不需耗费大量内存存储所有方向,也节省了计算时间。

2、共轭梯度法的描述2.1 无约束优化问题概述一个非线性规划问题的自变量x 没有任何约束,或说可行域既是整个n 维向量空间:r n x =,称这样的非线性规划问题为无约束问题:)(min x f 或)(min x f R n x = 2.2共轭方向无约束问题最优化方法的核心问题是选择搜索方向。

以正定二次函数为例,来观察两个方向关于矩阵A共轭的几何意义。

设有二次函数:f(x) = 1/2 (x - x*)T A(x - x*) ,其中A 是n ×n 对称正定矩阵,x*是一个定点,函数f(x)的等值面1/2 (x - x*)T A(x - x*) = c是以x*为中心的椭球面,由于▽f(x*) = A(x - x*) = 0,A 正定,因此x*是f(x)的极小点。

设x (1)是在某个等值面上的一点,该等值面在点x (1)处的法向量▽f(x (1)) = A(x (1) - x*)。

又设d (1)是这个等值面在d (1)处的一个切向量。

记作d (2) = x* - x (1)。

自然,d (1)与▽f(x (1))正交,即d (1)T ▽f(x (1)) = 0,因此有d (1)T Ad (2) = 0,即等值面上一点处的切向量与由这一点指向极小点的向量关于A 共轭。

2.3共轭梯度法共轭梯度法是最著名的共轭方向法,它首先由Hestenes 和Stiefel (1952)提出来作为解线性方程组的方法。

由于解线性方程组等价于极小化一个正定二次函数,故1964年Fletcher 和Reeves 提出了无约束极小化的共轭梯度法,它是直接从Hestenes 和Stiefel 解线性方程组的共轭梯度法发展而来的。

共轭梯度法的基本思想是把共轭性与最速下降方法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜索,求出目标函数的极小点。

根据共轭方向的基本性质,这种方法具有二次终止性。

共轭梯度法就是使得最速下降方向具有共轭性,从而提高算法的有效性和可靠性。

在各种优化算法中,共轭梯度法是非常重要的一种。

其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

2.4 共轭梯度算法的步骤共轭梯度算法步骤如下:Step1 给定迭代精度10<<≤ε和初始点0x .计算)(00x f g ∇=.令0 :=k . Step2 若ε≤k g ,停算,输出k x x ≈*.Step3 计算搜索方向k d :⎩⎨⎧≥+-=-=--1, ,,0 ,11k d g k g d k k k k k β其中当1≥k 时,111---=k T k k T k k g g g g β确定1-k β. Step4 利用精确(或非精确)线搜索方法确定搜索步长k α.Step5 令k k k k d x x α+=+ :1,并计算)(11++∇=k k x f g .Step6 令1 :+=k k ,转步Step1.3、数值实验3.1 代码实现共轭梯度法的Matlab程序如下:分别新建Conjugate_Gradient_Method.m、grad_obj.m、line_search.m、obj.m文件Conjugate_Gradient_Method.m文件如下:function [x,iter,val] = Conjugate_Gradient_Method(x,eps)k = 0;x_mat(:,1) = x;%存储每一次迭代得到的点xx_old = x;dy_old = grad_obj(x_old);d_old = -dy_old;while norm(dy_old)>epslambda = line_search(x_old,d_old);%步长x_new = x_old + lambda*d_old;dy_new = grad_obj(x_new);coef = norm(dy_new)/norm(dy_old);d_new = -dy_new + coef^2*d_old; % 搜索方向k = k + 1;x_old = x_new;dy_old = dy_new;d_old = d_new;x_mat(:,k) = x_new;%防止死循环if k > 100break;endendx = x_new;%目标函数极值点iter = k;%迭代次数val = obj(x_new);%目标函数在极值点处的函数值endline_search.m文件如下:function lambda = line_search(xk,dk)%作线搜索,求步长%phi(lambda) = obj( xk + lambda*dk )%d_phi(lambda) = dk'*grad_obj( xk + lambda*dk )syms eqn lambdaeqn = dk'*grad_obj(xk+lambda*dk);lambda = solve(eqn); %用符号计算命令solve求方程d_phi(\lambda)=0的根lambda = eval(lambda);%将符号计算的结果转化为数值类型end3.2 算法测试我们通过求解两个无约束优化问题来验证算法的稳定性和准确性。

问题一:求解无约束优化问题121222122123)(min 2x x x x x x f R x --+=∈,该问题的有精确解1)()1,1(**-==x f x T ,。

问题二:找出如下方程的极小值点:21222121342)(m inx x x x x x x f -++-=其中初始点为()01,1T x =obj.m 文件function y = obj(x)%目标函数y = 3*x(1).^2/2+x(2).^2/2-x(1).*x(2)-2*x(1);%问题一目标函数%y = x(1).^2-2*x(1).*x(2)+4*x(2).^2 + x(1)- 3*x(2);%问题二目标函数 endgrad_obj.m 文件如下function dy = grad_obj(x)%目标函数的梯度dy = [3*x(1)-x(2)-2; x(2)-x(1)];%问题一目标函数的梯度%dy = [2*x(1) - 2*x(2) + 1; -2*x(1) + 8*x(2) - 3];%问题二目标函数的梯度end结果如下:问题一:问题二:3.3 结果分析共轭梯度法是一种很有效求解无约束优化的方法,共轭梯度法是根据共轭方向去搜索,可以由较快的收敛速度找到最优解求得极小值,并且计算结果比较稳定,误差在忽略范围内。

相关文档
最新文档