기본 콘텐츠로 건너뛰기

pandas_ta를 적용한 통계적 인덱스 지표

미적분의 기본 용어

내용

기본 용어 정의

미적분을 시작하는 과정에 처음으로 만나는 장벽은 사용되는 기호에서 기인하는 경우가 많습니다. 그러므로 미적분에서 필수적으로 사용되는 몇몇의 용어를 소개합니다.

  • d 는 단지 '조금' 또는 '약간'을 의미합니다. 이 의미가 좀 모호하기는 하지만 전체에서 아주 작은 부분, 좀더 정확히는 무한히 작은 부분을 나타내기 위해 사용합니다. 그러므로 dx는 x의 조금, du는 u의 조금이라는 의미입니다.
  • $\mathbf{\int}$(integral)은 합계 sum의 첫 글자인 s를 길게 늘어뜨린 형태입니다. 그러므로 $\int\, dx$는 x의 작은 부분들의 합을 의미합니다. 이것을 적분이라고 합니다. 예로서 1시간은 3600초의 합입니다. 적분기호를 사용하면 다음과 같이 나타낼 수 있습니다. $$\int \text{sec} = \int ds = \text{hour}$$

'작음' 또는 '조금'을 나타내는 d는 상대적입니다. 예를 들어 1시간은 60분으로 구성되며 1시간에 비해 1분은 작은양입니다. 그러나 그보다 1초는 더 작은 양이 됩니다. 어떤 부분에서는 '작다'보다는 '미세하다'라고 나타낼 수 있습니다.

상수와 변수

미적분학에서 모든 수는 상수(constant)변수(variable)로 구분합니다. 예를 들어 갓 태어난 아기의 신장이 50cm이고 이후 아기의 성장을 기록한다고 해봅니다. 이 경우 50은 변할 수 없는 수인 상수가 되며 지속적인 성장에 의해 50에 첨가되는 수는 계속 변할 것입니다. 이렇게 지속적으로 변하는 수를 변수라고 합니다.

수학에서 수는 알파벳을 기호화하여 사용합니다. 위의 예에서 상수인 50을 a로 하고 이 값에 더해지는 변수를 x로 하여 다음과 같이 나타냅니다.

$$\text{height} =a+x$$

미적분학에서는 일반적으로 상수는 a, b, c 등과 같이 알파벳 첫자부터 사용하며 변수는 x, y, z등과 같이 마지막 부분에 있는 알파벳을 적용합니다.

함수, 변화율, 그리고 미분

위에서 정의한 변수는 다른 변수에 의존되어 변할 수 있습니다. 예를 들어 위에서 언급한 아기의 신장에서 변수는 시간, 영양 상태 등의 다른 변수들에 의존됩니다. 시간과 영양 상태 등을 다른 변수 기호 t, N 등으로 나타낸다면 위의 식은 다음과 같이 나타낼 수 있습니다.

$$\text{height} =a+x=a+(t, N,\cdots)$$

사실 위 표현에서 (t, N,...)는 여러 변수의 관계를 의미합니다.

그림 1은 밑면 x와 높이 y이고 한쪽이 30°의 사잇각을 가진 직각삼각형을 나타낸 것입니다. 이 삼각형에서 서로 의존하는 두 개의 변수 x, y를 생각해 봅시다. 두 변수 중에 변수 x를 변화시키면 y 역시 그 변화에 따라 달라질 것입니다. 예를 들어 x에 dx(x의 약간)를 첨가하면 y 역시 dy 만큼 변경될 것입니다. 물론 dx, dy는 양수 뿐만 아니라 음수가 될 수 있겠지요.

그림 1. 직각 삼각형의 밑면과 높이의 관계.

삼각형이 30°의 사잇각을 유지하면서 확장된다고 가정하고 밑변이 x + dx가 될 정도로 커지면 높이가 y + dy가 됩니다. 여기서 x를 늘리면 y가 증가합니다. 높이가 dy이고 밑이 dx인 작은 삼각형은 원래 삼각형과 비슷합니다. 그리고 두 비율 $\displaystyle \frac{dy}{dx}$와 $\displaystyle \frac{y}{x}$는 동일할 것입니다. 각도가 30°이므로 다음과 같이 나타낼 수 있습니다.

$$\frac{dy}{dx}=\frac{1}{1.73} \to \tan(30)=\frac{dy}{dx}$$

다음은 위 값을 계산하기 위한 코드입니다. 이 코드에서는 사용된 round(값, 자릿수) 함수는 값을 지정한 자릿수까지 반올림하여 반환합니다. 또한 tan(라디안)는 numpy 모듈의 함수로 tan값을 계산하여 반환합니다. 그러나 전달하는 값은 각도가 아닌 라디안(radian) 값이어야 하므로 30°를 라디안으로 전환하기 위해 numpy 모듈 함수인 deg2rad()를 적용하였습니다.

import numpy as np
import pandas as pd
from sympy import *
import matplotlib.pyplot as plt
round(1/1.73, 2)
0.58
round(tan(np.deg2rad(30)),2)
0.58

다른 예로 그림 2는 벽에 기대어 있는 길이 $\overline{AB}$의 사다리를 나타낸 것입니다. 변수 x는 벽으로부터 A까지의 수평 거리 $\overline{OA}$, y는 벽에 닿는 높이 $\overline{OB}$를 나타냅니다. 이러한 상태에서 사다리를 움직일 경우 y는 분명히 x에 의존합니다. 즉, 하단 A를 벽에서 조금 더 당기면 상단 B가 약간 아래로 내려 오는 것을 알 수 있습니다.

그림 2. x, y 축에 기대어 있는 사다리 모습
$x\rightarrow x+dx, \; y \rightarrow y-dy$

하단 A가 벽에서 19cm 떨어져 있을 때 상단 B가 면에서 180cm인 경우 하단 A를 1cm 더 빼면 상단 B는 얼마나 내려갈까요?

이 상황에서 x, y는 각각 19, 180이 되며 x의 증분은 1cm가 됩니다. 이 증분을 dx라고 하며 전체 길이 x+dx = 19+1 = 20 cm가 됩니다. x, y의 길이의 변화에도 불구하고 AB의 길이는 변함이 없습니다. 그러므로 피타고라스 정리를 적용하여 y의 변화 즉, dy를 계산할 수 있습니다.

$$\begin{align}\overline{AB}&=\sqrt{x^2+y^2}\\ &=\sqrt{(x+dx)^2+(y+dy)^2}\\ \sqrt{19^2+181^2}&=181\\ \sqrt{20^2+(180+dy)^2}&=181\\ dy &\approx -0.11 \end{align}$$

위 과정을 코드화하기 위해서 x, y를 기호화하여 관계를 정립할 필요가 있습니다. 이러한 경우 기호를 지정하여 숫자로 치환을 가능하게 하는 파이썬의 sympy 라이브러리를 사용합니다. 그 과정은 다음과 같습니다.

  • 변수(x, y)와 기호(dx, dy)를 symbols()함수를 사용하여 지정
  • $\overline{AB}$를 위한 식을 생성(z)
  • x=1.9, y=180에서의 $overline{AB}$길이 산출(z)
  • 이 계산을 위해서 subs()메서드를 사용합니다.
  • $\sqrt{(x + dx)^2 + (y + dy)^2 − z^2} = 0$ 의 식을 생성(eq)
    $\qquad$ 위 식과 같이 한쪽이 0인 식을 동차식(homogeneous equation)이라고 합니다.
  • 동차식에서 지정한 변수의 해를 계산하기 위해 solveset()함수를 적용합니다.
x, y, dx, dy=symbols("x, y, dx, dy", real=True)
z=sqrt(x**2+y**2)
z
$\quad \small{\color{blue}{\sqrt{x^{2} + y^{2}}}}$
z1=z.subs([(x, 19), (y, 180)])
print(z1)
181
eq=sqrt((x+dx)**2+(y+dy)**2-z1**2)
eq1=eq.subs([(x, 19),(dx, 1),(y,180)])
eq1
$\quad \small{\color{blue}{\sqrt{\left(dy + 180\right)^{2} - 32361}}}$
sol=solveset(eq1, dy, Interval(-180, 180))
sol
$\quad \small{\color{blue}{\left\{-180 + \sqrt{32361}\right\}}}$
x=[N(i, 3) for i in N(sol)] #(1)
x
[-0.108]

위 예들로부터 특정 위치를 제외하고 dy와 dx는 다른 크기이며 그 값들의 변화는 dx, dy의 비율로 나타냄을 알 수 있습니다. 또한 두 변수 y와 x가 서로 관련이 있을 경우만 $\frac{dy}{dx}$의 비율을 찾을 수 있음을 알수 있습니다. 예를 들어 위 첫 번째 예에서 dy와 dx의 비는 tan(30°)으로 고정되고 두 번째 예의 경우는 $\overline{AB}$의 값이 고정된 상태이므로 dx, dy 중 하나의 변화에 대한 다른 변수의 변화를 찾아낼 수 있습니다. 길이가 길어지면 y는 감소하며 그 관계를 비율로 나타낼 수 있는 것입니다. 이러한 변수들의 관계를 정의한 식을 함수(function)라고 합니다.

그림 2의 경우 $\overline{AB}$를 상수 a로 나타낸다면 두 변수 x, y에 대한 식 $a^2=x^2+y^2$은 다음과 같이 두 가지 형식으로 나타낼 수 있습니다.

  • $y=\sqrt{a^2-x^2}$: 양함수(Explicit Function)
  • $x^2+y^2-a^2=0$: 음함수(Implicit Function)

위 식에서 y는 x에 의해 결정되므로 x를 독립변수(independent variable), y를 종속변수(independent variable)로 간주합니다. 위에서 나타낸 것과 같이 독립변수와 종속변수가 등호('=')를 기준으로 분리하여 나태낸 함수를 양함수(explicit function)라고 합니다. 반면에 독립변수와 종속변수의 분리 없이 함께 나타낸 함수를 음함수(implicit function)라고 합니다.

일반적으로 함수는 F(), f(), φ()등과 같이 다양한 기호로 나타낼 수 있으며 이 경우 양함수와 음함수는 다음과 같이 표시됩니다.

양함수와 음함수
  • y=F(x, a) 또는 x=F(y, a) : 양함수(explicit function)
  • F(x, y, a)=0 : 음함수(implicit function)

위 예로부터 산출된 두 변수의 비율 $\frac{dy}{dx}$를 x에 관한 y의 미분계수라고 합니다. 또한 이 미분계수를 산출하는 과정을 미분(differentiating)이라 합니다. 다시 말하면 미분의 결과는 극소 구간에서의 두 변수의 비율이 됩니다.

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \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)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같...

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a $\sin^{2}{\left(x \right)} + \cos^{2}{\left(x \right)}$ simplify(a) 1 simplify(b) $\frac{x^{3} + x^{2} - x - 1}{x^{2} + 2 x + 1}$ simplify(b) x - 1 c=gamma(x)/gamma(x-2) c $\frac{\Gamma\left(x\right)}{\Gamma\left(x - 2\right)}$ simplify(c) $\displaystyle \left(x - 2\right) \left(x - 1\right)$ 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. $$\tag{식 1}\Gamma(n) =\begin{cases}(n-1)!& n:\text{자연수}\\\int^\infty_0x^{n-1}e^{-x}\,dx& n:\text{부동소수}\end{cases}$$ x=symbols('x') gamma(x).subs(x,4) $\displaystyle 6$ factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

유리함수 그래프와 점근선 그리기

내용 유리함수(Rational Function) 점근선(asymptote) 유리함수 그래프와 점근선 그리기 유리함수(Rational Function) 유리함수는 분수형태의 함수를 의미합니다. 예를들어 다음 함수는 분수형태의 유리함수입니다. $$f(x)=\frac{x^{2} - 1}{x^{2} + x - 6}$$ 분수의 경우 분모가 0인 경우 정의할 수 없습니다. 이와 마찬가지로 유리함수 f(x)의 정의역은 분모가 0이 아닌 부분이어야 합니다. 그러므로 위함수의 정의역은 분모가 0인 부분을 제외한 부분들로 구성됩니다. sympt=solve(denom(f), a); asympt [-3, 2] $$-\infty \lt x \lt -3, \quad -3 \lt x \lt 2, \quad 2 \lt x \lt \infty$$ 이 정의역을 고려해 그래프를 작성을 위한 사용자 정의함수는 다음과 같습니다. def validX(x, f, symbol): ① a=[] b=[] for i in x: try: b.append(float(f.subs(symbol, i))) a.append(i) except: pass return(a, b) #x는 임의로 지정한 정의역으로 불연속선점을 기준으로 구분된 몇개의 구간으로 전달할 수 있습니다. #그러므로 인수 x는 2차원이어야 합니다. def RationalPlot(x, f, sym, dp=100): fig, ax=plt.subplots(dpi=dp) # ② for k in x: #③ x4, y4=validX(k, f, sym) ax.plot(x4, y4) ax.spines['left'].set_position(('data', 0)) ax.spines['right...