原理:
请看本人博客:
代码:
import numpy as npmax=100#迭代次数上限Delta=0.01m=2#阶数:矩阵为2阶n=3#维数:3X3的矩阵shape=np.full(m, n)shape=tuple(shape)def read_tensor(f,shape):#读取张量 data=[] for i in range(n**(m-1)): line = f.readline() data.append(list(map(eval, line.split(",")))) return np.array(data).reshape(shape) def read_vector(f):#读取向量 line = f.readline() line = line.replace("\n","") line=list(map(eval, line.split(","))) return np.array(line) #读取数据 f = open("jacobi_data.txt")A=read_tensor(f,shape)#读取矩阵Ab=read_vector(f)#读取bf.close()print('A:')print(A)print('b:',b)#求LU=L+ULU=np.copy(A)for i in range(n): LU[i,i]=0LU=0-LU#求D:系数矩阵的对角线元素D=np.copy(A)D=D+LU#迭代求解x=np.ones(n)#用于存储迭代过程中x的值y=np.ones(n)#用于存储中间结果DLU=np.dot(np.linalg.inv(D),LU)#对D求逆,然后和LU相乘Db=np.dot(np.linalg.inv(D),b)print('x:',x)for iteration in range(max): #迭代计算 y=np.dot(DLU,x)+Db #判断是否达到精度要求 if np.max(np.fabs(x-y))
数据:
组织形式:前3行是A的数据,最后1行是b的数据。
结果: