레이블이 dsolve인 게시물을 표시합니다. 모든 게시물 표시
레이블이 dsolve인 게시물을 표시합니다. 모든 게시물 표시

2015년 5월 8일 금요일

심파이(sympy)를 이용한 미분방정식 풀이

 만약 x, y가 심볼로 등록이 되어 있다면 함수 y(x)의 x에 대한 미분은 sympy에서 다음과 같이 표현할 수 있다.

  • y(x) : 독립 변수 x에 대한 함수 y
  • y(x).diff() 혹은 y(x).diff(x,1) : 1차 미분
  • y(x).diff(x,2) : 2차 미분
  • y(x).diff(x,3) : 3차 미분

이것을 이용하면 상미분식을 표현할 수 있다. 예를 들면 다음과 같다.

[표 1] 미분식의 심파이 표현식 예
수식
심파이 표현식
y(x).diff() - cos(x)
y(x).diff(x,2) + 9*y(x) - exp(-2*x)
y(x).diff()-1-y(x)**2

함수를 표현할 때 y(x)와 같이 독립변수도 반드시 표기해야 함을 유의하자.

 dsolve()함수는 미분방정식을 풀어주는 sympy의 기본 함수이다. 첫 번째 인자로 미분식을, 두 번째 인자로 구할 함수를 적어주면 된다. 예를 들어서 다음과 같은 1차 상미방을 푼다고 가정하자.


이 미분방정식의 우변을 0으로 만들면 다음과 같다.


이제 dsolve 함수의 첫 번째 인자로 위 식의 좌변을 넣어주고 두 번째 인자로 y(x)를 인가하면 된다.


여기서 C1은 상수이다.  다른 미분 방정식을 풀어보자.


이 방정식도 우변을 먼저 0으로 만들어야 한다.


이제 이 식의 좌변을 dsolve()함수의 첫 번째 인자로 넣어준다.


2차 미분방정식도 입력할 수 있다. 예를 들어


을 풀려면 다음과 같이 하면 된다.


만약 함수의 미분표현식을 매번 입력하기 번거롭다면 다음과 같이 새로 정의하여 사용하면 된다.


이렇게 정의해 놓으면 이후부터는 y(x).diff() 대신 dy를, y(x).diff(x,2) 와 같이 긴 표현식 대신 ddy를 사용하면된다.


여기서 C1과 C2는 상수이다. 이것이 dsolve()함수를 이용한 미분방정식을 푸는 가장 기본적인 방법이다.