在Python中使用sympy可以解决一个PDE系统吗?

假设有耦合PDE的一个系统,诸如在Python中使用sympy可以解决一个PDE系统吗?

第一PDE在F(A,B)

第二PDE在F(A,B)

以下代码能够分别解决每个PDE:

import numpy as np 

import sympy as sp

# definition of variables

a, b = sp.symbols('a b')

f = sp.Function('f')

F = f(a, b)

Fda = F.diff(a)

Fdb = F.diff(b)

# definition of PDEs

eq1 = Fda - 2

eq2 = Fda + Fdb + 2

# solution of separated PDEs

sp.pprint(sp.pdsolve(eq1))

sp.pprint(sp.pdsolve(eq2))

是否有可能解决PDEs系统?语法可能类似于sp.pprint(sp.pdsolve([eq1, eq2]))。我试过[eq1, eq2]{eq1, eq2},np.array([eq1, eq2])等我看看help(sp.pdsolve)help(sp.pde),但还没有找到解决办法。

回答:

不,不执行偏微分方程组的解。究竟是执行:

  1. 解决常系数一阶线性PDE:溶液的一般形式是已知的并且在解算器是硬编码;解算器返回给定系数。

  2. 通过将变换系数转换为ODE(称为特征方法)来求解一阶线性PDE。只有一个PDE。

除了:我很怀疑在一般PDE的象征性的解决方案,以及系统更是如此。这不是一个在精心编写的教科书范例之外发生的事情。无论是教科书配方(对于教科书问题)还是隐藏的结构都要被人类的独创性(罕见)所揭示,或者没有找到象征性的解决方案。

回答:

由于您的系统是可分离的,因此可以使用dsolve来解决。但是,dsolve目前不喜欢像f(a, b)这样的东西,因此您需要手动解决切片。您还需要与功能手动替换常量:

>>> fa, fb = symbols('fa fb', cls=Function) 

>>> eq1 = fb(a).diff(a) - 2

>>> eq2 = fb(a).diff(a) - fa(b).diff(b) + 2

>>> dsolve(eq1, fb(a))

Eq(fb(a), C1 + 2*a)

>>> fbsol = dsolve(eq1, fb(a)).subs(Symbol("C1"), Function("Ca")(b))

>>> fbsol

Eq(fb(a), 2*a + Ca(b))

>>> eq2.subs(*fbsol.args).doit()

Derivative(fa(b), b) + 4

>>> fasol = dsolve(eq2.subs(*fbsol.args).doit(), fa(b)).subs(Symbol("C1"), Function("Cb")(a))

>>> fasol

Eq(fa(b), -4*b + Cb(a))

>>> fbsol

Eq(fb(a), 2*a + Ca(b))

从这里应该明确的是Cb(a) = 2*a + CCa(b) = -4*b + C,给予解决方案f(a, b) = 2*a - 4*b + C,您可以检查满足原。

这绝对是pdsolve应该能够自动完成的事情,但是目前还没有实现。

以上是 在Python中使用sympy可以解决一个PDE系统吗? 的全部内容, 来源链接: utcz.com/qa/266217.html

回到顶部