코딩 연습

(파이썬) 미분계수 구하기 본문

Python

(파이썬) 미분계수 구하기

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



(파이썬) 극한값 구하기 를 먼저 보고 오세요



함수 \(f(x)\) 의 \(x=a\) 에서의 순간변화율(=미분계수) \(f'(a)\) 를 구해보자.

정의에 의하면 \[\begin{split} f'(a) &= \lim \limits_{x \to a} \dfrac{f(x)-f(a)}{x-a} \\ &= \lim \limits_{h \to 0} \dfrac{f(a+h)-f(a)}{h} \end{split}\] 와 같다.  우리는 두 번째 극한값을 이용하여 \(f'(a)\) 를 구할 것이다. 먼저 함수 \(f(x)\) 를 이차 다항함수로 정의해 보자. \[f(x)=3x^2-4x+1\] 이제 다음과 같은 과정이 필요하다.

>>> from sympy import symbols, Limit
>>> x, a, h = symbols('x, a, h')
>>> fx = 3 * x ** 2 - 4 * x + 1    # 함수 f(x) 를 정의
>>> fxa = fx.subs({x: a})    # 함수 f(x) 에 x=a 를 대입
>>> fxh = fx.subs({x: a + h})    # 함수 f(x) 에 x=a+h 를 대입
>>> Limit((fxh-fxa)/h, h, 0).doit()    # 정의를 이용하여 극한값(=미분계수) 계산
6*a - 4

결과가 깔끔하게 \(6a-4\) 가 되는 것을 볼 수 있다. 오~~~~~

그렇다면 도함수를 구하는 방법은 없을까? 당연히 있다.

>>> from sympy import Derivative
>>> Derivative(fx, x).doit()
6*x - 4

Derivative 클래스를 이용하여 쉽게 도함수 \(f'(x)\) 를 구해낼 수 있다. 그렇다면 이 도함수를 이용하여 미분계수를 구하는 것도 가능할까? 당연히 가능하다. 

>>> d = Derivative(fx, x)
>>> d.doit().subs({x:2})
8

먼저 d 라는 Derivative 클래스의 객체를 생성한 후, subs() 매서드를 이용하여 \(x=2\) 에서의 미분계수 \(f'(2)\) 를 구해낼 수 있다.

다항함수 이외의 함수들의 도함수도 구해낼 수 있다.

>>> Derivative(1/x, x).doit()
-1/x**2
>>> Derivative(sin(x), x).doit()
cos(x)
>>> Derivative(a ** x, x).doit()
a**x*log(a)
>>> Derivative(log(x), x).doit()
1/x

보는 바와 같이 분수함수, 삼각함수, 지수함수, 로그함수의 도함수도 척척 구해낸다.

(물론 sin(x) 를 사용하기 위해서는 sympy 에서 sin 클래스를 가져와야 한다.)


충분히 예상 가능 했겠지만, 이계도함수를 구하는 것도 가능하다. 이계도함수를 구하기 위해서는 다음과 같이 Derivative의 마지막 인수로 이계도함수임을 알려주는 2를 전달해야 한다. 

>>> Derivative(1/x, x, 2).doit()
2/x**3
>>> Derivative(sin(x), x, 2).doit()
-sin(x)

이제 MS mathematics 따위(이런 표현을 할 자격이 있는지는 모르겠지만)는 필요 없겠는걸?


반응형


Comments