2017-10-27 12 views
3
내가 초기 값 문제지만 초기 조건 ics를 해결하기 위해 dsolve를 사용하려면

아무런 영향이없는 것으로 나타 영향을주지 않습니다. 이 예에서 dsolve은 동일한 결과를 제공합니다. 두 경우 모두Sympy의 ODE 솔버 초기 조건은

from sympy import * 
x = symbols('x') 
f = Function('f') 

eq = Eq(Derivative(f(x), x), f(x)) 

# No initial condition 
pprint(dsolve(eq, f(x))) 

# With initial condition f(0) = 1 
pprint(dsolve(eq, f(x), ics={f(0):1})) 

나는

  x 
f(x) = C1 ℯ 

C1

ics으로 값 1로 대체되지 않습니다 동일한 솔루션을 얻을. Sympy second order ode에 sympy issue 4720이 언급되어 있지만 이제는 해당 문제가 종결되었습니다. SymPy 1.1.1을 사용하고 있습니다.

답변

3

PR implementing the initial conditions는 SymPy 1.1.1의 일부는 아니지만 1.2이어야한다. 당신은 SymPy의 버전이 (가에서 오류가 발생하는 경우, 당신은 ICS 전원 시리즈를 제외하고 지원이없는)

from sympy.solvers.ode import solve_ics 

을 실행하여이 있는지 여부를 테스트 할 수 있습니다. 당신이 언급 한 후뿐만 아니라, 내 answer 찾아 정수를 대체 할 (다른 상황에서 서로 다른 유형을 반환하는 습관이있다) solve를 사용하는 방법에 대한 간단한 설명이 있습니다. 요청을 당겨

eq = Eq(Derivative(f(x), x), f(x)) 
sol = dsolve(eq, f(x)).rhs 
constants = solve([sol.subs(x,0)-1], dict=True) 
print(sol.subs(constants[0])) 
+2

은 SymPy 1.1 릴리스 이후에 합병되었다. 1.1.1 릴리스는 1.1의 중요한 수정 사항 만 포함하는 작은 버그 수정 릴리스였습니다. 1.1 이후 병합 된 주요 변경 사항은 포함되지 않았습니다. 지점은 다음 주요 버전 (1.2)에 포함되어야합니다. 또는 git 마스터 버전의 SymPy를 사용하여 지금 다운로드 할 수 있습니다 (http://docs.sympy.org/latest/install.html#git 참조). – asmeurer

+1

나에게 가장 혼란스러운 점은 [지점 1.1.1에는 solve_ics가 있습니다.] (https://github.com/sympy/sympy/blob/1.1.1/sympy/solvers/ode.py)입니다. – FTP

+1

그 점을 지적 해 주셔서 감사합니다. 오래 전에 릴리스 지점을 삭제해야합니다. 릴리스를 수행 한 후에 마스터를 병합했기 때문에이 기능을 사용할 수있었습니다 (따라서 마스터로 다시 병합 할 수 있음). 살펴볼 올바른 것은 [sympy-1.1.1 태그] (https://github.com/sympy/sympy/blob/sympy-1.1.1/sympy/solvers/ode.py)입니다. – asmeurer