내용
지수와 로그 함수의 미분
지수와 로그가 포함된 함수들을 미분합니다. 다음은 로그 함수입니다.
위 함수 y의 역함수는 지수함수가 됩니다. 지수 급수의 미분은 원래 형태와 같으므로 식 1과 같이 나타낼 수 있습니다.
결과적으로 로그함수의 미분은 식 2와 같이 나타낼 수 있습니다.
import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt
예 1)
a, x=symbols('a, x') y=log(x+a) diff(y, x)
예 2)
이 함수는 대수로그입니다. 대수로그를 자연로그로 변환하기 위해 다음 식 1에서 나타낸 로그 규칙을 적용합니다.
a, x=symbols('a, x') y=log(x, 10) dy=diff(y, x) dy
N(dy, 5)
지수함수와 유사한 형태이지만 e 대신 다른 수에 대한 x 거듭제곱 형태의 미분에 대해 알아봅니다. 즉, y=ax (a: 상수)형태의 함수로서 위에서 소개한 로그 규칙(식 9)을 적용하여 자연로그로 전환하여 미분 계산을 할 수 있습니다.
a, x=symbols('a, x') y=a**x dy=diff(y, x) dy
예 3)
다음 함수들의
(1)
a, x=symbols('a, x') y=exp(-a*x) dy=diff(y, x) dy
(2)
a, x=symbols('a, x') y=exp(2*x/(x+1)) dy=diff(y, x) dy
(3)
위의 함수 중
a, x, u=symbols('a, x, u') y=exp(u) u1=sqrt(x**2+a) dydu=diff(y, u) dydu
dudx=diff(u1, x) dudx
dydx=(dydu)*(dudx) dydx
dydx.subs(u, u1)
위 함수를 diff()
에 직접 적용할 수 있습니다.
yo=exp(sqrt(x**2+a)) yo.diff(x)
(4)
a, x, u=symbols('a, x, u') y=log(u) u1=a+x**3 dydu=diff(y, u) dydu
dudx=diff(u1, x) dudx
dydx=(dydu)*(dudx) dydx
dydx.subs(u, u1)
yo=log(a+x**3) yo.diff(x)
(5)
위 함수의 미분은
a, x, u=symbols('a, x, u') yo=log(3*x**2+sqrt((a+x**2))) yo.diff("x")
y=log(u) dydu=y.diff(u) dydu
u1=3*x**2+sqrt((a+x**2)) dudx=u1.diff(x) dudx
dydx=dydu*dudx dydx
dydx.subs(u, u1)
(5)
위 함수의 미분은 양변에 로그화하여 미분을 실시합니다. 이 함수는 종속 변수 y와 독립 변수 x에 대한 모든 미분을 고려해야 합니다. 즉, 다음과 같은 음함수를 고려해야 합니다.
음함수 형태의 미분은 sympy 함수 idiff()
를 적용합니다. 물론 원함수를 diff()
에 적용해도 동일한 결과를 나타냅니다.
a, x, y=symbols('a, x, y') yo=(x+3)**2*sqrt(x-2) dyo=yo.diff(x) simplify(dyo)
#양변을 로그화하여 미분을 실시 eq=log(y)-log((x+3)**2*sqrt(x-2)) deq=idiff(eq, y, x) deq
simplify(deq.subs(y, yo))
(6)
함수 y는 분수 형태로 로그화하여 계산할 수 있습니다. 또한 미분의 나눗셈 법칙을 적용할 수 있습니다.
a, x, y=symbols('a, x, y') yo=sqrt(x**2+a)/(x**3-a)**(Rational('1/3')) yo
dyo=yo.diff(x) #원함수의 미분 simplify(dyo)
eq=log(y)-log(sqrt(x**2+a))+log((x**3-a)**(Rational('1/3'))) eq #원 함수를 로그화
deq=idiff(eq, y, x) deq
deq=deq.subs(y, yo) simplify(deq)
위 결과에 의하면 원래의 함수와 로그화로 변환된 함수의 미분의 형태는 같지 않습니다. 그러나 정의적으로 두 결과는 같아야 합니다. 이를 확인하기 위해 일정한 값을 대응 시켜봅니다.
dyo.subs({a:1, x:3})==deq.subs({a:1, x:3})
True
나눗셈 규칙을 적용합니다.
ynu=numer(yo) ynu
yde=denom(yo) yde
dy=(ynu.diff(x)*(yde)-(ynu*yde.diff(x)))/yde**2 simplify(dy)
(7)
a, x, y=symbols('a, x, y') yo=(1/a**x)**(a*x) yo
dyo=yo.diff(x) #원함수의 미분 dyo
eq=log(y)-log((1/a**x)**(a*x)) eq
deq=idiff(eq, y, x) deq
deq=deq.subs(y, yo) deq
로그 곡선(Logarithmic Curve)
방정식
b, p, x=symbols('b, p, x') y=b*p**x re={} for i in range(6): re[i]=y.subs(x, i) re
{0: b, 1: b*p, 2: b*p**2, 3: b*p**3, 4: b*p**4, 5: b*p**5}
위 결과를 표의 형태로 나타내면 다음과 같습니다.
x | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
y | b | bp | | | |
그림 1은 b=2, p=1.5로 치환한 상태에서 위 코드의 지수함수와 그 함수를 로그화한 경우를 작성한 것입니다. 지수함수의 경우 y 값은 x에 따라 p배 만큼의 변화를 보입니다. 이와 같이 두 개의 연속하는 좌표들이 일정한 비율로 연결된 경우 그 식을 로그화하면 일정한 변화를 보입니다.
plt.figure(dpi=100) x=np.linspace(0, 6, 100) y=2*1.5**x y1=np.log(2)+x*log(1.2) plt.plot(x, y, label=r"$\mathbf{y=2 \cdot 1.5^x}$") plt.plot(x, y1, label=r"$\mathbf{\log(y)=\log(2)+ x\log(1.5)}$") plt.xlabel("x", size=12, weight="bold") plt.ylabel("y, log(y)", size=12, weight="bold") plt.legend(loc="best") plt.grid(True) plt.show()
결과적으로 지수함수를 로그함수로 전환하면 y축 역시 log(y)로 전환하여 기울기가 상수인 직선의 방정식으로 나타낼 수 있습니다.
댓글
댓글 쓰기