Skip to content
The Chat Archive
gpt-3.5-turbo-0301· OpenAI WildChat-4.8M (AI2)

使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解 10x(1)-x(2)-2x(3)=7.2 -x(1)+10x(2)-2x(3)=8.3…

  1. User

    使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解 10x(1)-x(2)-2x(3)=7.2 -x(1)+10x(2)-2x(3)=8.3 -x(1)-x(2)+5x(3)=4.2 给出python代码(代码中有必要注释)

  2. Assistant

    我们来分别看一下雅可比迭代法和高斯-赛德尔迭代法的代码实现:

    雅可比迭代法:

    import numpy as np
    
    # 设置迭代次数和误差
    max_iter = 1000
    epsilon = 1e-6
    
    # 初始化向量x
    x = np.zeros(3)
    
    # 系数矩阵A和右侧常数向量b
    A = np.array([[10, -1, -2], [-1, 10, -2], [-1, -1, 5]])
    b = np.array([7.2, 8.3, 4.2])
    
    # 对角线元素
    D = np.diag(np.diag(A))
    
    # 非对角线元素
    L_U = A - D
    
    # 迭代计算
    for i in range(max_iter):
        x_new = np.dot(np.linalg.inv(D), b - np.dot(L_U, x))
        err = np.linalg.norm(x_new - x)
        
        if err < epsilon:
            break
        
        x = x_new
        
    print('solution:', x)
    

    高斯-赛德尔迭代法:

    import numpy as np
    
    # 设置迭代次数和误差
    max_iter = 1000
    epsilon = 1e-6
    
    # 初始化向量x
    x = np.zeros(3)
    
    # 系数矩阵A和右侧常数向量b
    A = np.array([[10, -1, -2], [-1, 10, -2], [-1, -1, 5]])
    b = np.array([7.2, 8.3, 4.2])
    
    # 对角线元素
    D = np.diag(np.diag(A))
    
    # 非对角线元素
    L_U = A - D
    L = np.tril(L_U)
    U = np.triu(L_U)
    
    # 迭代计算
    for i in range(max_iter):
        x_new = np.dot(np.linalg.inv(D - L), b - np.dot(U, x))
        err = np.linalg.norm(x_new - x)
        
        if err < epsilon:
            break
        
        x = x_new
        
    print('solution:', x)
    

    上面两段代码中,我们使用了numpy模块里的diag()函数、tril()函数和triu()函数分别提取矩阵的对角线元素、下三角元素和上三角元素,这样就能分别得到系数矩阵A的对角线元素、非对角线下三角元素L和非对角线上三角元素U。在每次迭代时,计算新的向量x_new,直到满足停止条件(设定的迭代次数达到最大值或误差小于设定的阈值)。