2017-12-27 3 views
2

당신이 결합하는 PDE의 시스템을 가지고 있다고 가정 등Python에서 sympy를 사용하여 PDE 시스템을 해결할 수 있습니까?

F에서

1 PDE (A, B)

F에서

2 PDE (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)) 

PDE 시스템을 해결할 수 있습니까? 구문은 sp.pprint(sp.pdsolve([eq1, eq2]))과 같습니다. [eq1, eq2], {eq1, eq2}, np.array([eq1, eq2]) 등을 시도했습니다. help(sp.pdsolve)help(sp.pde)을 살펴 보았지만 아직 해결 방법을 찾지 못했습니다.

답변

2

아니요, 편미분 방정식의 시스템 솔루션은 구현되지 않습니다. 어떻게 실제로 구현된다

  1. 상수 계수와 1 차 선형 PDE 해결 : 용액의 일반적인 형태가 공지되며, 해석에 하드 코딩되고; 해석기는 주어진 계수가 연결된 상태에서 그것을 반환합니다. 변수 계수가있는 1 차 선형 PDE를 ODE (특성 방법이라고도 함)로 변환하여 해결합니다. 단 하나의 PDE.

는 제외 : 나는 및 시스템 특히, 일반적으로 PDE의 상징적 인 해결책의 회의적이다. 주의 깊게 구성된 교과서의 예문 밖에서 일어나는 일이 아닙니다. 교과서 레시피가 적용되거나 (교과서 문제) 또는 인간의 독창성 (드문 경우)으로 숨겨진 구조가 있거나 발견 할 상징적 인 해결책이 없습니다.

1

시스템은 분리 가능하므로 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)) 

는 당신이 만족에게 원본을 확인할 수있는 솔루션 f(a, b) = 2*a - 4*b + C을주는 분명 그 Cb(a) = 2*a + CCa(b) = -4*b + C이어야한다.

이것은 분명히 pdsolve이 자동으로 수행 할 수 있어야하지만 아직 많이 구현되지는 않습니다.

관련 문제