코딩 연습

(파이썬) 부정적분과 정적분 본문

Python

(파이썬) 부정적분과 정적분

코딩아저씨 2016. 3. 15. 18:39
반응형




(파이썬 & 수학) 미분계수 구하기 를 먼저 보고 오세요.




파이썬에서 부정적분과 정적분을 하는 방법은 간단한다. 

다음과 같이 sympy 패키지에서 Integral 클래스를 이용하여 부정적분 \(\displaystyle \int x^2 +x+1 \; dx\) 를 구해보자. 

>>> from sympy import Integral, Symbol
>>> x = Symbol('x')
>>> f = x**2 + x + 1
>>> Integral(f, x).doit()
x**3/3 + x**2/2 + x

이쁘게 보고 싶다면 pprint 를 사용한다.

>>> from sympy import pprint
>>> pprint(Integral(f, x).doit())
 3    2
x    x
── + ── + x
3    2

늘 그렇듯이 하나도 안 이쁘다. 

여하튼 도함수를 얻는 것과 부정적분을 얻는 방법은 Integral을 사용하는 것만 제외하면 동일하다.


정적분의 방법도 마찬가지다. 다음과 같이 정적분의 아랫끝과 윗끝만 지정해 주면 정적분 \( \displaystyle \int _0^5 x^2+x+1 \; dx\) 의 값을 쉽게 얻을 수 있다. 

>>> Integral(f, (x, 0, 5)).doit()
355/6


조심해야 할 것은 \((x, \;0, \;5)\) 처럼 괄호 안에 (적분변수, 아랫끝, 윗끝) 을 적어줘야 한다. 어때 쉽지?


이제 우리는 지긋지긋한 표준정규분포표로부터 벗어날 수 있게 되었다. 정규분포의 확률밀도함수가 \[f(x) = \dfrac{1}{\sigma \sqrt{2 \pi}} e ^{-\frac{(x-\mu)^2}{2\sigma ^2}}\] 이므로 파이썬의 정적분을 이용하여 확률값을 쉽게 구해낼 수 있는 것이다. 

확률변수 \(X\)가 정규분포 \({\rm N} \left (5,\; 2^2 \right )\) 를 따를 때, 확률 \({\rm P}(3 \le X \le 7)\) 의 값을 구해보자.

>>> from sympy import exp, sqrt, pi, Integral
>>> f = exp(-(x-5)**2/(2*2**2))/(2*sqrt(2*pi))
>>> Integral(f, (x, 3, 7)).doit().evalf()
0.682689492137086

시간이 좀 걸리긴 하지만 정확하게 확률값을 구해내는 것을 볼 수 있다. 

(평균으로부터 원시그마 아래에서 원시그마 위 까지의 확률이 약 0.68 이라는 것을 이미 알고 있지 않은가?)


파이썬을 통하여 참 여러 가지 계산을 할 수 있다는 것이 어쩌면 당연하면서도 한 편으로는 신기하기까지 하다.


반응형


Comments