二维泊松方程 python
时间: 2023-10-31 20:06:07 浏览: 62
二维泊松方程可以用Python中的NumPy和SciPy库来求解。以下是一个简单的例子:
```python
import numpy as np
from scipy.sparse import diags
from scipy.sparse.linalg import spsolve
# 定义网格大小和步长
N = 100
h = 1.0 / (N - 1)
# 定义边界条件
u_top = 0
u_bottom = 0
u_left = 0
u_right = 1
# 定义右侧项
f = np.zeros((N-2)**2)
for i in range(N-2):
for j in range(N-2):
x = (i+1)*h
y = (j+1)*h
f[i*(N-2)+j] = -2*np.pi**2*np.sin(np.pi*x)*np.sin(np.pi*y)
# 构造系数矩阵
diagonals = [-4*np.ones((N-2)**2), np.ones((N-2)**2-1), np.ones((N-2)**2-1), np.ones((N-3)**2)]
offsets = [0, -1,1, N-2]
A = diags(diagonals, offsets).toarray()
# 处理边界条件
A[0,:] = 0
A[-1,:] = 0
A[:,0] = 0
A[:,-1] = 0
A[0,0] = 1
A[-1,-1] = 1
A[0,1] = 0
A[-1,-2] = 0
# 求解线性方程组
u = np.zeros((N,N))
u[0,:] = u_top
u[-1,:] = u_bottom
u[:,0] = u_left
u[:,-1] = u_right
u[1:-1,1:-1] = spsolve(A, f).reshape(N-2, N-2)
print(u)
```
该代码使用有限差分方法来离散化二维泊松方程,然后使用稀疏矩阵求解线性方程组。最终输出的是一个二维数组,表示在网格上的解。