코딩 연습

(파이썬) 극한값 구하기 본문

Python

(파이썬) 극한값 구하기

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

극한값을 구하는 방법에 대해 알아보자. 

극한값을 구하기 위해서는 먼저 sympy 에서 Limit 클래스와 S 클래스를 가져와야 한다. Limit 클래스는 뭘할지 금방 예상이 되지만, S 클래스는 뭘하는 클래스일까? 설명에 의하면 무한(infinity) 에 대한 정의를 포함하고 있는 클래스라고 한다. 뭔 말인지는 잘 모르겠으면 일단 예제를 보는게 정답이다.


일단 함수의 극한을 배울 때 항상 등장하는 예제 \(\lim \limits_{x \to \infty} \dfrac{1}{x}\) 를 구해보도록 하자.

>>> from sympy import Limit, S, Symbol
>>> x=Symbol('x')
>>> Limit(1/x, x, S.Infinity)
Limit(1/x, x, oo, dir='-')
>>> Limit(1/x, x, S.Infinity).doit()
0

위에서 보는 바와 같이 극한값을 구할 때는 Limit 를 사용하되 기본적으로 3 개의 인수를 전달한다. 첫 번째는 극한을 구하기 위한 함수 \(\dfrac{1}{x}\), 두 번째는 변수 \(x\), 세 번째는 변수 \(x\) 가 다가가는 값이다. 이때, 앞에서 언급했던 S 클래스가 사용된다. \(x \to \infty\) 를 S.Infinity 로 나타내고 있는 것을 확인할 수 있다. 그렇지만 그 결과는 우리가 원하던 것과 차이가 있는 것을 알 수 있다. 이때는  doit() 매서드를 사용해야 한다. 위에서 보는 바와 같이 Limit(~).doit() 처럼 사용해야만 우리가 원하는 결과를 얻을 수 있다.  (sympy 다큐먼트를 찾아보면 다음과 같은 설명이 나온다. Evaluate objects that are not evaluated by default like limits, integrals, sums and products. 쉽게 말하면 극한, 미분, 적분 등등에서 니네가 원하는 결과를 얻고 싶을 때, doit() 을 사용해라!!  그냥 이 정도로 일단 알고 지나가면 될듯하다.)


그렇다면 \(\lim \limits_{x \to 0} \dfrac{1}{x}\) 를 구하고 싶다면 어떻게 해야할까? 이 경우는 우극한값과 좌극한값이 다르기 때문에 우극한인지 좌극한인지를 명시해 줘야 한다. Limit 의 경우 별다른 언급이 없다면 우극한을 가정한다. 그래서 다음과 같은 결과를 얻을 수 있다.

>>> Limit(1/x, x, 0).doit()
oo

좌극한의 경우는 다음과 같이 dir='-'를 사용해야 한다.

>>> Limit(1/x, x, 0, dir='-').doit()
-oo

이쯤에서 예상할 수 있겠지만 왠만한 다항함수, 분수함수의 극한은 Limit로 해결할 수 있다. 그렇다면 고등학교 이과 수학시간에 등장하는 초월함수의 극한도 가능할까? \[\lim \limits_{x \to 0} \dfrac{{\rm sin} x}{x},\;\; \lim \limits_{x \to 0} \dfrac{a^x -1}{x},\;\; \lim \limits_{x \to 0} (1+x)^{\frac{1}{x}}\] 을 Limit 를 이용하여 값을 구해보자.

>>> from sympy import sin
>>> Limit(sin(x)/x, x, 0).doit()
1
>>> Limit((a**x-1)/x, x, 0).doit()
log(a)
>>> Limit((1+x)**(1/x), x, 0).doit()
E

먼저 sympy 에서 sin 을 가져오고, 각각에 대해서 극한값을 구해보면 정확한 값을 결과 보여준다. 오~~~ 괜찮은데?

다만 학교 수학시간에 자연로그의 경우 ln 으로 배우지만 파이썬에서는 log 가 자연로그이다. 상용로그 값을 얻기 위해서는 밑변환 공식에 따라 log(x)/log(10) 형태로 계산해야 한다. 또한 수학시간에 배우는 자연상수는 e 이지만, 파이썬에서는 E로 표현된다. 이 정도 차이만 알고 있으면 극한값을 구하는데 무리가 없을듯 하다.  


반응형


Comments