코딩 연습

(파이썬) 함수의 극댓값, 극솟값, 최댓값, 최솟값 구하기 본문

Python

(파이썬) 함수의 극댓값, 극솟값, 최댓값, 최솟값 구하기

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




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




미분이 가능한 함수라면 극대 혹은 극소가 되는 점에서 \(f'(x)=0\) 이 된다는 것을 이미 배워서 알고 있다. 또한 이계도함수가 존재한다면 극대가 되는 점에서는 \(f''(x) <0\), 극소가 되는 점에서는 \(f''(x)>0\) 이 되는 것도 알고 있으리라 믿어 의심치 않는다.

위의 내용을 이용하여 함수 \(f(x)=3x^3 +2x^2-5x+1\) 의 구간 \([-1.5, 1.5]\) 에서 극댓값, 극솟값, 최댓값, 최솟값을 구해보자.  

>>> from sympy import *    # ①  
>>> x = Symbol('x')
>>> f = 3 * x**3 + 2 * x**2 - 5 * x + 1    # ② 
>>> derivative1 = Derivative(f, x).doit()    # ③
>>> critical = solve(derivative1)    # ④
>>> critical.sort()    # ⑤
>>> critical    # ⑥
[-1, 5/9]
>>> derivative2 = Derivative(f, x, 2).doit()    # ⑦
>>> derivative2.subs({x:critical[0]})    # ⑧
-14
>>> derivative2.subs({x:critical[1]})    # ⑨
14
>>> f.subs({x:-1})    # ⑩
5
>>> f.subs({x:5/9})    # ⑪
-0.646090534979424
>>> f.subs({x:-1.5})    # ⑫
2.87500000000000
>>> f.subs({x:1.5})    # ⑬
8.12500000000000

sympy 패키지의 모든 것(*)을 가져온다.

함수 f(x)를 정의한다.
도함수 f'(x) 를 derivative1 이라 하자.
f'(x)=0 의 근을 critical 에 저장
critical을 오름차순으로 정렬
critical 은 f'(x)=0 의 해를 리스트의 형태로 갖고 있음
이계도함수 f''(x) 를 derivative2 라 하자.
f'(x)=0 의 근 중 작은 것을 f''(x) 에 대입했더니 음수, 즉 이 점에서 극대
f'(x)=0 의 근 중 큰 것을 f''(x) 에 대입했더니 양수, 즉 이 점에서 극소
극댓값 계산
극솟값 계산
구간의 왼쪽 끝점에서의 함숫값
구간의 오른쪽 끝점에서의 함숫값


위의 코드를 하나씩 잘 살펴 본다면 다른 설명이 필요 없으리라 생각된다. 

마지막에서 극대, 극소와 구간의 양 끝점에서의 함숫값을 비교하여 가장 큰 놈 f(1.5) 가 최댓값이 되고, 가장 작은 놈 f(5/9) 가 최솟값이 된다. 이 정도만 알고 있다면 극대, 극소, 최대 , 최소를 구하는 코딩이 충분히 가능할 것이라 판단된다.





참고

함수 f 가 \(f(x)=x^3 +2x^2 -3x+1\) 과 같이 주어지게 되면 다음과 같은 문제가 생긴다.

>>> f = x**3 + 2 * x**2 - 3 * x + 1
>>> derivative1 = Derivative(f, x).doit()
>>> critical=solve(derivative1, x)
>>> critical
[-2/3 + sqrt(13)/3, -sqrt(13)/3 - 2/3]
>>> f.subs({x:critical[0]})
-sqrt(13) + (-2/3 + sqrt(13)/3)**3 + 2*(-2/3 + sqrt(13)/3)**2 + 3

즉, \(f'(x)=0\) 의 근이 무리수가 되어, 이 근을 함수 \(f\) 에 대입하여도 그 계산된 결과를 볼 수 없게 된다. 여전히 무리수가 등장하는 값을 결과로 보여준다. 이때, 계산된 결과(근삿값)을 보고 싶다면 다음과 같이 evalf() 매서드를 사용하면 된다.

>>> f.subs({x:critical[0]}).evalf()
0.120580253256899

반응형

'Python' 카테고리의 다른 글

(파이썬) 순열 -모든 경우 나열하기  (0) 2017.03.21
(파이썬) 부정적분과 정적분  (0) 2016.03.15
(파이썬) 미분계수 구하기  (4) 2016.03.15
(파이썬) 극한값 구하기  (0) 2016.03.15
(파이썬) 집합  (0) 2016.03.15


Comments