기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

극대와 극소(Maxima and Minima)

극대와 극소(Maxima and Minima)

실제 상황의 어떠한 작업이나 활동을 여러 변수들의 관계인 함수로 표현할 수 있다면 그 함수의 미분에 의해 극대값 또는 극소값을 발견할 수 있습니다. 이러한 결과는 작업 비용을 최소화하거나 효율성을 극대화할 수 있는 합리적 근거를 제시할 수 있으므로 다양한 엔지니어링에서 극대와 극소는 중요한 문제로 다루어 집니다.

함수의 극대와 극소에 관한 관계를 알아보기 위해 다음과 같이 간단한 식으로부터 시작해봅니다.

$$y = x^2- 4x + 7$$
표 1. $y = x^2 - 4x + 7$에 따른 x, y 좌표
x 0 1 2 3 4 5
y 7 4 3 4 7 12

그림 1은 표 1을 나타낸 것으로 y의 극소값은 x = 2에서 3으로 나타낼 수 있습니다. 그러나 그 극소의 x 좌표가 2 주위의 어떤 값, 예를 들어 2.02 등과 같이 2+dx가 아닌 정확히 2라는 것을 확정할 수 있을까요?

x=np.arange(6)
y=x**2-4*x+7
x1=np.linspace(-1, 5, 100)
y1=x1**2-4*x1+7
plt.figure(dpi=100)
plt.plot(x1, y1)
plt.scatter(x, y)
plt.grid(True)
plt.ylim(0, 14)
plt.xlabel("x", size="12", weight="bold")
plt.ylabel("y", size="12", weight="bold")
plt.show()
그림 1. $y = x^2 - 4x + 7$.

질문에 답하기 위해 잠정적으로 최소가 되는 지점 주위의 많은 값들에 대응하는 y값들을 비교하는 방식으로 계산할 수 있습니다. 그러나 이러한 방식으로는 동일한 계산을 반복 하는 것은 번거로울 뿐만 아니라 정확한 지점을 찾는 것은 쉽지 않습니다.

다른 예인 $y = 3x- x^2$의 그래프는 그림 2와 같습니다. 이 곡선이 통과하는 몇 개의 좌표들은 다음과 같습니다. 이 함수의 경우 그림 1의 함수와는 달리 극값의 좌표를 특정하기는 쉽지 않습니다.

x=np.arange(-1,6)
y=3*x-x**2
pd.DataFrame([x, y], index=['x', 'y'])
0 1 2 3 4 5 6
x -1 0 1 2 3 4 5
y -4 0 2 2 0 -4 -10
x1=np.linspace(-1, 5, 100)
y1=3*x1-x1**2
plt.figure(dpi=100)
plt.plot(x1, y1)
plt.scatter(x, y)
plt.grid(True)
plt.xlabel("x", size="12", weight="bold")
plt.ylabel("y", size="12", weight="bold")
plt.show()
그림 2. $y=3x-x^2$.

x = 1과 x = 2 사이 어딘가에 최대 값이 있음이 분명합니다. y의 최대 값이 약 $\displaystyle 2\frac{1}{4}$ 정도라고 추정할 수 있습니다. x = 1과 2 사이의 많은 좌표들로부터 시행착오(trial-error) 방법으로 이 값을 계산할 수 있습니다. 그러나 여전히 이러한 방법으로 계산한 극대값이 정확한가에 대한 의문은 존재할 것입니다. 시행착오법 극대와 극소점에서의 함수의 일차 미분계수 $\displaystyle \frac{dy}{dx}=0$되는 특성을 적용하여 위의 두 함수의 극소값과 극대값을 계산해 봅니다. (미분의 기하학적 의미 참조)

첫번째 식 $y = x^2 - 4x + 7$의 극소값을 찾기 위해 미분 계수가 0이 되는 지점의 x값을 계산해봅시다.

x=symbols("x")
y=x**2-4*x+7
dy=diff(y, x)
dy
2x−4
x_min=solve(dy, x)
x_min
[2]

x = 2에 대응하는 y값이 이 함수의 극소값이 됩니다. 다음의 계산과 같이 극소값은 3이 됩니다. 이 값은 그림 1에 나타낸 값과 같습니다.

y_min=y.subs(x, x_min[0])
y_min
3

위 과정을 그림 2에서의 최소값을 찾기 위해 적용하면 다음과 같습니다.

x=symbols("x")
y=3*x-x**2
dy=diff(y, x)
dy
3−2x
x_max=solve(dy, x)
x_max
[3/2]
y_max=y.subs(x, x_max[0])
y_max
$\quad \small\color{blue}{\frac{9}{4}}$

위 결과에 의하면 이 식의 극대값은 1과 2의 중간에 해당하는 x값에 대응하는 y값으로 $\displaystyle \frac{9}{4}$입니다. 이 결과는 시행착오법에 의한 추정으로 일어날 수 있는 불확실성을 제거하여 줍니다. 그러나 위 예들에서 결과가 극대인지 극소인지를 어떻게 결정할 수 있을까요? 물론 위 예의 경우 모두 이차방정식으로 그림 1과 2처럼 그래프의 형태를 알고 있기 때문에 그러한 결정은 문제 되지 않습니다. 다음 함수는 위의 예들 보다 좀 복잡한 형태를 가지는 함수 입니다.

다음 방정식의 극값을 발견하기 위해 위와 동일한 과정을 취합니다.

$$y=4x+\frac{1}{x}$$
x=symbols("x")
y=4*x+1/x
dy=diff(y)
dy
$\quad \small \color{blue}{4−\frac{1}{x^2}}$
x_m=solve(dy, x)
x_m
[-1/2, 1/2]
y_m=[y.subs(x, i) for i in x_m]
y_m
[-4, 4]

위 결과는 두 개의 극값을 가집니다. 이들 중 극소와 극대를 어떻게 결정할 수 있을까요? 가장 간단한 방법으로 극값 주위의 값들과 비교로 알 수 있을 것입니다. 다음 코드는 $-1 \sim 0$ 구간의 y값들을 나타낸 것입니다. 이 결과에 의하면 -0.5에서 극대값임을 알 수 있습니다.

y1=[(i, N(y.subs(x, i), 3)) for i in [-1, -0.7, -0.5, 0.3, 0]]
y1
[(-1, -5.00), (-0.7, -4.23), (-0.5, -4.00), (0.3, 4.53), (0, zoo)] # zoo=무한대

다음은 $0 \sim 1$ 구간의 y값들을 나타낸 것입니다.

y2=[(i, N(y.subs(x, i), 3)) for i in [0, 0.3, 0.5, 0.7, 1]]
y2
[(0, zoo), (0.3, 4.53), (0.5, 4.00), (0.7, 4.23), (1, 5.00)]

위 결과들로 부터 x=0.5에서 극소값이 됨을 알 수 있습니다. 극소값 또는 극대값을 분류하기 위해 2차미분을 적용할 수 있습니다.(곡선의 곡률 참조)

숫자가 60을 두 부분으로 나누어 나눈 부분을 곱했을 경우 극대값을 발견하라는 요청을 가정해 봅니다. 이 경우 함수의 형태가 아니므로 위에서 사용한 미분계수 = 0을 적용할 수 없습니다. 당연히 여러 번 시도에 의해 결정할 수밖에 없습니다. 예를 들어 50과 10으로 구분하면 500이 됩니다. 이와 같이 반복해서 계산해 보면 다음과 같은 결과를 나타냅니다.

y1=[(i, i*(60-i)) for i in range(0, 61, 10)]
y1
[(0, 0), (10, 500), (20, 800), (30, 900), (40, 800), (50, 500), (60, 0)]

위 결과에 의하면 반으로 구분할 경우에서 극대값을 나타냅니다. 위 과정을 임의 수인 n에 적용해 봅니다. 이 경우 반으로 나누어 곱한 결과는 n(n-x)가 될 것입니다. $(0 \le x \le n)$

$$y = x(n-x)$$

위 함수의 극값은 $\displaystyle \frac{dy}{dx}=0$인 지점에서 생성됩니다. 그러므로 위 함수를 미분하여 극점을 찾으면 다음과 같습니다.

n, x=symbols("n, x")
y=x*(n-x)
dy=diff(y, x)
dy
n-2x
x_m=solve(dy, x)
x_m
[n/2]

위 결과로부터 n이 어떤 수이든 그것을 반으로 나누어 곱할 경우 극대값이 됨을 알 수 있습니다.

y_m=y.subs(x, x_m[0])
y_m
$\quad \small \color{blue}{\frac{n^2}{4}}$

극대값은 $\displaystyle \frac{1}{4} n^2$이 됩니다. 이 결과로 부터 어떤 수가 n, m, p로 분해된다면 즉 N = n + m + p가 성립하면 n = m = p인 경우 n × m × p가 극대값이 된다는 규칙으로 일반화 할 수 있습니다.

예 1)
 함수 y의 극대와 극소값?

$$y=\frac{1}{3}x^3-2x^2+3x+1$$
n, x=symbols("n, x")
y=x**3/3-2*x**2+3*x+1
dy=diff(y, x)
dy
x2−4x+3
x_m=solve(dy, x)
x_m
[1, 3]
y_m=[y.subs(x, i) for i in x_m]
y_m
[7/3, 1]

위 결과와 같이 두 개의 극값이 생성됩니다. 이 값들을 결정하기 위해서 각 극점 주위의 값들을 살펴봅니다.

y1=[(i, N(y.subs(x, i),3)) for i in np.arange(0, 5.1, 0.5)]
y1
[(0.0, 1.00),
 (0.5, 2.04),
 (1.0, 2.33),
 (1.5, 2.13),
 (2.0, 1.67),
 (2.5, 1.21),
 (3.0, 1.00),
 (3.5, 1.29),
 (4.0, 2.33),
 (4.5, 4.38),
 (5.0, 7.67)]

위 결과 중 빨간색으로 표시한 부분이 극값입니다. x = 1과 3에서 변화를 보입니다. 그러나 그림 3에서 나타낸 것과 같이 이 값들은 모든 범위에서 최대, 최소값이 아닙니다. 즉, 극대와 극소값은 일정한 범위에서의 최대, 최소를 의미합니다. 이러한 의미를 명확히 하기 위해 일정한 범위에서의 극대, 극소값을 국소 극대값(local maximum)국소 극소값(local minimum)이라고 합니다.

x1=np.linspace(-0.1, 4, 100)
y2=[y.subs(x, i) for i in x1]
plt.figure(dpi=100)
plt.plot(x1, y2, label=r"$\mathbf{\frac{1}{3}x^3-2x^2+3x+1}$")
plt.scatter([y1[2][0], y1[6][0]], [y1[2][1], y1[6][1]], color="red")
plt.xlabel("x", size=12, weight="bold")
plt.ylabel("y", size=12, weight="bold")
plt.legend(loc="best")
plt.grid(True)
plt.show()
그림 3. 곡선에서의 국소 극대와 극소.

예 2)
 중심 좌표가 (a, b)이고 반지름이 r인 원의 방정식을 고려합니다.

$$(y - b)^2 + (x - a)^2 = r^2$$
그림 4. 원에서의 극대와 극소.

그림 4로부터 극대값은 b+r, 극소값은 b-r임을 알 수 있습니다. 이러한 극값은 미분 계산을 통해 계산할 수 있습니다. 이 적용을 위해 양함수로 표현된 원의 방정식을 다음과 같이 음함수로 전환합니다. 이 과정을 코드화하기 위해 solve() 함수를 사용합니다.

$$y = ±\sqrt{r^2 - (x- a)^2}+ b$$
a, b, r, x, y=symbols("a, b, r, x, y")
eq=(y-b)**2+(x-a)**2-r**2
y1=solve(eq, y)
y1
$\quad \small \color{blue}{\left[ b - \sqrt{\left(- a + r + x\right) \left(a + r - x\right)}, \ b + \sqrt{\left(- a + r + x\right) \left(a + r - x\right)}\right]}$

두 개의 음함수가 생성됩니다. 즉, 양함수인 원의 방정식을 음함수로 전환하면 원의 중심 축을 기준으로 윗부분과 아랫부분의 방정식으로 구분됩니다. 그러므로 윗부분의 극값이 극대값, 아랫부분의 극값이 극소값이 될 것입니다. 이러한 결과는 아래 코드로 구현됩니다.

#아래부분 함수 
y11=y1[0]
dy11=y11.diff(x)
dy11
$\quad \small \color{blue}{- \frac{\sqrt{\left(- a + r + x\right) \left(a + r - x\right)} \left(a - x\right)}{\left(- a + r + x\right) \left(a + r - x\right)}}$
dy11_m=solve(dy11, x)
dy11_m
[a]
y11.subs(x, a)
$\quad \small \color{blue}{b - \sqrt{r^{2}}}$
#윗부분 함수 
y12=y1[1]
dy12=y12.diff(x)
dy12
$\quad \small \color{blue}{\frac{\sqrt{\left(- a + r + x\right) \left(a + r - x\right)} \left(a - x\right)}{\left(- a + r + x\right) \left(a + r - x\right)}}$
d_m=solve(dy12, x)
d_m
[a]
y12.subs(x, a)
$\quad \small \color{blue}{b + \sqrt{r^{2}}}$

위 결과를 정리하면 다음과 같습니다.

극좌표 x = a에서

  • y = b + r : 극대값
  • y = b - r : 극소값

예 3)
  $y = ax^3 + bx + c$의 경우 a와 b가 양수라면 극대와 극소?

x1=np.linspace(-10, 10, 100)
y2=3*x1**3+2*x1+3
plt.figure(dpi=100)
plt.plot(x1, y2, label=r"$\mathbf{3ax^3+bx+c}$")
plt.xlabel("x", size=12, weight="bold")
plt.ylabel("y", size=12, weight="bold")
plt.xticks([])
plt.yticks([])
plt.legend(loc="best")
plt.grid(True)
plt.show()
그림 5. 극값이 존재하지 않는 그래프.

위 식의 미분계수 = 0에 대한 해를 찾을 수 없으므로 극대, 극소는 존재할 수 없습니다. 이 식의 미분계수로부터 극값을 계산해 보면 다음과 같습니다.

a, b, c, x=symbols("a, b, c, x")
y=a*x**3+b*x+c
dy=diff(y, x)
dy
3ax2+b
x_m=solve(dy, x)
x_m
[-sqrt(3)*sqrt(-b/a)/3, sqrt(3)*sqrt(-b/a)/3]

위 코드는 미분계수가 0인 경우의 x 좌표값을 계산한 것으로 a와 b가 양수라는 조건에 따라 그 결과는 복소수입니다. 실수영역에서 이 함수의 극값은 존재하지 않습니다.

예 4)
  반지름이 r인 원에 새겨진 최대 면적의 직사각형의 변의 길이를 계산해 보겠습니다.

원내의 직사각형의 각 변의 길이는 그림 6과 같이 나타낼수 있습니다.

그림 6. 원 내에 사각형.

직사각형의 넓이 S는 다음과 같이 x의 함수가 됩니다.

$$S(x) = x\sqrt{4r^2 − x^2}$$

이 예제는 결국 함수 S(x)의 극값을 계산하는 문제입니다. 즉, 함수의 미분계수를 발견하는 것으로 $4r - x^2 = u$로 치환에 의한 미분의 곱법칙연쇄법칙을 적용하여 미분할 수 있습니다.(결합함수의 미분 참조) 이 포스트에서는 함수 diff()를 사용하면 다음과 같습니다.

r, x=symbols("r, x")
y=x*(sqrt(4*r**2-x**2))
dy=y.diff(x)
dy
$\quad \small \color{blue}{- \frac{x^{2}}{\sqrt{4 r^{2} - x^{2}}} + \sqrt{4 r^{2} - x^{2}}}$
x_m=solve(dy, x)
x_m
[-sqrt(2)*r, sqrt(2)*r]

위 코드의 결과로 극값은 두개이지만 x는 길이이므로 양수이어야 합니다. 즉, x_m은 $\sqrt{2} r$ 입니다.

예 5)
  원뿔형 물탱크의 용량이 최대가 되기 위한 r을 계산합니다. 그림 7은 물탱크의 단면입니다.

그림 7. 물탱크의 단면.

원뿔형 물탱크의 부피는 다음과 같이 계산합니다. 이 식의 극대값은 미분계수가 0이 되는 반지름 r을 계산하는 것입니다.

$$\begin{align} V&=\pi r^2 \frac{h}{3}\\ &=\pi r^2 \frac{\sqrt{l^2-r^2}}{3} \end{align}$$

위 식에 대한 미분으로 극대값을 계산하면 다음과 같습니다.

l, r, x=symbols("l, r, x")
v=pi*r**2*sqrt(l**2-r**2)/3
dv=diff(v, r)
dv
$\quad \small \color{blue}{ \frac{\pi r^{3}}{3 \sqrt{l^{2} - r^{2}}} + \frac{2 \pi r \sqrt{l^{2} - r^{2}}}{3}}$
r_m=solve(dv, r)
r_m
[0, -sqrt(6)*l/3, sqrt(6)*l/3]

r은 길이이므로 0이 아닌 양수이어야 합니다. 그러므로 $\displaystyle \frac{\sqrt{6} l}{3}$입니다.

예 6)
  함수 y의 극대와 극소값을 계산해 봅니다. 이 함수의 경우 두 함수의 결합으로 각 함수의 미분은 나눗셈 법칙을 적용합니다.

$$ y=\frac{x}{x-4}+\frac{x-4}{x}$$
x=symbols("x")
y1=x/(x-4) 
y2=(x-4)/x
y1_de=denom(y1)
y1_nu=numer(y1)
y1_df=(y1_nu.diff(x)*y1_de-y1_nu*y1_de.diff(x))/y1_de**2
y1_df
$\quad \small \color{blue}{- \frac{4}{\left(x - 4\right)^{2}}}$
y2_de=denom(y2)
y2_nu=numer(y2)
y2_df=(y2_nu.diff(x)*y2_de-y2_nu*y2_de.diff(x))/y2_de**2
y2_df
$\quad \small \color{blue}{\frac{4}{x^{2}}}$
y_df=y1_df+y2_df
simplify(y_df)
$\quad \small \color{blue}{\frac{64 - 32 x}{x^{2} \left(x^{2} - 8 x + 16\right)}}$

위 결과는 원래의 함수를 diff()를 적용하여 미분한 결과와 같습니다. 그 결과로부터 극값을 계산해 봅니다.

y=x/(x-4) + (x-4)/x
dy=simplify(diff(y, x))
dy
$\quad \small \color{blue}{\frac{64 - 32 x}{x^{2} \left(x^{2} - 8 x + 16\right)}}$
x_m=solve(dy, x)
x_m
[2]
y_re=[(N(x_m[0]+i, 3), N(y.subs(x, x_m[0]+i),3)) for i in [-0.5, 0, 0.5]]
y_re
[(1.50, -2.27), (2.00, -2.00), (2.50, -2.27)]

위 결과에 의하면 x = 2에서 극대값 -2입니다.

예 7)
  다음 함수의 극값 ?

$$y = \sqrt{1 + x} + \sqrt{1 - x}$$

이 함수 역시 두 개 함수들의 합으로 구성되어 있습니다. 또한 각 함수의 미분을 위해 연쇄 규칙$^{\ref{chain_rule}}$을 적용할 수 있습니다.

x, u, v=symbols("x u v")
u1=1+x
y1=sqrt(u)
dy1=y1.diff(u)*u1.diff(x)
dy1
$\quad \small \color{blue}{ \frac{1}{2 \sqrt{u}}}$
dy1=dy1.subs(u, u1)
dy1
$\quad \small \color{blue}{\frac{1}{2 \sqrt{x+1}}}$
v1=1-x
y2=sqrt(v)
dy2=y2.diff(v)*v1.diff(x)
dy2
$\quad \small \color{blue}{\frac{1}{2 \sqrt{v}}}$
dy2=dy2.subs(v, v1)
dy2
$\quad \small \color{blue}{- \frac{1}{2 \sqrt{1 - x}}}$
dy=dy1+dy2
dy
$\quad \small \color{blue}{\frac{1}{2 \sqrt{x + 1}} - \frac{1}{2 \sqrt{1 - x}}}$

원 함수를 직접 미분하여 극값을 계산해 봅니다.

y=(1+x)**(Rational('1/2'))+(1-x)**(Rational('1/2'))
dy=diff(y, x)
dy
$\quad \small \color{blue}{\frac{1}{2 \sqrt{x + 1}} - \frac{1}{2 \sqrt{1 - x}}}$
x_m=solve(dy, x)
x_m
[0]
y_re=[(i, N(y.subs(x, i),3)) for i in [-0.5, 0, 0.5]]
y_re
[(-0.5, 1.93), (0, 2.00), (0.5, 1.93)]

x = 0에서 y = 2는 극대값입니다.

예 8)
  다음 함수 y의 극값을 계산해 봅니다.

$$y=\frac{x^2-5}{2x-4}$$

이 함수의 미분은 나눗셈 법칙을 적용합니다.

$$\begin{align} \frac{dy}{dx}&=\frac{2x(2x-4)-(x^2-5)2}{(2x-4)^2}\\ &=\frac{2x^2-8x+10}{(2x-4)^2} \end{align}$$

diff()를 적용한 미분 결과를 활용하면 다음과 같습니다.

x=symbols("x")
y=(x**2-5)/(2*x-4)
dy=diff(y, x)
dy
$\quad \small \color{blue}{\frac{2 x}{2 x - 4} - \frac{2 \left(x^{2} - 5\right)}{\left(2 x - 4\right)^{2}}}$
x_m=solve(dy, x)
x_m
[2 - I, 2 + I]

위 결과 미분 = 0으로부터의 x의 해는 복소수만을 가집니다. 그러므로 실수영역에서 극소값이나 극대값은 존재하지 않습니다.

예 8)
 함수 $(y − x^2)^2 = x^5$의 극대값?

y의 극대값을 계산하기 위해서는 양함수 형태인 현재의 함수를 음함수 형태로 전환하여야 합니다. 즉, 위 식을 y에 대해 정리하기 위해 sympy 함수인 Eq(), solve()함수를 적용합니다.

sympy의 함수들에 인수를 전달하기 위해서는 동차식(식 = 0)의 형태이어야 합니다. 그러나 두 개의 동차식을 '='로 연결해주는 함수인 Eq()를 사용하면 위 함수 형태를 유지할 수 있습니다.

x, y=symbols("x, y")
eq=Eq((y-x**2)**2, x**5)
eq
$\quad \small \color{blue}{\left(- x^{2} + y\right)^{2} = x^{5}}$

위 식을 y에 대해 정리하기 위해 다음과 같이 solve()를 적용합니다. 이 함수에 전달하는 인수인 식은 동차식이어야 하지만 Eq()함수에 의해 생성된 식은 그 형태에 관계없이 인식합니다. 또한 이 함수는 지정한 변수의 해를 계산하는 것으로 아래 코드와 같이 y의 해 즉, y에 대해 식을 정리하는 결과를 반환합니다.

eq1=solve(eq, y)
eq1
[x**2 - sqrt(x**5), x**2 + sqrt(x**5)]

위의 결과에 의하면 변수 x에 정리된 음함수는 두 부분으로 구분됩니다. 그림 7.8은 이 함수들의 그래프입니다. 이 그래프에 의하면 하나의 극대값을 가집니다.

그림 8. $(y-x^2)^2=x^5$.

그림 8의 주황색 그래프에서 극점을 계산해 봅니다.

dv1=diff(eq1[0], x)
dv1
$\quad \small \color{blue}{2 x - \frac{5 \sqrt{x^{5}}}{2 x}}$
x_m1=solve(dv1, x)
x_m1
[16/25]
[(N(i, 3), N(eq1[0].subs(x, i), 3)) for i in [x_m1[0]-0.1, x_m1[0], x_m1[0]+0.1]]
[(0.540, 0.0773), (0.640, 0.0819), (0.740, 0.0765)]

위 코드의 결과에 의하면 극대값이 존재합니다. 다음으로 그림 8의 파란색 그래프 부분에 대한 것으로 극값은 존재하지 않습니다.

dv2=diff(eq1[1], x)
dv2
$\quad \small \color{blue}{2 x + \frac{5 \sqrt{x^{5}}}{2 x}}$
x_m2=solve(dv2, x)
x_m2
[]

예 9)
 높이가 밑면(원) 반지름의 2배인 실린더의 부피가 증가할 경우 그 실린더의 다른 부분 역시 동일한 비율을 유지합니다. 밑면의 반경이 r(t)이며 표면적은 20 sec-1로 증가합니다. 실린더의 부피의 증가 비율을 계산해 봅니다.

$$\begin{align} \text{표면적}:&\; S = 2\pi r(t)^2 + 2\pi r(t)⋅2r(t) = 6\pi r(t)^2\\ \text{부피}:&\; V = \pi r(t)^2⋅2r(t) = 2\pi r(t)^3 \end{align}$$

문제는 표면적의 시간 당 변화율에 대한 정보를 제공합니다. 즉,

$$\frac{ds}{dt}= \frac{20}{\text{sec}} \rightarrow dS = 20$$

이 정보로 부터 dV를 계산합니다. 계산과정은 다음과 같습니다.

$$\begin{align} \frac{ds}{dr}&=12 \pi r \rightarrow ds=12 \pi r dr\\ \frac{dV}{dr}&=6 \pi r^2 \rightarrow dV=6 \pi r^2 dr \end{align}$$

예에서 dS값이 제공되었으므로 dr을 계산할 수 있습니다. 이 결과를 통해 dV를 계산합니다. 또한 반지름 r의 증가율은 시간 t에 대한 함수입니다. 그러나 t에 대한 구체적인 식은 주어지지 않았습니다. 이러한 경우 sympy에서는 Function() 함수에 의해 정의할 수 있습니다. 다음 코드에서 반지름 r, 표면적 S, 부피 V를 함수로 정의하였습니다.

t=symbols('t')
r=Function('r')(t)
S=Function('S')(r)
V=Function('V')(r)
r.diff(t)
$\quad \small \color{blue}{\frac{d}{d t} r{\left(t \right)}}$
S=6*pi*r**2
dSdr=S.diff(r)
dSdr
$\quad \small \color{blue}{12 \pi r(t)}$
dS=dSdr*r.diff(t)
dS
$\quad \small \color{blue}{12 \pi r{\left(t \right)} \frac{d}{d t} r{\left(t \right)}}$

표면적 S를 반지름 r에 대해 미분한 것이며 이 결과로 부터 dS를 계산할 수 있습니다. 문제에서 dS = 20 이므로 이를 적용하여 dr을 계산할 수 있습니다. 이 계산은 solve()를 적용합니다.

dr=solve(Eq(dS, 20), r.diff(t))
dr
[5/(3*pi*r(t))]

위 계산 과정을 dV에서 동일하게 적용합니다.

V=2*pi*r**3
dV=V.diff(r)*r.diff(r)
dV
6πr2(t)
dV=dV*dr[0]
dV
10r(t)

댓글

이 블로그의 인기 게시물

[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' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b