数值分析11(共轭梯度法)
共轭梯度法程序
一、共轭梯度法共轭梯度法(Conjugate Gradient)是共轭方向法的一种,因为在该方向法中每一个共轭向量都是依靠赖于迭代点处的负梯度而构造出来的,所以称为共轭梯度法。
由于此法最先由Fletcher和Reeves (1964)提出了解非线性最优化问题的,因而又称为FR 共轭梯度法。
由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次终止性等优点,现在共轭梯度法已经广泛地应用于实际问题中。
共轭梯度法是一个典型的共轭方向法,它的每一个搜索方向是互相共轭的,而这些搜索方向d仅仅是负梯度方向与上一次迭代的搜索方向的组合,因此,存储量少,计算方便,效果好。
二、共轭梯度法的原理设有目标函数f(X)=1/2X T HX+b T X+c 式1 式中,H作为f(X)的二阶导数矩阵,b为常数矢量,b=[b1,b2,b3,...b n]T 在第k次迭代计算中,从点X(k)出发,沿负梯度方向作一维搜索,得S(K)=-∆f(X(k))式2 X(k+1)=X(k)+ɑ(k)S(k) 式3在式中,ɑ(k)为最优步长。
设与S(k)共轭的下一个方向S(k+1)由点S(k)和点X(k+1)负梯度的线性组合构,即S (k+1)=-∆f (X (k+1))+β(k)S (k) 式4 根据共轭的条件有[S (k)]T ∆2f (X (k))S (k+1)=0 式5 把式2和式4带入式5,得-[∆f(X (k))]T ∆2f (X (k))[-∆f (X (k+1))+β(k)S (k) ]=0 式6 对于式1,则在点X (k)和点X (k+1)的梯度可写为∆f(X (k))=HX (k)+b 式7 ∆f (X (k+1))=HX (k+1)+b 式8 把上面两式相减并将式3代入得ɑ(k)H S (k)=∆f (X (k+1))-∆f(X (k)) 式9 将式4和式9两边分别相乘,并代入式5得-[∆f (X (k+1))+β(k)∆f(X (k))]T [∆f (X (k+1))-∆f(X (k)]=0 式10 将式10展开,并注意到相邻两点梯度间的正交关系,整理后得 β(k )=22||))((||||))1((||k X f k X f ∆+∆ 式11把式11代入式4和式3,得 S (k+1)=-∆f (X (k))+β(k )S (k )X (k+1)=X (k )+ɑ(k )S (k )由上可见,只要利用相邻两点的梯度就可以构造一个共轭方向。
共轭梯度法的迭代方向
共轭梯度法的迭代方向一、引言共轭梯度法是一种优化算法,用于解决线性方程组和最小化二次函数。
它基于共轭方向的概念,可以在相对较少的迭代次数内找到精确解。
二、共轭方向的概念在求解线性方程组Ax=b时,我们可以使用梯度下降法来最小化误差。
但是,梯度下降法可能会出现收敛速度缓慢的问题。
这是因为当我们按照负梯度方向进行迭代时,可能会遇到一个局部极小值点,并且在该点附近来回震荡。
为了解决这个问题,我们可以使用共轭方向。
如果两个向量a和b满足aTAb=0,则称它们是关于A共轭的。
也就是说,如果a和b都是A矩阵的特征向量,则它们是关于A共轭的。
三、CG方法CG方法(Conjugate Gradient)就是利用共轭方向来优化线性系统Ax=b的算法。
具体步骤如下:1. 初始化x0和r0=b-Ax0;2. 设置p0=r0;3. 对于k=0,1,2,...,直到收敛为止:a. 计算αk=rTk/rkTArk;b. 更新xk+1=xk+αkp;c. 更新rk+1=rk-αkAp;d. 计算βk+1=rTk+1/rkT+1;e. 更新pk+1=rk+1+βkp;其中,rk表示第k次迭代的残差,pk表示第k次迭代的搜索方向,αk是步长,βk是更新搜索方向时的系数。
四、共轭梯度法的迭代方向共轭梯度法中的搜索方向pk是关于A矩阵共轭的。
也就是说,对于任意两个不同的搜索方向pi和pj,它们满足piTApj=0。
为了证明这个结论,我们可以使用归纳法。
假设前i-1个搜索方向都满足共轭条件,则:piTApj=(ri-αiAi)TA(rj-αjAj)=riTA(rj-αjAj)-αiAiTA(rj-αjAj)=riTArj-αiAiTAjTArj其中,第一个等式使用了ri和rj关于A共轭的事实;第二个等式使用了公式rk+1=rk-αkAp;第三个等式使用了Ai和Aj关于A共轭的事实。
由于riTArj=0(因为ri和rj是关于A共轭的),所以我们得到piTApj=-αiAiTAjTArj=0。
共轭梯度法
2 2 min f ( x ) = x1 + 2x2 x
⎛1⎞ 给定初始点 x (0) = ⎜ ⎜1⎟ ⎟。 ⎝ ⎠
13
⎛ 2 x1 ⎞ ⎛ 2 0⎞ 2 首先, ∇f ( x ) = ⎜ ⎜ 0 4⎟ ⎟ ,以下利用(4.14)确定 β k 。 ⎜ 4x ⎟ ⎟ ,H= ∇ f ( x ) = ⎜ ⎝ ⎠ ⎝ 2⎠ k=0:
0
k +1
) 与搜索方向 s 0 ," , s k 均正交。同时,利用引理 4.1 马上
设 H ∈ R n×n 是对称正定阵,s ," , s
0
n −1
0
n −1
是非零 G—共轭方向组,x ∈ R 。 若对问题(UQP),
0
n
从 x 出发,依次沿 s ," , s
0
进行最优一维搜索,最终得到 x ,则 x 是(UQP)的最优解。
为保证 H-共轭性,在 x 处必须取 s 为搜索方向,而不能取 α s (α > 0) 为搜索方向。
k k
k
利用定理 4.3,马上得到上述算法的有限终止性。 定理 4.4 设 H ∈ R n×n 是对称正定阵。若用凸二次规划的共轭梯度法求解 (UQP) 时产生迭代点
x1 ," , x K ,则 x K 是(UQP)的最优解,并且 K ≤ n 。
首先由(4.7)知, g = ∇f ( x ) ( j = 0, " , k -1)是 s ," , s 的线性组合,因此根据定理 4.2,
j j 0 j
( g k )T g j =0, j = 0, " , k -1
由于
共轭梯度法
共轭梯度法:设w 为n 维矢量,假设优化准则函数为二次函数:()t t J c =++w w Hw u w ,其中H 为n n ⨯的正定对称矩阵。
如果两个矢量,i j d d 满足0ti j =d Hd ,则称它们关于矩阵H 互为共轭。
在n 为空间中存在互为共轭的n 个矢量01,,n -d d ,并且它们是线性无关的。
证明沿共轭方向可以在n 步之内收敛于极值点共轭方向算法:1、 初始化起始点0w ,一组共轭矢量01,,n -d d ,0k =;2、 计算k α和1k +w ,使得:()()min k k k k k J J ααα+=+w d w d 1k k k k α+=+w w d3、 转到2,直到k=n-1为止。
定理:对于正定二次优化函数()J w ,如果按照共轭方向进行搜索,至多经过n 步精确的线性搜索可以终止;并且每一个1i +w 都是在0w 和方向0,,i d d 所张成的线性流形00i j j j α=⎧⎫=+⎨⎬⎩⎭∑w w w d 中的极值点。
证明:令i g 为第i 步的梯度,即:()i i J ==∇w w g w ,上述定理实际上只需证明对j i ∀≤,10ti j +=g d 即可,因为1i +g 正交于0,,i d d ,则1i +g 正交于它们所张成的线性流形,100ii j j j α+==+∑w w d 包含在此线性流形中,因此在此线性流形中()J w 的梯度为0,即1i +w 为在线性流形上的极值点。
当1i n +=时,01,,n -d d 所张成的线性流形即为整个n 维空间n R ,只有当n =g 0时,才有0tn j =g d 成立,因此n w 为极值点。
梯度()J =∇=+g w Hw u ,因此两次迭代之间梯度的差值矢量为:()11k k k k k k k α++=-=-=y g g H w w Hd对于j i ∀<:()111111111tt tttt ti j i j i j i j i j i j j ji t t j j k k j k j i tt j j k k j k j α++-+++=++=+=-+-+-+=+-=+∑∑g d g d g d g d g d g d g d g d g g d g d d Hd因为1k +w 是沿着j d 方向搜索的极值点,因此10tj j +=g d ,而0,,i d d 互为共轭,所以有10i t k k j k j α=+=∑d Hd ,因此:10ti j +=g d上述定理得证。
共轭梯度法详细解读
共轭梯度法详细解读
嘿,朋友们!今天咱就来好好唠唠共轭梯度法。
你想想啊,咱平常解决问题就像走迷宫似的,有时候会在里面转来转去找不到出路,而共轭梯度法呀,就像是在迷宫里给咱指了一条明路!比如说你想找一条最快从山这头到那头的路,共轭梯度法就能帮上大忙啦!
它可不是随随便便就出现的哦,那可是数学家们绞尽脑汁研究出来的宝贝呢!就好比一个超级英雄,专门来打救我们这些在复杂问题里苦苦挣扎的人。
在实际应用里,它可厉害着呢!比如说在工程计算中,要设计一个最完美的结构,共轭梯度法就能迅速算出最优解。
哇塞,这不就相当于有个超厉害的军师在帮咱出谋划策嘛!
你再想想,我们日常生活中很多事情都可以类比成用共轭梯度法来解决问题呀。
比如说你要规划一次旅行,怎么安排路线最合理,不就是在找那个最优的旅行路径嘛,这时候共轭梯度法的思路就能派上用场啦!它就像一个隐藏在幕后的高手,默默地为我们排忧解难。
而且哦,一旦你掌握了它,那种感觉就像是你突然掌握了一种绝世武功,能在各种难题面前游刃有余。
这可太酷了吧!
哎呀呀,共轭梯度法真的是太神奇、太有用啦!大家可一定要好好去了
解它、运用它呀,你绝对会被它的魅力折服的!相信我,没错的!。
共轭梯度方法
共轭梯度方法(Conjugate Gradient Method)是求解线性方程组的一种迭代算法。
该方法适用于求解大型稀疏的对称正定线性方程组,可以显著减少计算量和存储空间。
该方法的主要思想是利用共轭方向(Conjugate Directions)的性质,在有限次迭代中求解方程组的解。
共轭梯度方法的基本步骤如下:
选取一个初值$x_0$,并令$r_0=b-Ax_0$,其中$b$ 为方程组的右端向量,$A$ 为系数矩阵。
计算一个共轭方向$p_0=r_0$,即$p_0$ 与$r_0$ 正交,并满足$Ap_0 \neq 0$。
对于$k=0,1,2,\ldots$,执行以下操作:
a. 计算$\alpha_k=\frac{r_k^Tr_k}{p_k^TAp_k}$。
b. 更新解向量$x_{k+1}=x_k+\alpha_kp_k$。
c. 计算残差向量$r_{k+1}=r_k-\alpha_kAp_k$。
d. 计算$\beta_k=\frac{r_{k+1}^Tr_{k+1}}{r_k^Tr_k}$。
e. 更新共轭方向$p_{k+1}=r_{k+1}+\beta_kp_k$,即$p_{k+1}$ 与$p_k$ 具有共轭性。
如果残差向量$r_k$ 较小,则停止迭代,输出解向量$x_k$。
共轭梯度方法具有收敛速度快、存储空间小等优点,但对于非对称和非正定的线性方程组,该方法可能不收敛。
同时,该方法也有一些变体,如预处理共轭梯度法、共轭残差法等,可以更好地解决不同类型的线性方程组求解问题。
共轭梯度(ConjugateGradient,CG)算法
共轭梯度(ConjugateGradient,CG)算法
以下皆为从⽹络资料获取的感性认知
共轭定义
共轭在数学、物理、化学、地理等学科中都有出现。
本意:两头⽜背上的架⼦称为轭,轭使两头⽜同步⾏⾛。
共轭即为按⼀定的规律相配的⼀对。
通俗点说就是孪⽣。
在数学中有共轭复数、共轭根式、共轭双曲线、共轭矩阵等。
求解⽬标
共轭梯度法是数值分析⾥⾯⼀类⾮常重要的⽅法,是⽤来解决⽆约束凸⼆次规划问题的⼀种⽅法
⽅法的⽬的就是通过迭代求得多元⼆次函数 [公式] 的极值点
基本思想
每个⽅向上只找⼀次,对于 [公式] 维空间就进⾏ [公式] 次计算,也就是说,我每个⽅向上都能⾛到极致,这样我就不会⾛任何的回头路了,效率也就最⾼。
那么是如何实现的呢?如果每个⽅向上都是正交的,我肯定就是在这个⽅向上⾛到极致了,这样⽅向也就确定了,也就是每⼀次都⾛正交⽅向,然后再确定每次的步长就可以了。
抽象图。
共轭梯度法 计算化学
共轭梯度法计算化学
共轭梯度法是一种常用于求解线性方程组的迭代方法,也可以用于计算化学中的一些问题。
在计算化学中,共轭梯度法常用于求解分子结构优化、能量最小化、电子结构计算等问题。
其中最常见的应用是求解非常大的线性方程组,如Hartree-Fock方程,即通过求解一个自洽的线性方程组来得到分子的基态电子结构。
共轭梯度法利用了线性方程组的特殊性质,通过迭代计算逼近线性方程组的解。
它不需要事先知道线性方程组的解的精确形式,只需要知道线性方程组的系数矩阵和右端向量。
在每一次迭代中,共轭梯度法利用之前的迭代结果和当前的残差信息来计算一个新的搜索方向,从而逼近解的位置。
通过多次迭代,共轭梯度法可以逐渐接近线性方程组的解。
在化学计算中,尤其是量子化学计算中,共轭梯度法经常用于求解大型稠密矩阵的特征值问题。
这些问题通常涉及求解特征方程,得到能量的本征值和本征函数。
共轭梯度法的迭代性质使得它非常适合处理大型稠密矩阵的特征值计算问题,因为它只需要存储和计算与当前解和残差相关的信息,而不需要存储和计算整个矩阵。
总之,共轭梯度法是一种非常有效的迭代方法,可以用于求解线性方程组以及一些涉及大型矩阵的计算化学问题。
在实际应用中,共轭梯度法经常与其他优化算法结合使用,以获得更高效、更准确的结果。
数值分析ppt第6章_共轭梯度法
• 共轭梯度法可由多种途径引入,这里我们将采用较为直观的
最优化问题来引入。为此,我们先来介绍最速下降法。
考虑线性方程组
的求解问题。其中 是给定的
(4.1) 阶对称正定矩阵,
维向量。
是给定的
维向量,
是待求的
为此,我们定义二次泛函
(4. 2)
定理6.4.1 设
对称正定,求解方程组 的极小点。
等价于求二次泛函
证明 直接计算可得
令
,则有
若
在某点
处达到极小,则必有 ,即 是方程组的解。
,从而有
反之,若
是方程组的解,即
有
于是对任一向量
注意到A的正定性,则
,因此
即
是泛函
的极小点。
最速下降法
求解线性方程组的问题就转化为求二次泛函 的极小点的问题。求二次函数的极小值问题, 通常的做法就好象盲人下山那样,先任意给定一个初始向量 确定一个下山的方向 的直线 使得对所有实数 ,沿着经过点 找一个点 而方向为
共轭梯度法
• 在使用SOR方法求解线性方程组时,需要确定松驰因子,只 有系数矩阵具有较好的性质时,才有可能找到最佳松驰因子, 而且计算时还需要求得对应的Jacobi矩阵B的谱半径,这常常 是非常困难的。
• 介绍一种不需要确定任何参数的求解对称正定线性方程组的
方法——共轭梯度法(或简称CG法)。它是50年代初期由 Hestenes和Stiefel首先提出的,近20年来有关的研究得到了 前所未有的发展,目前有关的方法和理论已经相当成熟,并 且已经成为求解大型稀疏线性方程组最受欢迎的一类方法。
有
以上性质说明不论采用什么方法,ຫໍສະໝຸດ 要能够构造个两两A共轭的向量
线性方程组的共轭梯度法
迭代过程
计算方程组的雅可比矩阵A和右端项b,得到线性方程组Ax=b。 计算初始残差r0=b-Ax0。 进行迭代,对于k=0,1,2,...,max_iter,执行以下步骤
迭代过程
01
1. 计算搜索方向pk=-Ak^T。
02
2. 在搜索方向pk上进行线搜索,找到步长λk,使得 Axk+1=b-λk*r^k最小化。
感谢观看
THANKS
定义
线性方程组是由一组线性方程组成的 数学模型,其中包含未知数和已知数。
分类
根据方程的系数矩阵和常数项矩阵, 线性方程组可以分为多种类型,如超 定方程组、欠定方程组和恰定方程组。
线性方程组的求解方法
直接法
通过消元或迭代等方法将方程组化为标准形式,然后 求解。
迭代法
通过不断迭代更新解的近似值,逐步逼近方程的解。
在金融工程中的应用
投资组合优化
共轭梯度法可以用于求解投资组合优化问题 ,以最大化投资收益或最小化风险。
期权定价
在期权定价模型中,共轭梯度法可以用于求解 Black-Scholes方程,以得到期权的合理价格。
风险管理
在风险管理方面,共轭梯度法可以用于求解 风险评估模型中的最优化问题,以评估和管 理金融风险。
解效率。
02
常用的预处理方法包括对角占优预处理、不完全LU
分解预处理等。
03
预处理技术可以消除原始方程组中的病态条件,降低
数值误差的放大效应。
自适应步长调整策略
自适应步长调整策略可以根据上 一步的搜索结果动态调整步长, 提高算法的稳定性和收敛速度。
常见的自适应步长调整策略包括 Armijo线搜索、Goldstein线搜
科学计算
共轭梯度法
一.介绍共轭梯度法(Conjugate Gradient )是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse 矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。
在各种优化算法中,共轭梯度法是非常重要的一种。
其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
共轭梯度法中最关键的两点是,搜索方向)(k d 和最佳步长k α。
其基本步骤是在点)(k X 处选取搜索方向)(k d , 使其与前一次的搜索方向)1(-k d 关于A 共轭,即(1)()(1),0k k k d d Ad --<>=然后从点)(k X 出发,沿方向)(k d 求得)(X f 的极小值点)1(+k X , 即)(min )()()(0)1(k dX f X f k k αλ+=>+如此下去, 得到序列{)(k X }。
不难求得0,)1()(>=<-k k Ad d 的解为)()()1(k k k k d X X α+=+其中,><><-=)()()()(,,k k k k kAd d Ad r α注意到)(k d 的选取不唯一,我们可取)1(1)()()(--+-∇=k k k k d X f d β由共轭的定义0,)1()(>=<-k k Ad d 可得:><><-=----)1()1()1()(1,,k k k k k Ad d Ad r β 共轭梯度法的计算公式如下:⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧+=><><-=+=><><-=-=-==+------(k)(k)1)(k )()()()()1(1(k))()1()1()1()(1(k)(k)(0)(0)d X X,,r ,,X r Xr d k k k k k k k k k k k k k k Ad d Ad r d d Ad d Ad r A b A b ααββ 二.程序框图定义矩阵A 和向量bAx=b定义x 的初值将x 代入计算公式误差到达精度要求Yes输出xNo 迭代出新的x 结束开始三.源码n=100;%矩阵阶数,可以按照题目需要更改syms x1 r1 d1A=zeros(n,n);b=zeros(n,1);b(1,1)=-1;b(n,1)=-1;for i=1:nA(i,i)=-2;endfor i=1:n-1A(i,i+1)=1;A(i+1,i)=1;endx1=zeros(n,1);for i=1:n*1000r1=b-A*x1;d1=r1;a=(r1'*d1)/(d1'*A*d1);x1=x1+a*d1;r2=b-A*x1;if(norm(x1)<=eps)breakendbb=-(r2'*A*d1)/(d1'*A*d1);d1=r2+bb*d1;enddisp([x1])四.结果矩阵A100阶的结果200阶的结果400阶的结果。
实例共轭梯度法
实例共轭梯度法共轭梯度法是一种迭代的优化算法,适用于求解无约束优化问题。
这种方法通过不断迭代,逐步逼近最优解。
在共轭梯度法中,每次迭代包括以下步骤:1. 计算负梯度方向:根据当前点的梯度计算负梯度方向。
2. 计算共轭方向:根据当前点的梯度和负梯度方向计算共轭方向。
3. 确定搜索方向:根据负梯度方向和共轭方向确定搜索方向。
4. 确定步长:根据搜索方向和目标函数确定步长。
5. 更新当前点:根据搜索方向和步长更新当前点。
6. 判断是否达到收敛条件:如果满足收敛条件,停止迭代;否则,继续迭代。
下面是一个简单的Python代码示例,演示了共轭梯度法的基本实现:```pythonimport numpy as npdef conjugate_gradient(f, df, x0, tol=1e-10, max_iter=1000):初始化x = x0r = -df(x) 负梯度方向p = r 共轭方向rsold = (r) 存储旧残差的平方for i in range(max_iter):计算搜索方向alpha = rsold / ((df(x))) 步长更新当前点x = x + alpha p计算新的残差和旧残差的差值rnew = -df(x)rsnew = (rnew)计算共轭方向和搜索方向的夹角余弦值 cos_theta = rsnew / rsold更新共轭方向和搜索方向p = rnew + cos_theta prsold = rsnew 更新残差的平方检查收敛条件if (rnew) < tol:breakreturn x, i+1, (rnew)```这个代码示例中,`f`是目标函数,`df`是目标函数的梯度函数,`x0`是初始点,`tol`是收敛精度,`max_iter`是最大迭代次数。
在函数内部,首先初始化当前点、负梯度方向和共轭方向,然后进入迭代过程。
在每次迭代中,根据负梯度方向和共轭方向计算搜索方向,并根据目标函数确定步长。
共轭梯度法最简明解释
共轭梯度法最简明解释
嘿,你知道啥是共轭梯度法不?这玩意儿可神奇啦!就好比你在一
个迷宫里找出口,有好多条路可以走。
共轭梯度法呢,就是一种找到最优解的方法。
想象一下,你要去山
顶看最美的风景,但是山有很多坡,你得选择最合适的路往上爬。
比
如说你一开始随便选了一条路走,走着走着发现不太对,那咋办?这
时候共轭梯度法就发挥作用啦!它会帮你调整方向,让你更接近山顶。
我给你举个例子哈,就像你要减肥,你试过各种方法,节食啦,运
动啦。
那共轭梯度法就像是有个智慧的教练在旁边,告诉你啥时候该
多吃点,啥时候该加大运动量,让你能最快地达到减肥的目标。
它不是那种死板的方法,而是很灵活的。
比如说在解决一个复杂的
问题时,它会根据实际情况不断调整策略。
这多厉害呀!
咱再想想,要是没有共轭梯度法,那得多费劲呀!就像你在黑夜里
没有手电筒,摸黑走路,多容易摔跤呀!
共轭梯度法真的是数学和科学领域的一个大宝贝!它能让很多难题
变得简单起来,能帮我们更快地找到答案。
我觉得吧,共轭梯度法就像是一把神奇的钥匙,能打开很多知识和
技术的大门,让我们看到更广阔的世界!你说是不是?。
共轭梯度法
共轭梯度法
梯度下降法是机器学习中最常用的优化算法之一,它可以有效地求解最优化问题。
然而,
梯度下降法存在一些缺点,比如它可能会收敛到局部最优解,而不是全局最优解,这就需
要我们寻找更好的优化算法。
共轭梯度法就是一种更好的优化算法,它可以有效地求解最优化问题,并且可以避免收敛到局部最优解。
共轭梯度法是一种迭代优化算法,它的基本思想是:在每一步迭代中,根据当前的梯度和
上一步的搜索方向,计算出一个新的搜索方向,并使用这个新的搜索方向来更新参数。
这样,每一步迭代都可以更快地收敛到最优解。
共轭梯度法的优点是,它可以有效地求解最优化问题,并且可以避免收敛到局部最优解。
它的缺点是,它的计算复杂度比梯度下降法要高,因为它需要计算每一步迭代的搜索方向。
总之,共轭梯度法是一种有效的优化算法,它可以有效地求解最优化问题,并且可以避免收敛到局部最优解。
它的缺点是计算复杂度较高,但是它可以更快地收敛到最优解,因此
在某些情况下,它是一种更好的优化算法。
共轭梯度法
共轭梯度法对于任意形式的目标函数()f X ,在极值点*X 附近展开成泰勒级数,且取前三项,有()()()****2**1()...2TT f X f Xf X X X X X f X X X ⎡⎤⎡⎤⎡⎤⎡⎤≈+∇-+-∇-⎣⎦⎣⎦⎣⎦⎣⎦因在极值点*X 处()*0f X ∇=,而()2**()f X H X ∇=为()f X 在*X 的二阶偏导数矩阵,即Hessian 矩阵,故()****1().().2T f X f X X X H X X X ⎡⎤⎡⎤≈+--⎣⎦⎣⎦ 对于二次函数来说,若令()()()2*2*2*221122,,f X f X f X a b c x x x x ∂∂∂===∂∂∂∂则()**1(),a b H X f X d b c ⎡⎤==⎢⎥⎣⎦而—常数 则,得到()()()()()()()()()()()()()()11221212121122*1**112*2**12**112**1222****11122-1()+--2---1=+--2--1-2---2x x a b f X d x x x x b c x x a x x b x x d x x x x b x x c x x d a x x b x x x x c x x ⎡⎤⎡⎤⎢⎥⎡⎤≈⎢⎥⎣⎦⎢⎥⎣⎦⎣⎦⎡⎤+⎢⎥⎡⎤⎣⎦⎢⎥+⎣⎦⎡⎤=+++⎢⎥⎣⎦由上式可知,当12*1**2x x X X x x ⎡⎤⎡⎤===⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦时,得到目标函数的极小值()*1()f X f X d ==,当22(),,...f X d d =时,则有等值线族。
令2()f X d =,代入上式,则有()()()()112222****2111221()-2---2f X d d a x x b x x x x c x x ⎡⎤=≈+++⎢⎥⎣⎦所以目标函数()f X 在*X 点附近的等值线方程为()()()()112222****1122-2---0a x x b x x x x c x x d +++=式中,122()d d d =-=常数。
共轭梯度法
又称共轭斜量法,是解线性代数方程组和非线性方程组的一种数值方法,例如对线性代数方程组A尣=ƒ, (1)式中A为n阶矩阵,尣和ƒ为n维列向量,当A对称正定时,可以证明求(1)的解尣*和求二次泛函(2)的极小值问题是等价的。
此处(尣,у)表示向量尣和у的内积。
由此,给定了初始向量尣,按某一方向去求(2)取极小值的点尣,就得到下一个迭代值尣,再由尣出发,求尣等等,这样来逼近尣*。
若取求极小值的方向为F在尣(k=1,2,…)处的负梯度方向就是所谓最速下降法,然而理论和实际计算表明这个方法的收敛速度较慢,共轭梯度法则是在尣处的梯度方向r和这一步的修正方向p所构成的二维平面内,寻找使F减小最快的方向作为下一步的修正方向,即求极小值的方向p(其第一步仍取负梯度方向)。
计算公式为再逐次计算(k=1,2,…)。
可以证明当i≠j时,从而p,p形成一共轭向量组;r,r,…形成一正交向量组。
后者说明若没有舍入误差的话,至多n次迭代就可得到(1)的精确解。
然而在实际计算中,一般都有舍入误差,所以r,r,…并不真正互相正交,而尣尣,…等也只是逐步逼近(1)的真解,故一般将共轭梯度法作为迭代法来使用。
近来在解方程组(1)时,常将共轭梯度法同其他一些迭代法结合作用。
特别是对病态方程组这种方法往往能收到比较显著的效果。
其方法是选取一对称正定矩阵 B并进行三角分解,得B=LL T。
将方程组(1)化为hу=b, (3)此处y=l T尣,b=l-1ƒ,h=l-1Al-T,而。
再对(3)用共轭梯度法,计算公式为(k=0,1,2,…)适当选取B,当B 很接近A时,h的条件数较之A大大减小,从而可使共轭梯度法的收敛速度大为加快,由一些迭代法的矩阵分裂A=M -N,可选取M 为这里的B,例如对称超松弛迭代(SSOR),强隐式迭代(SIP)等,这类方法常称为广义共轭梯度法或预条件共轭梯度法,它也可用于解代数特征值问题。
势函数的一种二阶偏微分方程。
数值分析11(共轭梯度法)
2 f 2 f 2 2 2 x x x 2 x 1 1 n 2 x3 Hessf Hessf 4 x x x 2 1 2 3 2 2 2 f f 4 x x 1 2 x3 2 x x x n n 1
第三步: k k+ 1, 如果 ||rk|| ≥ ,转第二步;
否则输出 x(k), 结束。
注释: 最速下降算法思想简单且容易实现,是 求解无约束优化问题的经典方法。 11:51
13/41
最好
+ 最好 =
最好 ?
• 方向(最速下降) (best rk) • 步长(精确搜索) (best tk) • x(k+1) = x(k) + tkrk 是否最好 ?
11:51
20/41
The Best of the 20th Century: Editors Name Top 10 Algorithms, SIAM News
现代迭代方法: Krylov子空间方法 共轭梯度法的关键是构造一组两两共 轭的方向(即一组线性无关向量)。巧妙的 是, 共轭方向可以由上次搜索方向和当前的 梯度方法之组合来产生。
参考: Two-Point Step Size Gradient Method
11:51
f(x1,x2)=100x12+x22
11:51
最速下降法
f(x1,x2)=100x12+x22
11:51
BB方法
局部思想: 最速下降法思想简单,但是收敛速度慢。本 质上是因为负梯度方向函数下降快是局部性质。 全局思想: N 维空间的任意向量可以由N个线性无关的 向量线性表示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初等变分原理 最速下降法 共轭梯度法 数值试验算例
04:09
1/41
从瞎子下山到最优化方法
Science of Better
04:09
预备知识I
设 x, y Rn , 记 ( x , y) = xT y ▪( x, y ) = ( y, x ); ▪( tx, y ) = (x, ty )= t ( x, y); ▪( x+ y, z ) = ( x, z ) + ( y, z ); ▪( x, x) ≥ 0, 且( x, x) = 0 x = 0; ▪(x,y)=||x||2|y||2cos<x,y>;
为选取最佳步长 t0 ,令
g(t ) ( Ax(0) b, r0 ) t( Ar0 , r0 ) 0
求解得 t0 = ( r0 , r0) / (Ar0 , r0)
04:09
12/41
解对称正定方程组Ax = b 的最速下降算法: 第一步: 取初值 x(0)∈R(n) , >0,计算
取初值点 x(0), 取负梯度方向 r0 = b – A x(0)
求点: x(1) = x(0) + t0r0 使得
f
( x(0)
t0r0 )
min tR
f
( x(0)
t
r0 )
记 g(t ) f ( x(0) ) t( Ax(0) b, r0 ) t 2 ( Ar0 , r0 ) / 2
xn2
Hessf
2 x22 x32 4 x1 x2 x32
4 x1 x22 x3
4 x1 x2 x32 2 x12 x32 4 x12 x2 x3
4 4
x1 x12
x22 x2
x3 x3
2 x12 x22
04:09
4/41
泰勒展式:
预备知识 III
f ( x) f ( xk ) f ( xk )( x xk ) f ( xk )( x xk )2 R
x2k )
R
n
f ( x) f ( xk )
( x f ( xk )
xi
i
xik )
i 1
n
1 2
( x 2 f ( xk )
xix j
i
xik )( x j
x
k j
)
R
i , j1
f (x)
f ( xk ) (gradf ( xk ))T ( x xk )
1 2
(
x
xk
)T
Hessf
2
2
1 ( A( x u),( x u)) 0 2
04:09
8/41
设 u 使 f(x) 取极小值。取非零向量 x∈R n,
对任意 t∈R , 有
g(t) f (u tx) 1 ( A(u tx), u tx) (b, u tx)
2
t2
f (u) t( Au b, x) ( Ax, x)
2
当 t=0 时, g(0)= f(u)达到极小值, 所以 g′ (0) =0 ,即
( Au – b , x ) = 0 Au – b = 0
所以u 是方程组 Ax = b 的解。源自04:099/41
瞎子与计算机
• 瞎子: 能感觉到脚下的坡度(这是海拔函数 在当前点的梯度值),但不知道山上其它点 的任何情况
设A是 n 阶对称正定阵 ▪( Ax, y ) = ( x, Ay )= (A y, x )= ( y, Ax ); ▪( Ax,x ) ≥0, 且( Ax, x) = 0 x = 0
04:09
3/41
预备知识 II
梯度: f ( x) gradf ( x)
, ,L , f f
x1 x2
• 计算机: 计算目标函数在该点的信息(如函 数值和梯度值), 但不知道其它点的信息
04:09
最速下降法(Gradient Descent)
在 x 处,梯度方向是 f(x) 增长最快方向 负梯度方向是 f(x) 下降最快方向
f ( x) f ( xk ) (gradf ( xk ))T ( x xk ) f ( xk ) tk (gradf ( xk ))T dk , 其中dk为x xk单位向量,tk为步长。
f (x)
f
(xk
)
f ( xk ) x1
( x1
x1k
)
f ( xk ) x2
( x2
x2k
)
1 2
( x 2 f ( xk )
x1x1
1
x1k )( x1
x1k )
( x 2 f ( xk )
x1x2
1
x1k )( x2
x2k )
1 2
( x 2 f ( xk )
x2x2
2
x2k )( x2
f ( x) 1 ( Ax, x) (b, x) 2
的极小值点 x 是线性方程组 Ax = b 的解。
证明: 设 u 是 Ax = b的解 Au = b f (u) 1 ( Au, u) 2
对任意 x∈R n , 只须证明 f (x) – f (u) ≥ 0
f ( x) f (u) 1 ( Ax, x) (b, x) 1 ( Au, u)
(
xk
)(
x
xk ) R
04:09
一阶导数推广
二阶导数推广
5/41
预备知识 IV
f ( x) 1 ( Ax, x) (b, x) 2
n
n
=
1 2
aij xi x j bi xi
i, j1
i 1
gradf Ax b
2 f
x12
2 f
L
x1xn
Hessf M O M A
04:09
(a,b) || a ||| b || cos a,b ,其中 a,b 表示向量a和b的夹角。
从初值点 x(0) 出发,以负梯度方向 r 为搜索方向 选择步长 t0, 使 x(1) = x(0) + t0r 为 f(x) 极小值点
最速下降方向: r = –f = b – Ax
04:09
11/41
2 f
xnx1
L
2 f
xn2
6/41
费马引理:
设x0是f ( x)的一个极值点,且f ( x)在x0处导数存在,则 f ( x0 )=0
注释: 费马引理的价值在于将极值问题转化为 非线性方程的求解问题。
04:09
7/41
定理4.10(初等变分原理) 设A =(aij )n×n为实对称正 定矩阵, x, b Rn 则 x是二次函数
f T xn
例如 f(x1,x2,x3)=x12x22x32
f
Hessian矩阵:
(
x)
f x1 f x2 f x3
=
2 x1 x22 x32 2 x12 x2 x32 2 x12 x22 x3
2 f
x12
L
Hessf M O
2 f
xnx1
L
2 f
x1xn
M
2 f