You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:35:10