首页 > 其他分享 >【数值计算方法】线性方程组的迭代解法

【数值计算方法】线性方程组的迭代解法

时间:2024-08-06 16:38:41浏览次数:9  
标签:线性方程组 迭代 boldsymbol 矩阵 向量 迭代法 范数 解法

目录

第6章 线性方程组的迭代解法

graph LR A[迭代法] --> B[定常迭代法] A --> C[不定常迭代法] B-->D[雅可比Jacobi迭代法] B-->E[高斯赛德尔Gauss-Seidel迭代法] B-->F[超松弛SOR迭代法] C-->G[共轭梯度法] C-->H[广义极小残量法]

1. 范数和条件数

线性方程组的解是一个向量 , 称为解向量. 近似解向量与精确解向量之差成为近似解的误差向量. 范数:衡量向量和矩阵大小的度量概念

1.1 向量和矩阵的范数

img

img

矩阵的 F 范数是向量 2 范数的直接推广 , 矩阵的 2 范数的计算是 \(A^T A\) 的谱半径的开方 , 所以又称为谱范数

对于矩阵A和向量x,如果满足:

\[\|Ax\|\leqslant\|A\|\cdot\|x\| \]

则称向量范数和矩阵范数相容.常用的范数相容关系有:

\[\begin{gathered} \|Ax\|_{1}\leqslant \|A\|_1\cdot\|x\|_1, \\ \|Ax\|_{\infty}\leqslant \|A\|_\infty\cdot\|x\|_\infty, \\ \|Ax\|_{2}\leqslant \|A\|_{2}\cdot\|x\|_{2}, \\ \|Ax\|_{2}\leqslant \|A\|_{F}\cdot\|x\|_{2}. \end{gathered}\]

1.2 条件数和扰动分析

对于线性方程组:

\[Ax=b \]

解向量x由A,x决定.当A,b受到微小扰动时,对解x的扰动不一定也是微小的.无论方程组中的系数矩阵 A 有扰动 , 还是右端 b 有扰动 , 解 x 的相对误差除了受相应扰动的相对误差以外 , 还与 \(||A||*||A^{-1}||\) 的大小有关

img

对于一个确定的线性方程组 , 若系数矩阵A的条件数相对地小 , 就称方程组是良态的 ,矩阵为良态矩阵 ; 反之 , 条件数相对地大 , 就称方程组病态 , 矩阵为病态矩阵.

使用稳定方法求病态方程组的解,结果可能很差.

img

2. 基本迭代法

2.1 迭代法基本思路

对于线性方程组:

\[Ax=b \]

其中,$A\in\mathbb{R}^{n\times n} \(,\)\boldsymbol{b}\in\mathbb{R}^n$ 已知,求解\(x\in\mathbb{R}^n\)

假定A以下分解,M为非奇异方阵:

\[A=M-N \]

则有以下关系:

\[Mx=Nx+b 或者 x=Bx+g \]

其中,\(B=M^{-1}N , g=M^{-1}b.\) 从而可以建立迭代公式:

\[x^{(k+1)}=Bx^{(k)}+g\tag{1} \]

给定初始向量 \(x^{(0)}\) ,进行迭代,就可以得向量序列 \({x^{(k)}}\) .若该序列收敛于一个确定的值 \(x^*\).则\(x^{*}=Bx^{*}+g\),也就是\(Ax^*=b\),\(x^*\)就是线性方程组的解.

初值\(x^{(0)}\)可以任意取,但一般取\(x^{(0)}=0\)或\(x^{(0)}=b\).

判断是否收敛的标准:

计算出\(x^{k+1}\)后,计算\(error=\frac{||b-A*x^{k+1}||}{||b||}\) ,若\(error\)小于某个给定的阈值,则认为迭代收敛.

以上就是解线性方程组的基本迭代解法

在公式(1)中,为了避免B,g中的求逆计算 , 我们可以按如下方式进行迭代:

\[Mx^{(k+1)}=Nx^{(k)}+b.\tag{2} \]

只是,这就每次迭代就需要求解一个系数矩阵为 M 的线性方程组\(Mx^{(k+1)}=b'\).如果M矩阵具有特殊性质(对角阵,上三角阵等),这样的方程组易于求解.如:

\[A=D-L-U \]

分别是对角矩阵、严格下三角矩阵和严格上三角矩阵:

\[\begin{gathered} D=\mathrm{diag}(a_{11},a_{22},\cdots,a_{nn}), \\ \boldsymbol{L}=-\begin{pmatrix}0&0&\cdots&0\\a_{21}&0&\cdots&0\\\vdots&\ddots&\ddots&\vdots\\a_{n1}&a_{n2}&\cdots&0\end{pmatrix}, \\ \boldsymbol{U}=-\left(\begin{matrix}{0}&{{a_{12}}}&{\cdots}&{{a_{1n}}}\\{\vdots}&{\ddots}&{\ddots}&{\vdots}\\{0}&{\ddots}&{\ddots}&{{a_{n-1,n}}}\\{0}&{0}&{\cdots}&{0}\\\end{matrix}\right), \end{gathered}\]

下面介绍三种基本迭代解法:雅可比迭代法、高斯–赛德尔迭代法和SOR迭代法, 并对它们的适用性、收敛性质和收敛速度

2.2 雅可比迭代法

在公式(2)中,取\(M=D\),\(N=L+U\),就可以得到雅可比迭代法的迭代公式:

\[D\boldsymbol{x}^{(k+1)}=(\boldsymbol{L}+\boldsymbol{U})\boldsymbol{x}^{(k)}+\boldsymbol{b}.\tag{3} \]

img

2.3 高斯–赛德尔迭代法

高斯-赛德尔迭代法(简称GS迭代法)的迭代格式为:

\[Dx^{(k+1)}=Lx^{(k+1)}+Ux^{(k)}+b.\\(D-L)x^{(k+1)}=Ux^{(k)}+b. \]

img

2.4 超松弛 (SOR) 迭代法

GS 迭代格式可以改写成:

\[\begin{aligned}x^{(k+1)}&=D^{-1}(Lx^{(k+1)}+Ux^{(k)}+b)\\&=\boldsymbol{x}^{(k)}+\boldsymbol{D}^{-1}(\boldsymbol{L}\boldsymbol{x}^{(k+1)}+\boldsymbol{U}\boldsymbol{x}^{(k)}-\boldsymbol{D}\boldsymbol{x}^{(k)}+\boldsymbol{b}).\end{aligned} \]

为了加快迭代的收敛速度 , 将上式等号右端的第二项\(D^{-1}(Lx^{(k+1)}+Ux^{(k)}-Dx^{(k)}+b).\)看成是修正量,引入超松弛因子\(omega\) , 并将修正量乘上\(omega\) , 得到修正后的迭代格式:

\[x^{(k+1)}=\boldsymbol{x}^{(k)}+\omega\boldsymbol{D}^{-1}(\boldsymbol{L}\boldsymbol{x}^{(k+1)}+\boldsymbol{U}\boldsymbol{x}^{(k)}-\boldsymbol{D}\boldsymbol{x}^{(k)}+\boldsymbol{b}),\\x^{(k+1)}=(\boldsymbol{D}-\omega\boldsymbol{L})^{-1}[(1-\omega)\boldsymbol{D}+\omega\boldsymbol{U}]\boldsymbol{x}^{(k)}+\omega(\boldsymbol{D}-\omega\boldsymbol{L})^{-1}\boldsymbol{b}. \]

这就是逐次超松弛迭代法 , 简称SOR迭代法.

img

标签:线性方程组,迭代,boldsymbol,矩阵,向量,迭代法,范数,解法
From: https://www.cnblogs.com/aksoam/p/18345515

相关文章

  • windows AD域控密码过期邮件通知迭代版本
    利用poweshell脚本在域控服务器上查找即将过期的账号,并邮件推送至用户和管理员针对windowsAD域控密码过期邮件通知-二乘八是十六-博客园(cnblogs.com)文章的升级版本脚本升级内容:对账号设置三种形式:即将过期、已经过期、未激活三种状态进行通知对密码过期时间进行......
  • Java集合:Collection and Map;ArrayList;LinkList;HashSet;TreeSet;HashMap;TreeMap;Iterator:
        集合介绍:                        是一组变量类型(容器),跟数组很像。一,引用集合的原因(必要性):                  A:数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。          B:使用数......
  • 为什么 xgboost.QuantileDMatrix 使用自定义数据迭代器对数据进行四次传递?
    我正在尝试使用自定义数据迭代器,如下所示此处,因为我的数据集太大。只是为了测试它是如何工作的,我正在使用示例的子集并运行以下代码。X是我的数据的numpy数组。我的迭代器如下所示classIterForQDMatrix(xgb.core.DataIter):def__init__(self,d......
  • 【Python】Python中的输入与输出——内附Leetcode【151.反转字符串中的单词】的C语言
    输入与输出导读一、Python中的输出1.1基本用法1.2格式化输出1.3通过`:`格式化值的输出1.4其它格式化输出二、Python中的输入2.1基本用法2.2`split()`方法2.3split()习题演练结语导读大家好,很高兴又和大家见面啦!!!在上一篇内容中我们介绍了Python中的数据类......
  • 【Python学习手册(第四版)】学习笔记14-迭代器和列表解析(一)
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。本文主要以通俗易懂的语言介绍迭代器(文件迭代、手动迭代iter和next等),列表解析式包括基础知识包括写法、文件上使用列表解析、扩展列表解析语法等,对列表解析不懂的同学着重推荐......
  • 市场主流 AI 视频生成技术的迭代路径
       AI视频生成技术的迭代路径经历了从GAN+VAE、Transformer、DiffusionModel到Sora采用的DiT架构(Transformer+Diffusion)等多个阶段,每个阶段的技术升级都在视频处理质量上带来了飞跃性的提升。这些技术进步不仅推动了AI视频生成领域的快速发展,也为未来的应用场景提供了更......
  • c++中的迭代器
    前言hello大家好,我是文宇。正文C++中的迭代器是一种访问容器中元素的对象。它可以看作是一种抽象的指针,通过迭代器可以便捷地遍历和操作容器中的元素,无需了解容器内部的数据结构和实现细节。迭代器提供了一组操作,包括指向容器中的元素、移动到下一个元素、访问当前元素等功......
  • LA 问题的若干种解法
    看了眼P5903的题解区,方法还是挺多的,那我就浅浅的总结一下。Algorithm1最简单的,直接往他的父亲节点跳,单次询问复杂度\(\mathrmO(n)\),总复杂度为\(\mathrmO(qn)\)。这是最基础的写法。Algorithm2我们用倍增的思想来做,这个也很简单不多讲,单次的复杂度为\(\mathrmO(\lo......
  • 数仓sql场景:迭代求结果问题
    1.需求2.sql实现这道题先需要去分析结果集,本质上是一个迭代累加的过程,先要得到如下结果如果在面试数仓中实现了以上结果,基本上面试官会很通过,也在短时间内可以实现,实现sql如下withtbas(select1ass,'a'aspvunionallselect2ass,'b'aspvunionallselect3......
  • 循环语句:解锁编程世界的无限迭代
    引言循环,它不仅仅是简单的重复,更是高效、优雅的代名词。无论是遍历数组、处理文件、模拟复杂系统,还是优化算法性能,循环都是不可或缺的基石。接下来将带您深入循环的奥秘,揭示其背后的工作原理,以及如何在编程实践中灵活运用,让您的代码在迭代中绽放光彩。循环流程图循环结构对......