第三章 线性代数方程组的共轭梯度法
- 格式:pdf
- 大小:144.64 KB
- 文档页数:28
共轭梯度法公式
共轭梯度法是一种用于求解线性方程组的迭代算法。
其主要思想是通过利用前一次迭代的信息来加速当前迭代的速度,从而减少迭代次数和计算量。
共轭梯度法公式包括以下几个步骤:
1. 初始化:设初始解为x0,残量b0为Ax0-b,共轭方向d0=b0。
2. 迭代求解:对于第k次迭代,计算步长αk,使得xk+1=xk+αkd,其中d是共轭方向,满足dTkAd=0,即d是A的共轭向量。
3. 更新残量:计算新的残量bk+1=Axk+1-b,如果bk+1小于预设精度,则停止迭代。
4. 更新共轭方向:计算新的共轭方向dk+1=bk+1+βkdk,其中βk=(bk+1)Tbk+1/(bk)Tbk,保证dk+1与之前的共轭方向都是A的共轭向量。
5. 重复迭代,直到满足收敛条件,返回最终解xk+1。
共轭梯度法是一种高效的求解大型线性方程组的方法,尤其适用于稀疏矩阵和对称正定矩阵。
公式简单易懂,容易实现,且具有较快的收敛速度。
- 1 -。
共轭梯度法步骤共轭梯度法是一种求解线性方程组的迭代算法,它以高效稳定的特点而广受欢迎。
以下是共轭梯度法的步骤:步骤1:初始化首先,我们需要有一个初始向量x0和一个初始残量r0=b-Ax0。
其中,A为系数矩阵,b为常数向量。
步骤2:计算方向向量令d0=r0,表示第一次迭代的方向向量。
步骤3:计算步进长度令α0=(r0·r0)/(d0·Ad0),其中·表示向量的点积。
α0表示迭代过程中每个方向向量的步进长度。
步骤4:更新解向量令x1=x0+α0d0,表示迭代后的解向量。
步骤5:计算新残量令r1=r0-α0Ad0。
步骤6:判断终止条件如果r1的范数小于预设阈值,或者迭代次数达到预设次数,终止迭代。
否则,进入下一次迭代。
步骤7:更新方向向量令β1=(r1·r1)/(r0·r0),表示更新方向向量的轴线。
步骤8:计算新方向向量令d1=r1+β1d0,表示新的迭代方向向量。
步骤9:计算新的步进长度令α1=(r1·r1)/(d1·Ad1)。
步骤10:更新解向量令x2=x1+α1d1。
步骤11:更新残量令r2=r1-α1Ad1。
步骤12:重复步骤6至11,直至满足终止条件。
总结起来,共轭梯度法的步骤主要包括初始化、计算方向向量、计算步进长度、更新解向量、计算新残量、判断终止条件、更新方向向量、计算新的步进长度、更新解向量和更新残量等。
该算法迭代次数较少,收敛速度快,适用于大规模线性方程组的求解。
共轭梯度法例题详解共轭梯度法是一种用于求解线性方程组的迭代方法。
它的基本思想是利用一组共轭的搜索方向来逐步逼近线性方程组的解。
下面我将从多个角度详细解释共轭梯度法的例题。
首先,让我们考虑一个简单的例子。
假设我们要求解一个二维线性方程组 Ax = b,其中 A 是一个对称正定矩阵,x 和 b 是列向量。
共轭梯度法的步骤如下:1. 初始化 x0 和 r0,其中 x0 是初始解向量,r0 是初始残差向量,r0 = b Ax0。
2. 初始化搜索方向 p0 = r0。
3. 迭代计算:a. 计算步长 alpha = (r_k^T r_k) / (p_k^T A p_k),其中 k 表示第 k 次迭代。
b. 更新解向量,x_(k+1) = x_k + alpha p_k。
c. 更新残差向量,r_(k+1) = r_k alpha A p_k。
d. 计算 beta = (r_(k+1)^T r_(k+1)) / (r_k^T r_k)。
e. 更新搜索方向,p_(k+1) = r_(k+1) + beta p_k。
4. 重复步骤 3 直到满足收敛条件。
这是共轭梯度法的基本算法。
下面我们通过一个具体的例子来说明。
假设我们要求解以下线性方程组:3x + 2y = 9。
2x + 5y = -4。
将其转化为矩阵形式,Ax = b,其中。
A = [[3, 2],。
[2, 5]],。
x = [[x],。
[y]],。
b = [[9],。
[-4]].首先,我们需要判断矩阵 A 是否是对称正定矩阵。
对于本例中的 A,它是对称矩阵且特征值为正,因此满足条件。
接下来,我们进行共轭梯度法的迭代计算。
假设初始解向量 x0 = [[0], [0]],初始残差向量 r0 = b Ax0 = [[9], [-4]]。
初始化搜索方向 p0 = r0。
第一次迭代:计算步长 alpha = (r0^T r0) / (p0^T A p0) = (81 + 16) / (9 + 20) = 97 / 29 ≈ 3.34。
4.3共轭梯度法4.3.1共轭方向法定义4.3.1设A 是n ×n 对称正定矩阵,d 1,d 2,是n 维非零矢量,如果d 1T Ad 2=0则称d 1和d 2是A-共轭的,简称共轭的设d 1,d 2,...,d m 是R n 中一组非零向量,如果d i T Ad j =0,i ≠j ,j,i=1,2,...,k则d 1,d 2,...,d m 是A-共轭的,简称共轭的,也称它们是一组A 共个方向定理4.3.3设x 0∈Rn 是任意初始点,对于极小化二次函数min f(x)=1/2 x T Ax-b T x 共轭方向法至多经n 步精确线性搜索终止;且每一x i+1都是f(x)在x 0和方向d 1,d 2,....,di, 所张成的线性流形{|x x=x 0+,0j i j j da ∑=j a ∀}中的极小点。
4.3.4共轭梯度法共轭梯度法是一个典型的共轭方向法,他的每一个搜索方向是相互共轭的,而这些搜索方向d k 仅仅是负梯度方向-g k 与上一次迭代的搜索方向d k-1组合。
因此,存储量小,计算方便。
定理4.3.6对于正定二次函数,采用精确线性搜索的共轭梯度法在m ≦n 步后终止,且对1≦i≦n成立下列关系式:d i T Ad j=0,j=0,1,...,i-1,g i T Ag j=0,j=0,1-1,d i T Ag i= - g i T g I[g0,g1,...,g i]=[g0,Ag0,,...,A i g0][d0,d1,...,d i]=[g0,Ag0,,...,A i g0]其中[g0,g1,...,g i]和[d0,d1,...,d i]分别表示g0,g1,...,g i及d0,d1,...,d i张成的子空间,[g0,Ag0,,...,A i g0]表示g0的i阶Krylov子空间。
定理4.3.9(FR共轭梯度法的总体收敛性定理)假定f R n R在有界水平集L={x R n|f(x)≦f(x0)}上连续可微,且有下界,那么采用精确线性搜索的F-R共轭梯度法产生的序列{x k}至少有一个聚点是驻点,即1当{x k}是有穷数列时,其最后一个点是f(x)的驻点;2当{x k}是无穷数列时,它必有聚点,且任一聚点都是f(x)的驻点。
利用共轭梯度法求解线性方程组翟莹1012205052在自然科学和工程技术中很多问题的解决常常归结为解线性方程组,而这些方程组的系数矩阵大致可分为两种:低阶稠密矩阵和大型稀疏矩阵。
而求解方程组的方法通常为直接法和迭代法。
直接法用于较低阶方程组的求解,效率较高;迭代法更适用于高阶方程组的求解,常用的经典迭代法有高斯-赛德尔迭代法和雅各比迭代法,但收敛效率较低;共轭梯度法(CG)以较高的收敛速度而经常被采用。
从理论上讲,一个n阶方程组最多迭代n 步就可求出精确解。
1 直接法直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。
但实际计算中由于舍入误差的存在和影响,这种方法也只能得到线性方程组的近似解,该方法是求解低阶稠密矩阵方程组的有效方法。
如Cramer法则,Gauss消元法及其变形(LU分解法、Cholesky 分解法、QR分解法)等。
Matlab中,用矩阵除法“/”或“\”直接求解线性方程组(见附录一),它是一个内部包含着许许多多的自适应算法,对超定方程用最小二乘法求解;对欠定方程因为它的解不唯一,Matlab给出所有解中范数最小的一个特解;对于三对角阵方程组,采用追赶法求解。
2 迭代法迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法。
该方法具有对计算机的存贮单元需求少,程序设计简单、原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法。
迭代法不是用有限步运算求精确解,而是通过迭代产生近似解逼近精确解。
如Jacobi迭代、Gauss-Seidel迭代、SOR迭代法等。
在科学研究和大型工程设计中提出的求解问题,经离散后,常常归结为求解形如Ax = b 的大型线性方程组,此时系数矩阵A和b是通过测量或其它方法得到的,但是在多数情况下方程可能是病态的,即A的条件数非常大。
此时,我们仍然用Matlab中的常规算法,得到的解则可能不是真解。
通常情况下,对系数矩阵A和方程的右端b作微小的扰动,再用上述方法求解,扰动后方程组的解与原方程组的解相差甚远。
共轭梯度方法(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$。
共轭梯度方法具有收敛速度快、存储空间小等优点,但对于非对称和非正定的线性方程组,该方法可能不收敛。
同时,该方法也有一些变体,如预处理共轭梯度法、共轭残差法等,可以更好地解决不同类型的线性方程组求解问题。