如何让Jacobi迭代求解器仅针对点集非零元素高效运行?
优化十字形稀疏矩阵的Jacobi迭代求解器
我用Python实现了一个可处理n×n矩阵的Jacobi迭代求解器,但我的矩阵仅在k=1、0、-1对角线位置存在非零值,当前求解器浪费了大量时间与计算资源。我希望求解器仅处理十字形连接的非零元素,结构如下:
0 , (i,j+1), 0 (i-1,j), (i,j), (i+1,j) 0, (i,j-1), 0
最初我通过添加M[i,j]!=0的条件让迭代求解器跳过零元素,之后又尝试多种方法实现上述十字形网格的处理逻辑,比如设置条件判断或构建零平面。但单个值处理效率太低,需要通过批量计算来提升时间效率。
现有实现代码
x = 1 y = 1 Nx = 20 Ny = 20 Px = Nx + 1 Py = Ny + 1 hx = x/Nx hy = y/Ny sol_len = (Px)*(Py) m = np.zeros([ sol_len,sol_len]) h = np.zeros([sol_len]) n=len(h) T=np.zeros(n) T[:] = 1 # setting up intial guess ### The Jacobi part for k in range(1000): # defining number of iterations for i in range(n): # defining range of i from 0 to n xapprox = h[i] for j in range(0,i):# works along each horizontal grid marking if m[i,j]!=0:#excludes elements that are 0 #print('J ',j) xapprox = xapprox - m[i,j]*T[j] for j in range(i+1,n): if m[i,j]!=0:#excludes elements that are 0 #print('J ',j) xapprox = xapprox - m[i,j]*T[j] if abs(m[i,i])>0: T[i] = (1/m[i,i])*xapprox
内容的提问来源于stack exchange,提问作者Egandoue Peroumal
相关产品推荐
相关产品推荐

