计算方法-Jacobi(雅可比)迭代法

太累了,不想写太多说明了,看ppt看代码吧,推荐华东理工大学的慕课
链接:https://www.bilibili.com/video/av83437134

计算方法-Jacobi(雅可比)迭代法

计算方法-Jacobi(雅可比)迭代法_第1张图片
计算方法-Jacobi(雅可比)迭代法_第2张图片
计算方法-Jacobi(雅可比)迭代法_第3张图片
计算方法-Jacobi(雅可比)迭代法_第4张图片
计算方法-Jacobi(雅可比)迭代法_第5张图片

针对上面的课堂作业,我写了下面的代码,运行成功

"""
@Date:2020/2/24
@Author:indigoDeveloper
@E-mail:[email protected]
"""
import numpy as np

def Jacob(a,b):
    x1 = x2 = x3 = 1 #设置(1,1,1)为初始点
    count = 0
    X = [[x1],[x2],[x3]]
    Xarray = np.array(X)   #转为矩阵
    barray = np.array(b)
    
    array = np.array(a) #读入矩阵
    L = U = H = [[0,0,0],
                [0,0,0],
                [0,0,0]]#创建同等大小的矩阵L U
    D = [[4,0,0],
         [0,5,0],
         [0,0,7]]
    Darray = np.array(D)
    Darray_N = np.linalg.inv(Darray)  #取逆矩阵

    for i in range(len(a)):
        for j in range(len(a[0])):
            #为L添加内容
            if i>j:
                L[i][j] = a[i][j]
            #为U添加内容
            elif j>i:
                U[i][j] = a[i][j]
            #相加生成H阵
    for i in range(len(a)):
        for j in range(len(a[0])):
            H[i][j] = (L[i][j] + H[i][j])/2
    Harray = np.array(H)
    #开始迭代
    while count<20:
        a_1 = np.dot(Darray_N,Harray)
        a_2 = np.dot(a_1,Xarray)
        a_3 = -1*a_2
        a_4 = np.dot(Darray_N,barray)
        Xarray = a_3 + a_4

        count += 1
        
        print('第{}次'.format(count))
        print(Xarray)
def main():
    A=[[4,2,1],
        [2,5,-2],
        [1,-2,7]]
    B=[[23],[29],[0]]
    Jacob(A,B)

if __name__ == "__main__":
    main()

给你们看看效果

计算方法-Jacobi(雅可比)迭代法_第6张图片
就到这儿吧,每次都是深夜写代码才写的下去,或者该改改习惯了
2020/2/24

你可能感兴趣的:(一个津门带学生的计算机学习旅程)