线性方程组的求解释工科学生的基本能力,也是油藏数值模拟编程的重要内容。建立质量守恒方程之后,方程组的求解是程序编制的主要问题,因此数值分析成了油藏工程专业的必修课程。
1 一般线性方程组的求解
线性方程组的求解有三种途径:直接法、迭代法和极小化方法。
直接法:利用Gauss消元或矩阵分解,通过有限次运算可求出精确解。
迭代法:构造迭代格式,产水迭代序列,通过无限次迭代过程求解。有限次截断得近似解。
极小化方法:构造二次模函数,用迭代过程求二次模函数的极小化问题,即变分法,要求A对称正定,现实中该条件很难满足,因此主要讨论直接法和迭代法。
直接解法基于Gauss消去或矩阵分解,根据矩阵形式的不同,其分解方法不同,因此形成了多种基于矩阵分解的直接解法,这些求解方法在Accord.Net库中基本都有,在Accord.Math.Decomopositions的命名空间下,可以直接拿来用。如正交分解QR,奇异值分解SVD,三角分解LU,Cholesky分解和NMF分解,只需输入系数矩阵A和右端项b即可得到线性方程组的计算结果x,非常方便,但是有必要知道这些分解方法是如何实现及由哪些优点和缺点。
直接法是在没有舍入误差的情况下,通过有限步四则运算以求解方程组。但是,在实际计算时,由于初始数据变为机器数而产生的误差,以及计算过程中所产生的舍入误差等都对解的精度产生影响,因此直接法实际上也只能算出方程组的近似解。这种方法的优点是计算量小,可事先估计,缺点是所需存储单元较多,编写程序复杂。
迭代法是按照某种规则产生近似解序列,是极限逼近精确解,迭代方法的好坏集中体现在此迭代序列的收敛速度上。优点是算法简单,编程容易实现。缺点是要求方程组系数矩阵具有某种特殊性质,以保证迭代过程的收敛性,发散的迭代过程是没有使用价值的。
一般简单迭代法有Jacobi迭代法,Gauss-Seidel迭代法,SOR方法,SSOR方法,共轭梯度法等。
Jacobi迭代格式通常不一定收敛,主对角占优下一定收敛。Gauss-Seidel迭代格式收敛速度更快,但迭代格式同样不一定收敛。
假设线性方程组为Ax=b可以写作:
则Jacobi迭代格式为:
Gauss-Seidel迭代格式为:
为了用矩阵形式表示迭代格式,若将A变为A=D-L-U, 其中D为对角矩阵,L和D分别为严格下三角和严格上三角矩阵。
如果将(D-L-U)x=b改写为Dx=(L+U)x+b,据此建立迭代格式即为Jacobi迭代格式:
如果将方程Ax=(D-L-U)x=b改写为Dx=Lx+Ux+b,据此建立迭代格式,则Gauss-Seidel迭代格式为:
如果A=(aij)nm是严格对角占优矩阵,则线性方程组的雅可比迭代法与高斯-塞德尔迭代法都收敛,且塞德尔迭代的收敛速度不低于雅可比迭代法。
逐次超松弛迭代法(Successive OverRelaxation Method,简称SOR方法)是高斯-塞德尔方法的一种加速方法,是解大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算内存较少等优点,但需要较好的加速因子,也称松弛因子。松弛因子的选取对迭代格式的收敛性影响极大。实际计算时,需要根据系数矩阵的性质,结合经验通过反复计算来确定松弛因子。
2 大型线性稀疏方程组的求解
现实中许多的科学和科学计算问题的求解往往归结为大型稀疏线性方程组的求解,如石油地震数据处理,油藏数值模拟和数值天气预报等。
假设线性方程组Ax=b,其中A为n阶实系数矩阵,x和b是长度为n的向量。对于大型稀疏线性方程组,,由于存储量和计算量的限制,常采用迭代法求解。根据经验,对于中等规模的n阶(n<100)的线性方程组,由于直接解法的准确性和可靠性,所以它们是经常被采用的方法。如果对大型稀疏线性方程组也用直接法求解,需要过多的存储空间和运算量,并且容易产生过多的填入,破坏原始矩阵的洗属性因而效率不高。所以直接解法的计算代价较高,使得迭代方法更具竞争力。
上述介绍了常用的迭代方法,Young和Varga也对迭代法进行了细致的描述与探讨,并已成为迭代法方面的经典著作。但由于科技的发展,越来越多的非结构、特殊的、大型的、稀疏的问题放在了计算数学的工作者面前,仍用这些方法显得收敛速度太慢,甚至不收敛,且这些方法依赖于最优参数的选取(如SOR,SSOR),但一般的方程组无法直接得到最优参数,从而限制了方法的高效使用。目前这些方法已经很少用于直接求解大型稀疏线性方程组,而是作为预处理和其他方法结合使用。
20世纪70年代以来,人们将研究的重点转移到了对大型稀疏方程组的高效求解上来,大型稀疏线性方程的并行计算也越来越受到关注。目前这方面的研究热点是Krylov子空间方法类及其并行实现。
参考文献
李晓爱, 陈玉花, 张耘,等. 求解大型稀疏线性方程组的Krylov子空间方法的发展[J]. 科技导报, 2013, 31(11):68-73.
Young D M. Iterative solution of largelinear systems[M]. Elsevier, 2014.
Varga, Richard S. Matrix iterativeanalysis. Vol. 27. Springer Science & Business Media, 2009.
安学庆,求解大型稀疏线性方程组算法研究[D]郑州大学,2006
油藏地质和开发交流qq群 63231398