基于python实现的Jacobi迭代法和Gauss-Seidel迭代法

迭代法解线性方程组
本文介绍了迭代法解线性方程组的基本原理,包括Jacobi迭代法和Gauss-Seidel迭代法,并提供了这两种方法的算法实现。

之前的文章介绍过Gauss消元法、Doolittle和Crout分解等解线性方程组的直接方法。但是直接法不是在任何时候都可用的,它有以下缺点:

  • 在有舍入误差的情况下,直接法只能得到方程的近似解。
  • 如果待求解问题规模很大,直接法求解的计算量是很大的,更糟的是随着计算量的增大舍入误差积累也会越多,从而得到的解误差更大。所以直接法适合小规模稠密型方程组的求解。
  • 另外,直接法的程序设计也比较复杂。

迭代法解线性方程组

对于方程组 A x = b Ax=b Ax=b 一般可以将其写成如下形式
x = M x + g x=Mx+g x=Mx+g建立上述方程组的迭代公式:
x ( k + 1 ) = M x ( k ) + g , k = 0 , 1 , 2 , … x^{(k+1)}=Mx^{(k)}+g,k=0,1,2,\dots x(k+1)=Mx(k)+g,k=0,1,2,这个迭代公式有什么用呢?

当向量序列 x ( k ) x^{(k)} x(k) 收敛于 x ∗ x^* x 时,有
x ∗ = M x ∗ + g x^*=Mx^*+g x=Mx+g可以发现 x ∗ x^* x 即为方程组 x = M x + g x=Mx+g x=Mx+g 的解,也就是说,当 x ( k ) x^{(k)} x(k) 收敛时, x ( k ) x^{(k)} x(k) 即为方程组的解。

以上就是迭代法解方程组的基本原理,只要 x ( k ) x^{(k)} x(k)收敛,就可以通过k步迭代得到方程组的近似解。

下面介绍两种经典的迭代法:Jacobi迭代法和Gauss-Seidel迭代法。


Jacobi迭代法

假设有下列线性方程组
{ a 11 x 1 + a 12 x 2 + a 13 x 3 = b 1 a 21 x 1 + a 22 x 2 + a 23 x 3 = b 2 a 31 x 1 + a 32 x 2 + a 33 x 3 = b 3 \left\{\begin{array}{l}a_{11}x_1+a_{12}x_2+a_{13}x_3=b_1\\a_{21}x_1+a_{22}x_2+a_{23}x_3=b_2\\a_{31}x_1+a_{32}x_2+a_{33}x_3=b_3\end{array}\right. a11x1+a12x2+a13x3=b1a21x1+a22x2+a23x3=b2a31x1+a32x2+a33x3=b3
将其写成下面形式
{ x 1 = 1 a 11 ( b 1 − a 12 x 2 − a 13 x 3 ) x 2 = 1 a 22 ( b 2 − a 21 x 1 − a 23 x 3 ) x 3 = 1 a 33 ( b 3 − a 31 x 1 − a 32 x 2 ) \left\{\begin{array}{l}x_1=\frac1{a_{11}}(b_1-a_{12}x_2-a_{13}x_3)\\x_2=\frac1{a_{22}}(b_2-a_{21}x_1-a_{23}x_3)\\x_3=\frac1{a_{33}}(b_3-a_{31}x_1-a_{32}x_2)\end{array}\right. x1=a111(b1a12x2a13x3)x2=a221(b2a21x1

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值