美文网首页
解线性方程组的迭代法:Jacobi迭代法与Gauss-Seide

解线性方程组的迭代法:Jacobi迭代法与Gauss-Seide

作者: JiantingFeng | 来源:发表于2020-04-18 16:01 被阅读0次

Jacobi迭代法:

import numpy as np

# Jacobi 迭代法计算线性方程

# Ax = b, x_0为初始值, epsilon为误差限, n为最大迭代次数

A = np.array([[1,2,-2],

            [1,1,1],

            [2,2,1]])

b = np.array([1,2,3])

x_0 = np.array([0,0,0])

epsilon = 0.01

n = 100

def jacobi(A, b, x_0, n, epsilon):

    s = len(A)

    D = np.diag(np.diag(A))

    inv = np.linalg.inv(D)

    M = np.eye(s)-np.dot(inv,A)

    count = 0

    # rho 为谱半径

    rho = np.max(np.linalg.eig(M)[0])

    if rho >= 1:

        print("Jacobi迭代法发散")

    else:

        x = x_0

        err = 0x3f3f3f

        while 1:

            if count >= n:

                break

            if err < epsilon:

                break

            x = np.dot(M, x_0)+np.dot(inv, b)

            print("第",count,"次迭代结果:",x[0],',',x[1],',',x[2],'\n')

            count = count + 1

            err = abs(max(x-x_0))

            x_0 = ximport numpy as np

# Gauss-Seidel 迭代法计算线性方程

# Ax = b, x_0为初始值, epsilon为误差限, n为最大迭代次数

A = np.array([[1,2,-2],

            [1,1,1],

            [2,2,1]])

b = np.array([1,2,3])

x_0 = np.array([0,0,0])

epsilon = 0.01

n = 100

def GS(A, b, x_0, n, epsilon):

    D = np.diag(np.diag(A))

    L = -1*np.tril(A-D)

    U = -1*np.triu(A-D)

    inv = np.linalg.inv(D-L)

    M = np.dot(inv,U)

    count = 0

    # rho 为谱半径

    rho = abs(np.max(np.linalg.eig(M)[0]))

    if rho >= 1:

        print("Gauss-Seidel迭代法发散")

    else:

        x = x_0

        err = 0x3f3f3f

        while 1:

            if count >= n:

                break

            if err < epsilon:

                break

            x = np.dot(M, x_0)+np.dot(inv, b)

            print("第",count,"次迭代结果:",x[0],',',x[1],',',x[2],'\n')

            count = count + 1

            err = abs(max(x-x_0))

            x_0 = x

    print("谱半径:",rho)

GS(A, b.T, x_0, n, epsilon)

        print("谱半径:",rho)

jacobi(A, b.T, x_0, n, epsilon)

Gauss-Seidel迭代法:

相关文章

  • 解线性方程组的迭代法:Jacobi迭代法与Gauss-Seide

    Jacobi迭代法: import numpy as np # Jacobi 迭代法计算线性方程 # Ax = b...

  • 解线性方程组的迭代法

    Jacobi迭代法 迭代公式 代码 Gauss-Seidel迭代法 迭代公式 代码 SOR 迭代公式 其中. 代码

  • Jacobi迭代法

    通过迭代来求解Ax=b,这里边用了输入输出来交互,还有新的循环while。 代码在控制误差方面出了错误,重新发一下

  • day05线性方程组的迭代解法

    1.什么是矩阵分裂迭代法? 收敛性分析 举例: 什么是Jacobi迭代? Jacobi迭代基本原理 什么是Gaus...

  • SQR逐次超松弛迭代法

    SQR迭代法是对GS迭代法的又一改进,在每一解向量分量处取其先前分量与GS迭代法算出的分量值的加权平均。其中w松弛...

  • 常见算法思想4:迭代法

    迭代法 迭代法也被称为辗转法,是一种不断用变量的旧值递推新值的过程,在解决问题时总是重复利用一种方法。与迭代法相对...

  • 牛顿迭代法

    如何用牛顿迭代法求一个数的平方根(立方根)   对于  对于该方程的求解,可以用牛顿迭代法求近似解   设r是f(...

  • 迭代思想

    求解一元高次方程的时候 ,用迭代法近似求解这类问题,梯度法,最小二乘法,牛顿迭代法。迭代法 用于 线性非线形方程组...

  • 迭代法

    什么是迭代法 迭代法,其实就是不断的用旧的变量值,递推计算新的变量值。通常是用循环语句控制 迭代法的基本步骤是什么...

  • 前序遍历

    迭代法 递归法

网友评论

      本文标题:解线性方程组的迭代法:Jacobi迭代法与Gauss-Seide

      本文链接:https://www.haomeiwen.com/subject/tkdklqtx.html