线性方程组之迭代法篇

不管哪一种数值算法,其设计原理都是将复杂转化为简单的重复,或者说,通过简单的重复生成复杂,在算法设计和算法实现过程中,重复就是力量[1]。                                 ----题记

一般地,线性方程组可以表达为
                                                                                   Ax = b
其中,A称为系数矩阵,b称为右端项,x为待求的未知数向量。 
      迭代法的适用场合。如果未知数个数不多的话,用消去法(包括各种选主元的方式)就可以完美地解决,但是实际情况中,如有限元方程中,系数矩阵常常是大规模稀疏矩阵(所谓稀疏,指的是矩阵中只有少量的元素值非零),这个时候再使用消去法的话(其实,它可以转化为矩阵形式的 LU 分解),就会破坏系数矩阵的稀疏性,导致计算量激增。
      先看两种简单情况下的结果。如果系数矩阵为对角阵的话,那么方程可以很容易地求解出来;稍微复杂一些,如果系数矩阵为下三角型矩阵的话,那么可以先求出第一个未知数,再求出第二个未知数,一直顺序进行下去,直至求出最后一个未知数。
     在 [1] 中(P139)提到,求解线性方程组的迭代法,其实质是将所给方程组逐步地对角化或三角化,即将线性方程组的求解过程加工成对角方程组或三角方程组求解过程的重复。当加工成对角方程组求解过程的重复时,对应于 Jacobi 迭代法;当加工成三角方程组求解过程的重复时, 对应于 Gauss-Seidel 迭代法。进一步地,如果对 Gauss-Seidel 迭代法使用松弛技术(将两个相伴随的近似值进行加权来更好地逼近目标值的方法,该技术的关键在于加权系数即松弛因子的选取),就得到了超松弛 (SOR) 迭代方法(这里的“超”是指加权的系数的取值可以不必在[0,1]范围内);考虑到对称正定的系数矩阵,由于其上三角矩阵是其下三角矩阵的转置,针对上三角形式,使用 SOR迭代方法,接着针对下三角形式,类似地可以使用 SOR 迭代方法,和前者不同仅仅是未知数迭代的顺序,后者采用的是倒序的方式。额,既然两次使用 SOR 迭代方法,那么自然地就将其称之为 SSOR 迭代法 [2]。Oh,No! 其实不是这样子滴,SSOR 里面的第一个 S 是对称的(Symmetric)这个单词的首字母。将SSOR迭代法中的矩阵用作共轭梯度法中的预处理矩阵,就可以得到相应的SSOR-PCG方法[3]。
      迭代法是否奏效,即迭代序列能否逼近问题的真解,就需要考虑收敛性问题了。粗略地分析,从前后两个序列的差来看,自然要求它们之间的距离(可以给出不同形式定义的,常见的有1-范数,2-范数以及无穷范数)越来越小,直至趋于 0。注意到,迭代的序列是一个向量序列,借用数值序列的结论(考虑一个等比数列a_n=k*a_{n-1}趋于0,那么k的绝对值必须小于1),这里要求迭代矩阵的范数(可以将其看成数的绝对值)小于1。 
      后记:强烈推荐王能超先生的书。

参考资料:
        [1] 《计算方法--算法设计及其MATLAB实现(第2版)》 Chap5 线性方程组的迭代法,王能超编著,华中科技大学出版社,2012年
        [2] 《矩阵计算(第3版)》10.1.6 对称SOR方法,Gene H. Golub,Charles F. Van Loan著,袁亚湘等译,人民邮电出版社,2011年
        [3] 《有限元结构分析并行计算》Chap5 大型稀疏有限元方程组求解的并行预处理迭代解法,周树荃等著,科学出版社,1994年

时间: 2024-10-19 01:58:12

线性方程组之迭代法篇的相关文章

开源Math.NET基础数学类库使用(06)数值分析之线性方程组直接求解

原文:[原创]开源Math.NET基础数学类库使用(06)数值分析之线性方程组直接求解 开源Math.NET基础数学类库使用系列文章总目录:   1.开源.NET基础数学计算组件Math.NET(一)综合介绍    2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算    3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式   4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式   5.开源.NET基

并行计算复习————第三篇 并行计算理论基础:并行数值算法

第三篇 并行计算理论基础:并行数值算法 注:此篇较水,=.= Ch9 稠密矩阵运算 9.1 矩阵的划分 矩阵的划分一般分为带状划分和棋盘划分,在此基础上又有循环划分的变体: 带状划分:把矩阵的若干行或若干列连续地划分给一个处理器 循环带状划分:把矩阵的若干行或若干列间断且等间隔地划分给一个处理器 棋盘划分:把方阵连续地划分成若干子方阵,每个处理器指派一个子方阵 循环棋盘划分:把方阵间断且等间隔地划分成若干子方阵,每个处理器指派一个子方阵 一般情况下,棋盘划分的划分方法能够开发出更高并行度的算法

【原创】开源Math.NET基础数学类库使用(六)数值分析之线性方程直接求解

开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍  2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算  3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式 4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式 5.开源.NET基础数学类库使用Math.NET(五)C#解析Delimited Formats数据格式 6.开源.NET基础

数值分析课程设计

数值分析学习心得: 插值法:拉格朗日插值,埃米特插值 函数逼近:最小二乘法 求积分的算法:牛顿-科斯特公式,龙贝格求积公式,高斯求积公式 求线性方程组的迭代法:jacobi迭代法,高斯-赛德尔迭代法 求非线性方程的算法:牛顿法 求常微分方程初值问题的算法:欧拉法,龙格-库塔法 数值分析课程设计  浙江大学 陈越 第1章 数值分析课程实践概要1.1 课程实践的意义1.2 实验的基本要求第2章 MATLAB简介2.1 MATLAB概述2.2 常用基本指令2.3 数值技术第3章 案例详解1:误差的影响

数值分析小项目Numeric

花了一星期把以前学过的数值分析算法用c++整理了下, 取名Numeric NumericV1.0 https://github.com/caicai9494/numericV1.0 基本实现了以下功能: 1 多项式的插值 2 矩阵求逆 以及 线性方程组 3 迭代法求非线性方程的解 计划在V2.0中用qt实现界面, 并且增加其他功能比如特征根,积分,微分等. 还有非常非常多缺陷,希望能逐步完善它.

诗经 全文

诗经 全文 (带注释和译文) http://www.edu009.com/Article/HTML/Article_60756.html <诗经> 春秋·孔丘 <诗经>是我国第一部诗歌总集,先秦时代称为“诗”或“诗三百”,孔子加以了整理.汉武帝采纳董仲舒“罢黜百家,独尊儒术”的建议,尊“诗”为经典,定名为<诗经>. <诗经>现存诗歌 305 篇,包括西周初年到春秋中叶共 500 余年的民歌和朝庙乐章,分为风.雅.颂三章. “风”包括周南.召南.邶.鄘.卫.王

求解线性方程组的三种基本迭代法

前言 在实际项目的一些矩阵运算模块中,往往需要对线性方程组进行求解以得到最终结果. 然而,你无法让计算机去使用克莱默法则或者高斯消元法这样的纯数学方法来进行求解. 计算机解决这个问题的方法是迭代法.本文将介绍三种最为经典的迭代法并用经典C++源代码实现之. 迭代法简介 从解的某个近似值出发,通过构造一个无穷序列去逼近精确解的方法. 雅克比迭代法 计算流程: 1. 初始化系数矩阵等计算环境 2. 设置精度控制和迭代次数控制变量 3. 采用如下式子进行迭代计算: 4. 循环执行 3,若(条件a)当前

线性方程组的迭代解法——超松弛迭代法

1.代码 %%超松弛迭代法(此方法适用于大型稀疏矩阵但不适合与病态方程的解 %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度,omiga是松弛因子 function OIM = Overrelaxation_iterative_method(M,b,X0,epsilon) [m,n] = size(M); d = diag(M);L = zeros(m,n);U = zeros(m,n);D = zeros(m,n);eps = floor(abs(log(ep

线性方程组的迭代解法——雅可比迭代法

1.代码 %%雅可比迭代法(此迭代法对于病态矩阵的解不理想) %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度 function JIM = Jacobian_iteration_method(M,b,X0,epsilon) [m,n] = size(M); d = diag(M);L = zeros(m,n);U = zeros(m,n);D = zeros(m,n); delta = 0;ub = 100;X = zeros(m,ub);X(:,1) = X