【发布时间】:2019-05-13 11:53:45
【问题描述】:
我需要构造如下所示的 2D 拉普拉斯算子:
,其中
,I 是单位矩阵。到目前为止,我已经使用diags method of scipy 完成了它,但我想知道是否有更聪明的方法可以使用block_diag method 来完成它。有人试过用这种方法构建二维拉普拉斯算子吗?
我目前的创建方法是通过这个函数:
from scipy.sparse import diags
# Defining the size of the matrix
nx = 3
ny = 3
N = nx*ny
main_diag = [-4.0 for i in xrange(N)]
side_diag = []
for i in xrange(1,N):
if i%4 == 0:
side_diag.append(0)
else:
side_diag.append(1)
up_down_diag = [1.0 for i in xrange(N-4)]
diagonals = [main_diag,side_diag,side_diag,up_down_diag,up_down_diag]
laplacian = diags(diagonals, [0, -1, 1,nx,-nx], format="csr")
print laplacian.toarray()
【问题讨论】:
-
请显示您当前的方法,以免我们不小心再次提出相同的建议:)
-
``diads` 很好,但是您应该能够使用 numpy 方法来创建
diagonals列表的元素。我也使用coo进行这种布局。 -
运行代码时出现错误:ValueError: Diagonal length (index 3: 5 at offset 3) doesn't agree with matrix size (9, 9).
-
Numerical Recipes pages 1028-1029 有很好的拉普拉斯矩阵的图表和解释。 (注意:一些函数有参数
nx, ny,一些ny, nx。)
标签: python numpy scipy sparse-matrix