기본 콘텐츠로 건너뛰기

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

지수와 로그 함수의 미분

내용

지수와 로그 함수의 미분

지수와 로그가 포함된 함수들을 미분합니다. 다음은 로그 함수입니다.

$$\begin{equation} y = \log_ex \; \text{또는} \; \log(x) \end{equation}$$

위 함수 y의 역함수는 지수함수가 됩니다. 지수 급수의 미분은 원래 형태와 같으므로 식 1과 같이 나타낼 수 있습니다.

$$\begin{align}\tag{1} y &=\log_ex \rightarrow e^y=x\\ e^y &=\frac{dx}{dy}\\ \frac{dy}{dx}&=\frac{1}{\frac{dx}{dy}}\\ &=\frac{1}{e^y}\\ &=\frac{1}{x} \end{align}$$

결과적으로 로그함수의 미분은 식 2와 같이 나타낼 수 있습니다.

$$\begin{equation}\tag{2} \frac{d(\log_e x)}{dx}=\frac{dy}{dx}=x^{-1} \end{equation}$$
import numpy as np
import pandas as pd
from sympy import *
import matplotlib.pyplot as plt

예 1)  $\displaystyle y=\log(x+a)$를 미분합니다.

$$\begin{align} x+a&=e^y\\ \frac{d(x+a)}{dy}&=e^y \rightarrow \frac{dx}{dy}=e^y\\ \frac{dy}{dx}&=\frac{1}{e^y}\\ &=\frac{1}{x+a} \end{align}$$
a, x=symbols('a, x')
y=log(x+a)
diff(y, x)
$\quad \small \color{blue}{\frac{1}{a + x}}$

예 2)  $y = \log_{10}x$를 미분합니다.

이 함수는 대수로그입니다. 대수로그를 자연로그로 변환하기 위해 다음 식 1에서 나타낸 로그 규칙을 적용합니다.

$$\begin{equation}\tag{3} \log_ab=\frac{\log_eb}{\log_ea} \end{equation}$$ $$\begin{align} y&=\log_{10}x\\ &=\frac{\log_ex}{\log_e10}\\ &=\frac{1}{\log_e10}\log_ex\\ \frac{dy}{dx}&=\frac{1}{\log_e10}\frac{1}{x} \end{align}$$
a, x=symbols('a, x')
y=log(x, 10)
dy=diff(y, x)
dy
$\quad \small \color{blue}{\frac{1}{x \log{\left(10 \right)}}}$
N(dy, 5)
$\quad \small \color{blue}{\frac{0.43429}{x}}$

지수함수와 유사한 형태이지만 e 대신 다른 수에 대한 x 거듭제곱 형태의 미분에 대해 알아봅니다. 즉, y=ax (a: 상수)형태의 함수로서 위에서 소개한 로그 규칙(식 9)을 적용하여 자연로그로 전환하여 미분 계산을 할 수 있습니다.

$$\begin{align} y&=a^x\\ \log_ey&=x \cdot \log_ea\\ x&=\frac{log_ey}{x \cdot \log_e10}\\ \frac{dx}{dy}&=\frac{1}{\log_ea}\frac{1}{y}\\ &=\frac{1}{\log_ea \cdot a^x}\\ \frac{dy}{dx}&=\log_ea \cdot a^x \end{align}$$
a, x=symbols('a, x')
y=a**x
dy=diff(y, x)
dy
$\quad \small \color{blue}{a^{x} \log{\left(a \right)}}$

예 3)  다음 함수들의 $\displaystyle \frac{dy}{dx}$를 계산하여 봅니다.

(1) $y = e^{-ax}$는 두 가지 방법을 적용할 수 있습니다. $$\begin{align} \text{방법 1}&\\ & \begin{aligned} -ax = z & \rightarrow y = e^z\\ \frac{dy}{dz} = e^z & , \frac{dy}{dx} = -a\\ \therefore& \frac{dy}{dx} = -a·e^{-ax} \end{aligned}\\ \text{방법 2}&\\ &\begin{aligned} \log_ey &= -ax \\ d(\log_ey)dy & = d(-ax)dx\\ \frac{dy}{y} & = -a·dx \\ \frac{dy}{dx} & = -ay \\ & = -a \cdot e^{-ax} \end{aligned} \end{align}$$

a, x=symbols('a, x')
y=exp(-a*x)
dy=diff(y, x)
dy
$\quad \small \color{blue}{- a e^{- a x}}$

(2)$\displaystyle y = e^{\frac{2x}{x+1}}$의 미분

$$\begin{align} \log_ey& =\frac{2x}{x+1}\\ d(\log_ey)dy& =d\left(\frac{2x}{x+1}\right)dx \end{align}$$
a, x=symbols('a, x')
y=exp(2*x/(x+1))
dy=diff(y, x)
dy
$\quad \small \color{blue}{\left(- \frac{2 x}{\left(x + 1\right)^{2}} + \frac{2}{x + 1}\right) e^{\frac{2 x}{x + 1}}}$

(3)$\displaystyle y = e^{\sqrt{x^2+a}}$

위의 함수 중 $\displaystyle \sqrt{x^2+a}$의 미분은 연쇄법칙을 적용합니다.

$$\begin{align} y &= \exp(\sqrt{x^2+a})\\ \log_ey &=\sqrt{x^2+a}\\ d(\log_ey)dy &= d(\sqrt{x^2+a})dx\\ \frac{1}{y}dy&= \frac{2x}{2 \sqrt{x^2+a}}dx\\ \frac{dy}{dx} &= \frac{y}{\sqrt{x(x^2+a)}}\\ &= \frac{x⋅\exp(\sqrt{x^2+a})}{\sqrt{x^2+a}} \end{align}$$
a, x, u=symbols('a, x, u') 
y=exp(u) 
u1=sqrt(x**2+a) 
dydu=diff(y, u) 
dydu
$\quad \small \color{blue}{ e^{u}}$
dudx=diff(u1, x) 
dudx
$\quad \small \color{blue}{\frac{x}{\sqrt{a + x^{2}}}}$
dydx=(dydu)*(dudx) 
dydx
$\quad \small \color{blue}{\frac{x e^{u}}{\sqrt{a + x^{2}}}}$
dydx.subs(u, u1)
$\quad \small \color{blue}{\frac{x e^{\sqrt{a + x^{2}}}}{\sqrt{a + x^{2}}}}$

위 함수를 diff()에 직접 적용할 수 있습니다.

yo=exp(sqrt(x**2+a))
yo.diff(x)
$\quad \small \color{blue}{\frac{x e^{\sqrt{a + x^{2}}}}{\sqrt{a + x^{2}}}}$

(4)$\displaystyle y = \log(a + x^3)$의 미분은 $\displaystyle a + x^3 = u$로 치환하여 실행합니다.

a, x, u=symbols('a, x, u') 
y=log(u) 
u1=a+x**3 
dydu=diff(y, u) 
dydu
$\quad \small \color{blue}{\frac{1}{u}}$
dudx=diff(u1, x) 
dudx
$\quad \small \color{blue}{3x^2}$
dydx=(dydu)*(dudx) 
dydx
$\quad \small \color{blue}{\frac{3x^2}{u}}$
dydx.subs(u, u1)
$\quad \small \color{blue}{\frac{3x^2}{a+x^3}}$
yo=log(a+x**3) 
yo.diff(x)
$\quad \small \color{blue}{\frac{3x^2}{a+x^3}}$

(5)$\displaystyle y = \log(3x^2 +\sqrt{a + x^2})$

위 함수의 미분은 $\displaystyle 3x^2 + \sqrt{a + x^2} = u$로 치환하여 실행합니다.

a, x, u=symbols('a, x, u') 
yo=log(3*x**2+sqrt((a+x**2)))
yo.diff("x")
$\quad \small \color{blue}{\frac{6 x + \frac{x}{\sqrt{a + x^{2}}}}{3 x^{2} + \sqrt{a + x^{2}}}}$
y=log(u)
dydu=y.diff(u)
dydu
$\quad \small \color{blue}{\frac{1}{u}}$
u1=3*x**2+sqrt((a+x**2))
dudx=u1.diff(x)
dudx
$\quad \small \color{blue}{6 x + \frac{x}{\sqrt{a + x^{2}}}}$
dydx=dydu*dudx
dydx
$\quad \small \color{blue}{\frac{6 x + \frac{x}{\sqrt{a + x^{2}}}}{u}}$
dydx.subs(u, u1)
$\quad \small \color{blue}{\frac{6 x + \frac{x}{\sqrt{a + x^{2}}}}{3 x^{2} + \sqrt{a + x^{2}}}}$

(5) $\displaystyle y = (x + 3)^2\sqrt{x - 2}$

위 함수의 미분은 양변에 로그화하여 미분을 실시합니다. 이 함수는 종속 변수 y와 독립 변수 x에 대한 모든 미분을 고려해야 합니다. 즉, 다음과 같은 음함수를 고려해야 합니다.

$$\begin{align} \log(y)&=\log((x+3)^2 \sqrt{x-2})\\ \rightarrow &d(\log(y))dy=d(\log((x+3)^2 \sqrt{x-2}))dx \end{align}$$

음함수 형태의 미분은 sympy 함수 idiff()를 적용합니다. 물론 원함수를 diff()에 적용해도 동일한 결과를 나타냅니다.

a, x, y=symbols('a, x, y')
yo=(x+3)**2*sqrt(x-2)
dyo=yo.diff(x)
simplify(dyo)
$\quad \small \color{blue}{\frac{5 \left(x - 1\right) \left(x + 3\right)}{2 \sqrt{x - 2}}}$
#양변을 로그화하여 미분을 실시 
eq=log(y)-log((x+3)**2*sqrt(x-2))
deq=idiff(eq, y, x)
deq
$\quad \small \color{blue}{\frac{5 y \left(x - 1\right)}{2 \left(x^{2} + x - 6\right)}}$
simplify(deq.subs(y, yo))
$\quad \small \color{blue}{\frac{5 \left(x^{2} + 2 x - 3\right)}{2 \sqrt{x - 2}}}$

(6) $\displaystyle y=\frac{\sqrt{a+x^2}}{\sqrt[3]{x^3-a}}$

함수 y는 분수 형태로 로그화하여 계산할 수 있습니다. 또한 미분의 나눗셈 법칙을 적용할 수 있습니다.

a, x, y=symbols('a, x, y')
yo=sqrt(x**2+a)/(x**3-a)**(Rational('1/3'))
yo
$\quad \small \color{blue}{\frac{\sqrt{a + x^{2}}}{\sqrt[3]{- a + x^{3}}}}$
dyo=yo.diff(x) #원함수의 미분
simplify(dyo)
$\quad \small \color{blue}{- \frac{a x \left(x + 1\right)}{\left(- a + x^{3}\right)^{\frac{4}{3}} \sqrt{a + x^{2}}}}$
eq=log(y)-log(sqrt(x**2+a))+log((x**3-a)**(Rational('1/3')))
eq #원 함수를 로그화
$\quad \small \color{blue}{ \log{\left(y \right)} + \log{\left(\sqrt[3]{- a + x^{3}} \right)} - \log{\left(\sqrt{a + x^{2}} \right)}}$
deq=idiff(eq, y, x)
deq
$\quad \small \color{blue}{\frac{a x y \left(x + 1\right)}{a^{2} - a x^{3} + a x^{2} - x^{5}}}$
deq=deq.subs(y, yo)
simplify(deq)
$\quad \small \color{blue}{\frac{a x \sqrt{a + x^{2}} \left(x + 1\right)}{\sqrt[3]{- a + x^{3}} \left(a^{2} - a x^{3} + a x^{2} - x^{5}\right)}}$

위 결과에 의하면 원래의 함수와 로그화로 변환된 함수의 미분의 형태는 같지 않습니다. 그러나 정의적으로 두 결과는 같아야 합니다. 이를 확인하기 위해 일정한 값을 대응 시켜봅니다.

dyo.subs({a:1, x:3})==deq.subs({a:1, x:3})
True

나눗셈 규칙을 적용합니다.

ynu=numer(yo)
ynu
$\quad \small \color{blue}{\sqrt{a + x^{2}}}$
yde=denom(yo)
yde
$\quad \small \color{blue}{\sqrt[3]{- a + x^{3}}}$
dy=(ynu.diff(x)*(yde)-(ynu*yde.diff(x)))/yde**2
simplify(dy)
$\quad \small \color{blue}{- \frac{a x \left(x + 1\right)}{\left(- a + x^{3}\right)^{\frac{4}{3}} \sqrt{a + x^{2}}}}$

(7) $\displaystyle y=\left( \frac{1}{a^x} \right)^{ax}$

a, x, y=symbols('a, x, y')
yo=(1/a**x)**(a*x)
yo
$\quad \small \color{blue}{(a^{-x})^{ax}}$
dyo=yo.diff(x) #원함수의 미분
dyo
$\quad \small \color{blue}{\left(- a x \log{\left(a \right)} + a \log{\left(a^{- x} \right)}\right) \left(a^{- x}\right)^{a x}}$
eq=log(y)-log((1/a**x)**(a*x))
eq
$\quad \small \color{blue}{\log{\left(y \right)} - \log{\left(\left(a^{- x}\right)^{a x} \right)}}$
deq=idiff(eq, y, x)
deq
$\quad \small \color{blue}{a y \left(- x \log{\left(a \right)} + \log{\left(a^{- x} \right)}\right)}$
deq=deq.subs(y, yo)
deq
$\quad \small \color{blue}{a \left(- x \log{\left(a \right)} + \log{\left(a^{- x} \right)}\right) \left(a^{- x}\right)^{a x}}$

로그 곡선(Logarithmic Curve)

방정식 $y = bp^x$의 그래프를 작성해봅니다. b는 y의 초기값이며 x에 따른 y의 변화는 다음과 같습니다.

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 $\text{bp}^2$ $\text{bp}^3$ $\text{bp}^4$ $\text{bp}^5$

그림 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()
그림 1. 지수함수와 그 함수를 로그화한 함수.

결과적으로 지수함수를 로그함수로 전환하면 y축 역시 log(y)로 전환하여 기울기가 상수인 직선의 방정식으로 나타낼 수 있습니다.

댓글

이 블로그의 인기 게시물

matplotlib의 그래프 종류

1. 산포도(scatter plot) plt.scatter(x, y) >>> import matplotlib.pyplot as plt >>> import numpy as np >>> data=np.random.rand(1024, 2) >>> data[:3, :] >>> plt.scatter(data[:,0], data[:,1]) >>> plt.show() 2. 막대그래프(bar chart) plt.bar(x, hight, width, align='center') 매개변수중 width에 인수를 전달하여 막대의 두께를 조절할 수 있다. 또한 align의 인수는 'center'와 'edge' 이다. 기본값은 'center'이다. 이 값은 x축의 레이블이 막대의 중간에 위치(center) 또는 왼쪽 가장자리에 위치(edge)시킨다. 코드에서 np.random.randint 는 특정한 범위내에서 지정한 갯수의 랜덤수를 생성 np.unique(배열, retrun_counts=False, axis=None) : 객체 내의 중복되지 않은 수들을 반환한다. return_counts=True이면 각 수에 대한 빈도수를 반환한다. axis를 통해 행(1), 열(0)을 선택한다. >>> x=np.random.randint(1, 6, size=100) >>> uni,count=np.unique(x, return_counts=True) >>> uni array([1, 2, 3, 4, 5]) >>> count array([25, 17, 23, 16, 19], dtype=int64) >>> plt.bar(uni, count) >>> plt.show() 위의 막대그래프의 막대의

유사변환과 대각화

내용 유사변환 유사행렬의 특성 대각화(Diagonalization) 유사변환(Similarity transformation) 유사변환 n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사하다고 하며 이 변환을 유사 변환 (similarity transformation)이라고 합니다. $$\begin{equation}\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B \end{equation}$$ 식 1의 유사 변환은 다음과 같이 고유값을 적용하여 특성 방정식 형태로 정리할 수 있습니다. $$\begin{align} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align}$$ 위 식의 행렬식은 다음과 같이 정리됩니다. $$\begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \t

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수