Gauss Deidel迭代法与Jacobi迭代法无本质区别,唯一的区别是,Jacobi算法需要将一个完整的数组x=(x11,x12,…,x1n)迭代算出x21,仍使用x=(x11,x12,…,x1n),直到算出x2n,凑出下一个完整的x=(x21,x22,…,x2n),而Gauss Seidel迭代法则是在利用x=(x11,x12,…,x1n)算出x21之后,直接将x21代入x,变为x=(x21,x12,…,x1n),然后继续算出x22,代入,以此类推。
原理上,令M=D-L(Jacobi中是D),于是B=I-(D-L)的逆A=(D-L)的逆U,
f=(D-L)的逆b
与Jacobi相比,二者的代码几乎完全相同,下方代码大段黏贴自《Jacobi迭代法的python实现》
例子同《Jacobi迭代法的python实现》
可以发现Gauss-Seidel方法只需要迭代9次,是Jacobi方法的一半,原因是每一步计算都把结果代入了
代码如下
"""
# -*- coding: utf-8 -*-
Created on Thu Feb 14 07:25:33 2019
@author: 鹰皇