共轭梯度法
数学上,共轭梯度法是求解特定线性系统的数值解的方法,其中那些矩阵为对称和正定。共轭梯度法是一个迭代方法,所以它适用于稀疏矩阵系统,因为这些系统对于象乔莱斯基分解这样的直接方法太大了。这种系统在数值求解偏微分方程时相当常见。
共轭梯度法也可以用于求解无约束的最优化问题。
双共轭梯度法提供了一种处理非对称矩阵情况的推广。
目录[隐藏] |
方法的表述
设我们要求解下列线性系统
,
其中n-×-n矩阵A是对称的(也即,AT= A),正定的(也即,xTAx> 0对于所有非0向量x属于Rn),并且是实系数的。
将系统的唯一解记作x*。
最后算法
经过一些简化,可以得到下列求解Ax= b的算法,其中A是实对称正定矩阵。
x0 :=0
k :=0
r0 :=b
repeat untilrk is "sufficientlysmall":
k :=k + 1
if k = 1
p1 :=r0
else
endif
xk :=xk-1 +αkpk
rk :=rk-1 -αkApk
endrepeat
结果为xk
外部连接
- Méthode du gradient conjugé(共轭梯度法,法语)作者N.Soualem.
- Méthode du gradient conjugépréconditionné(预处理共轭梯度法,法语)作者N.Soualem.
- 共轭梯度法通俗介绍作者Jonathan RichardShewchuk.
参考
共轭梯度法最初出现于
- Magnus R. Hestenesand Eduard Stiefel(1952),Methods of conjugate gradients for solvinglinear systems, J. Research Nat. Bur. Standards 49,409–436.
下列教科书中可以找到该方法的描述
- KendellA. Atkinson(1988),An introduction to numerical analysis(2nded.),Section 8.9, John Wiley and Sons. ISBN 0-471-50023-2.
- Gene H.Golub and Charles F. Van Loan, Matrix computations(3rded.),Chapter 10, Johns Hopkins University Press. ISBN 0-8018-5414-8.
共轭梯度法
共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。
共轭梯度法最早是又Hestenes和Stiefle(1952)提出来的,用于解正定系数矩阵的线性方程组,在这个基础上,Fletcher和Reeves(1964)首先提出了解非线性最优化问题的共轭梯度法。由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次终止性等优点,现在共轭梯度法已经广泛地应用与实际问题中。
共轭梯度法是一个典型的共轭方向法,它的每一个搜索方向是互相共轭的,而这些搜索方向d仅仅是负梯度方向与上一次迭代的搜索方向的组合,因此,存储量少,计算方便
ConjugateGradient
共轭梯度法的推导
在 数值线性代数 中, 共轭梯度法 是一种求解 对称 正定 线性方程组
的迭代方法。共轭梯度法可以从不同的角度推导而得,包括作为求解最优化问题的共轭方向法的特例,以及作为求解特征值问题的Arnoldi/Lanczos迭代的变种。
本条目记述这些推导方法中的重要步骤。
目录 |
从共轭方向法推导
从Arnoldi/Lanczos 迭代推导
共轭梯度法可以看作Arnoldi/Lanczos 迭代应用于求解线性方程组时的一个变种。
一般Arnoldi 方法
Arnoldi 迭代从一个向量
开始,通过定义
,其中
逐步建立 Krylov子空间
的一组标准正交基
。换言之,对于
,
由将
相对于
进行 Gram-Schmidt正交化然后归一化得到。
写成矩阵形式,迭代过程可以表示为
其中
当应用于求解线性方程组时,Arnoldi迭代对应于初始解
的残量
开始迭代,在每一步迭代之后计算
和新的近似解
.
直接Lanzcos 方法
在余下的讨论中,我们假定
是对称正定矩阵。由于
的对称性, 上Hessenberg 矩阵
变成对阵三对角矩阵。于是它可以被更明确地表示为
这使得迭代中的
有一个简短的三项递推式。Arnoldi 迭代从而简化为 Lanczos 迭代。由于
对称正定,
同样也对称正定。因此,
其中
和
有简单的递推式:
改写
为
其中
此时需要观察到
实际上,
和
同样有简短的递推式:
通过这个形式,我们得到
的一个简单的递推式:
以上的递推关系立即导出比共轭梯度法稍微更复杂的直接Lanczos 方法。
从正交性和共轭性导出共轭梯度法
如果我们允许缩放
并通过常数因子补偿缩放的系数,我们可能可以的到以下形式的更简单的递推式:
作为简化的前提,我们现在推导
的正交性和
的共轭性,即对于
,
各个残量之间满足正交性的原因是
实际上可由
乘上一个系数而得。这是因为对于
,
,对于
,
要得到
的共轭性,只需证明
是对角矩阵:
是对称的下三角矩阵,因而必然是对角矩阵。
现在我们可以单纯由
的正交性和
的共轭性推导相对于缩放后的
的常数因子
和
。由于
的正交性,必然有
。于是
类似地,由于
的共轭性,必然有
。于是
推导至此完成。
参考文献
- Hestenes, M. R.;Stiefel, E.. Methods of conjugate gradients for solving linearsystems (PDF). Journal ofResearch of the National Bureau of Standards. 12 1952, 49(6).
- Saad, Y.. Chapter 6:Krylov Subspace Methods, Part I. Iterative methods for sparselinear systems. 2nd. SIAM. 2003. ISBN978-0898715347.
梯度下降法
目录 |
描述
有关梯度下降法的描述 梯度下降法,基于这样的观察:如果实值函数
在点
处可微且有定义,那么函数
在
点沿着梯度相反的方向
下降最快。
因而,如果
对于
为一个够小数值时成立,那么
。考虑到这一点,我们可以从函数
的局部极小值的初始估计
出发,并考虑如下序列
使得
因此可得到
如果顺利的话序列
收敛到期望的极值。注意每次迭代步长
可以改变。右侧的图片示例了这一过程,这里假设
定义在平面上,并且函数图像是一个碗形。蓝色的曲线是等高线(水平集),即函数
为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(一点处的梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数
值最小的点。
例子
梯度下降法处理一些复杂的非线性函数会出现问题,例如Rosenbrock函数
其最小值在
处,数值为
。但是此函数具有狭窄弯曲的山谷,最小值
就在这些山谷之中,并且谷底很平。优化过程是之字形的向极小值点靠近,速度非常缓慢。
下面这个例子也鲜明的示例了"之字"的下降,这个例子用梯度下降法求
的极小值。
缺点
由上面的两个例子,梯度下降法的缺点是[1]:
- 靠近极小值时速度减慢。
- 直线搜索可能会产生一些问题。
- 可能会'之字型'地下降。
参阅
参考文献
- MordecaiAvriel (2003). Nonlinear Programming: Analysis and Methods.Dover Publishing. ISBN 0-486-43227-0.
- Jan A.Snyman (2005). Practical Mathematical Optimization: AnIntroduction to Basic Optimization Theory and Classical and NewGradient-Based Algorithms. Springer Publishing. ISBN 0-387-24348-8
牛顿法(Newton'smethod)又称为牛顿-拉弗森方法(Newton-Raphsonmethod),它是一种在实数域和复数域上近似求解方程的方法。方法使用函数
的泰勒级数的前面几项来寻找方程
的根。
目录[隐藏] |
起源
牛顿法最初由艾萨克·牛顿在《流数法》(Methodof Fluxions,1671年完成,在牛顿死后的1736年公开发表)。约瑟夫·拉弗森也曾于1690年在AnalysisAequationum中提出此方法。
方法说明
蓝线表示方程f而红线表示切线.可以看出xn+1比xn更靠近f所要求的根x. 首先,选择一个接近函数
零点的
,计算相应的
和切线斜率
(这里
表示函数
的导数)。然后我们计算穿过点
并且斜率为
的直线和
轴的交点的
坐标,也就是求如下方程的解:
我们将新求得的点的
坐标命名为
,通常
会比
更接近方程
的解。因此我们现在可以利用
开始下一轮迭代。迭代公式可化简为如下所示:
已经证明,如果
是连续的,并且待求的零点
是孤立的,那么在零点
周围存在一个区域,只要初始值
位于这个邻近区域内,那么牛顿法必定收敛。并且,如果
不为0,那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
其它例子
第一个例子
求方程f(x)= cos(x) − x3的根。两边求导,得f '(x)= −sin(x) − 3x2。由于-1≤ cos(x) ≤ 1(对于所有x),则-1 ≤ x3 ≤ 1,即-1 ≤ x ≤1,可知方程的根位于0和1之间。我们从x0 =0.5开始。
第二个例子
牛顿法亦可发挥与泰勒展开式,对于函式展开的功能。
求a的m次方根。
- a= 0设
,
而a的m次方根,亦是x的解,
以牛顿法来迭代: