我在2D空间中有一个泊松方程,像这样:
这是我尝试解决的问题:
import sympy as sp
x, y = sp.symbols('x, y')
f = sp.Function('f')
u = f(x, y)
eq = sp.Eq(u.diff(x, 2) + u.diff(y, 2), u)
print(sp.pdsolve(eq))
出现错误:
psolve: Cannot solve -f(x, y) + Derivative(f(x, y), x, x) + Derivative(f(x, y), y, y)
是否可以将sympy用于此类方程式?如有可能,请帮我举个例子。
答案 0 :(得分:1)
在PDE solver page的底部,您会找到
当前实施的求解器方法
- 具有常数系数的一阶线性齐次偏微分方程。
- 具有常数系数的一阶线性一般偏微分方程。
- 一阶变系数线性偏微分方程。
没有二阶。这并不奇怪,因为这样的PDE不允许使用显式的符号解决方案,只有少数(大多数是无趣的)例外。 (如果方程式实际上是具有零Neumann条件的Eq(u.diff(x, 2) + u.diff(y, 2), u)
,则解也等于零。)不仅SymPy不知道如何找到符号解,还没有找到这样的解。
答案 1 :(得分:0)
我认为您可以使用这个想法,其中 nt 是泊松求解器的迭代次数,而 b 是源项。 dx 和 dy 是 x 和 y 的步长,最终得到边界条件。
for it in range(nt):
pd = pDF.copy()
pDF[1:-1,1:-1] = (((pd[1:-1, 2:] + pd[1:-1, :-2]) * dy**2 +
(pd[2:, 1:-1] + pd[:-2, 1:-1]) * dx**2 -
b[1:-1, 1:-1] * dx**2 * dy**2) /
(2 * (dx**2 + dy**2)))
pDF[0, :] = 0
pDF[nx-1, :] = 0
pDF[:, 0] = 0
pDF[:, ny-1] = 0