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()함수를 이용한 미분방정식을 푸는 가장 기본적인 방법이다.

댓글 없음:

댓글 쓰기