目录
构造函数和析构函数(Konstruktor / Dekonstruktor)
问题描述
生活中在碰到某些特定问题,譬如处理偏微分方程(partielle Differentialgleichungen) ,Cholesky分解或者一些图像问题的时候,我们会碰到一些维度很大,但含有大量零元的矩阵,用一般的求解法,诸如高斯消元法,LR-、QR- 分解法虽然能直接求解精确值,但计算时间复杂度为 ,且需要大量的空间存储矩阵及可能产生的中间值,对计算机来说是个不小的负担。而即使利用高斯消元法也要考虑计算机本身以及一些不恰当的求解步骤产生的误差(schlecht konditioniert),不能保证计算结果绝对精确,有时还需要迭代法对结果进一步处理才能得到期望的近似值(Nachiteration)。
稀疏矩阵的迭代求解(算法)
稀疏矩阵是一种每一行的非零元个数显著小于列数的特殊矩阵,实际存储时可以通过只存储非零元的方式节省内存。迭代求解法(Iterationsverfahren)是一种通过逐步逼近精确值的方式得到误差范围内的近似值的方法,它的优势是:
- 处理大型矩阵时比直接求解法更高效,往往在很有限的步数就能得到比较精确的结果。
- 原矩阵在计算过程中基本没有变化,保留了稀疏矩阵的优势,且不需要建立中间矩阵,大大地节省内存空间。
- 对于某些矩阵(shlechte konditionierte Matrizen) 能得出比直接求解法更精确的值。
但是运用迭代求解法既要保证结果不断地逼近精确值(konvergiert),也要在每一步后对得到的中间向量进行误差分析,设置一个合适的停止条件(Abbruchbedingung),保证算法终止。这往往要求矩阵满足一些特殊条件。
接下来介绍两种算法:Jacobi求解法(Gesamtschrittverfahren)和共轭梯度法(Konjugierte Gradienten)。
Jacobi求解法
原理
Jacobi求解法属于Splitting求解的一种,Splitting的基本特征是在运算中把矩阵分解为上三角矩阵(obere Dreiecksmatrix)、下三角矩阵(untere Dreiecksmatrix)和对角矩阵(Diagonalmatrix):
可以对方程进行如下转化:
在Jacobi求解法中,取 ,得到:
此方程可以转化为递归方程:
当由该递归方程定义的 存在时(konvergiert),那个极值正好是方程组的解,因此任选一个起始值
,只要递归方程收敛,就能利用这个式子无限逼近精确值。
收敛性(Konvergenz)
问题:在Jacobi求解法中取 是什么意思?这和方程的收敛性有何联系?
直观一点理解: