将MATLAB代码转换用于使用Kronecker产品生成2D Laplacian矩阵的代码
以下MATLAB代码使用Kronecker产品生成2D Laplacian矩阵 方法。
function A=A(N)
% Assemble the system matrix A
e = ones(N,1);
D = spdiags([e -2*e e], -1:1, N, N);
I = speye(N);
A = kron(D,I)+kron(I,D);
h = 1/(N+1);
A=A/h^2;
`
我需要将其转换为Python,以解决PDE边界值问题。
我的第一次尝试涉及使用 smop 。遇到了一大堆错误,并认为这是不值得的。
我的第二次尝试涉及通过使用 scipy 库。
这是我
import numpy as np
import scipy.sparse as sps
def build_laplacian_2D_kron(N):
e = np.ones(shape=(N, 1))
data = np.concatenate([e, -2*e, e] , axis= -1)
diags = np.array([-1, 0, 1])
D = sps.spdiags(data.transpose(), diags, N, N)
I = sps.speye(N)
A = np.kron(D, I) + np.kron(I, D)
h = 1 / (N + 1)
A = A / h ** 2
A = sps.spmatrix.tocsc(A)
return A
if __name__ == '__main__':
build_laplacian_2D_kron(6)
试图运行代码时到目前为止
ValueError: offsets array must have rank 1
的 尝试。我一直在尝试修复它一段时间,但无济于事。
任何帮助都将不胜感激
更新:通过的输出
(0, 0) -36.0
(1, 0) 9.0
(2, 0) 9.0
(3, 0) 0.0
(0, 1) 9.0
(1, 1) -36.0
(2, 1) 0.0
(3, 1) 9.0
(0, 2) 9.0
(1, 2) 0.0
(2, 2) -36.0
(3, 2) 9.0
(0, 3) 0.0
(1, 3) 9.0
(2, 3) 9.0
(3, 3) -36.0
Process finished with exit code 0
这
ans =
(1,1) -36
(2,1) 9
(3,1) 9
(1,2) 9
(2,2) -36
(4,2) 9
(1,3) 9
(3,3) -36
(4,3) 9
(2,4) 9
(3,4) 9
(4,4) -36
是 n = 2 在我的输出中?任何帮助将不胜感激。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论