17. ๋ณ€๋ถ„๋ฒ• (Calculus of Variations)

17. ๋ณ€๋ถ„๋ฒ• (Calculus of Variations)

ํ•™์Šต ๋ชฉํ‘œ

  • ๋ฒ”ํ•จ์ˆ˜(functional)์˜ ๊ฐœ๋…๊ณผ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•œ๋‹ค
  • ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์„ ์œ ๋„ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํŠน์ˆ˜ ํ˜•ํƒœ์— ์ ์šฉํ•œ๋‹ค
  • ์ตœ์† ๊ฐ•ํ•˜์„ , ์ธก์ง€์„ , ํ˜„์ˆ˜์„  ๋“ฑ ๊ณ ์ „์  ๋ณ€๋ถ„ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค
  • ๊ตฌ์† ์กฐ๊ฑด์ด ์žˆ๋Š” ๋ณ€๋ถ„ ๋ฌธ์ œ์— ๋ผ๊ทธ๋ž‘์ฃผ ์Šน์ˆ˜๋ฒ•์„ ์ ์šฉํ•œ๋‹ค
  • ๋ผ๊ทธ๋ž‘์ฃผ ์—ญํ•™๊ณผ ํ•ด๋ฐ€ํ„ด ์—ญํ•™์˜ ๋ณ€๋ถ„๋ฒ•์  ๊ธฐ์ดˆ๋ฅผ ์ดํ•ดํ•œ๋‹ค
  • ๋ณ€๋ถ„๋ฒ•์˜ ํ˜„๋Œ€์  ์‘์šฉ(์œ ํ•œ์š”์†Œ๋ฒ•, ์ตœ์ ์ œ์–ด, ๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ ๋ฒ•)์„ ํŒŒ์•…ํ•œ๋‹ค

๋ฌผ๋ฆฌํ•™์—์„œ์˜ ์ค‘์š”์„ฑ: ๋ณ€๋ถ„๋ฒ•์€ "์ž์—ฐ์€ ์ž‘์šฉ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค"๋Š” ์ตœ์†Œ์ž‘์šฉ ์›๋ฆฌ์˜ ์ˆ˜ํ•™์  ํ† ๋Œ€์ด๋‹ค. ๋‰ดํ„ด ์—ญํ•™์„ ๋ผ๊ทธ๋ž‘์ฃผยทํ•ด๋ฐ€ํ„ด ํ˜•์‹์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๊ณ , ํŽ˜๋ฅด๋งˆ ์›๋ฆฌ(๊ด‘ํ•™), ์ตœ์†Œ ๊ณก๋ฉด(๋น„๋ˆ„๋ง‰), ์ตœ์  ๊ฒฝ๋กœ ๋ฌธ์ œ ๋“ฑ ๋ฌผ๋ฆฌํ•™๊ณผ ๊ณตํ•™ ์ „๋ฐ˜์—์„œ ํ•ต์‹ฌ์  ์—ญํ• ์„ ํ•œ๋‹ค. ์–‘์ž์—ญํ•™์˜ ๊ฒฝ๋กœ์ ๋ถ„, ์ผ๋ฐ˜์ƒ๋Œ€๋ก ์˜ ์•„์ธ์Šˆํƒ€์ธ ๋ฐฉ์ •์‹, ๊ณ ์ „์žฅ๋ก ์˜ ๋ผ๊ทธ๋ž‘์ง€์•ˆ ๋ฐ€๋„ ๋ชจ๋‘ ๋ณ€๋ถ„๋ฒ•์— ๊ธฐ์ดˆํ•œ๋‹ค.


1. ๋ณ€๋ถ„๋ฒ•์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

1.1 ๋ฒ”ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜์˜ ๊ตฌ๋ถ„

์ผ๋ฐ˜ ํ•จ์ˆ˜ $f: \mathbb{R} \to \mathbb{R}$๋Š” ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜๋ฉด ๋ฒ”ํ•จ์ˆ˜(functional) $J: \mathcal{F} \to \mathbb{R}$๋Š” ํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

$$J[y] = \int_a^b F(x, y(x), y'(x))\, dx$$

์—ฌ๊ธฐ์„œ $F$๋Š” ํ”ผ์ ๋ถ„ํ•จ์ˆ˜(integrand)์ด๊ณ , $y(x)$๋Š” ํ—ˆ์šฉ ํ•จ์ˆ˜(admissible function)์˜ ๊ณต๊ฐ„ $\mathcal{F}$์— ์†ํ•œ๋‹ค. ํ—ˆ์šฉ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค:

  • $y(x) \in C^2[a, b]$ (๋‘ ๋ฒˆ ์—ฐ์† ๋ฏธ๋ถ„ ๊ฐ€๋Šฅ)
  • ๊ฒฝ๊ณ„์กฐ๊ฑด: $y(a) = y_a$, $y(b) = y_b$ (๊ณ ์ • ๋์ )

1.2 ๋ณ€๋ถ„ $\delta y$์™€ ์ œ1๋ณ€๋ถ„

ํ—ˆ์šฉ ํ•จ์ˆ˜ $y(x)$์— ๋Œ€ํ•œ ๋ณ€๋ถ„(variation)์€ ๊ฒฝ๊ณ„์—์„œ ์‚ฌ๋ผ์ง€๋Š” ์ž„์˜์˜ ํ•จ์ˆ˜ $\eta(x)$์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค:

$$\delta y(x) = \epsilon \eta(x), \quad \eta(a) = \eta(b) = 0$$

์ œ1๋ณ€๋ถ„(first variation)์€ ๋ฒ”ํ•จ์ˆ˜์˜ ๋ฏธ๋ถ„์— ํ•ด๋‹นํ•œ๋‹ค:

$$\delta J = \left.\frac{d}{d\epsilon}J[y + \epsilon\eta]\right|_{\epsilon=0} = \int_a^b \left(\frac{\partial F}{\partial y}\eta + \frac{\partial F}{\partial y'}\eta'\right) dx$$

๋ฒ”ํ•จ์ˆ˜๊ฐ€ ๊ทน๊ฐ’์„ ๊ฐ€์ง€๋ ค๋ฉด, ๋ชจ๋“  ํ—ˆ์šฉ ๋ณ€๋ถ„ $\eta$์— ๋Œ€ํ•ด $\delta J = 0$์ด์–ด์•ผ ํ•œ๋‹ค.

import numpy as np
import matplotlib.pyplot as plt

def evaluate_functional(F, y_func, x_range, N=1000):
    """๋ฒ”ํ•จ์ˆ˜ J[y] = โˆซF(x, y, y')dx๋ฅผ ์ˆ˜์น˜์ ์œผ๋กœ ๊ณ„์‚ฐ"""
    a, b = x_range
    x = np.linspace(a, b, N)
    h = (b - a) / (N - 1)

    y = y_func(x)
    # ์ค‘์‹ฌ ์ฐจ๋ถ„์œผ๋กœ y' ๊ณ„์‚ฐ
    yp = np.gradient(y, x)

    # ์‚ฌ๋‹ค๋ฆฌ๊ผด ์ ๋ถ„
    integrand = F(x, y, yp)
    return np.trapz(integrand, x)

# ์˜ˆ: ํ˜ธ์˜ ๊ธธ์ด ๋ฒ”ํ•จ์ˆ˜ J[y] = โˆซโˆš(1 + y'ยฒ)dx
F_arclength = lambda x, y, yp: np.sqrt(1 + yp**2)

# ์ง์„  y = x vs ํฌ๋ฌผ์„  y = xยฒ  (๊ตฌ๊ฐ„ [0, 1])
y_line = lambda x: x
y_parabola = lambda x: x**2

J_line = evaluate_functional(F_arclength, y_line, (0, 1))
J_parab = evaluate_functional(F_arclength, y_parabola, (0, 1))

print(f"์ง์„ ์˜ ํ˜ธ์˜ ๊ธธ์ด: J[y=x]     = {J_line:.6f}")
print(f"ํฌ๋ฌผ์„ ์˜ ํ˜ธ์˜ ๊ธธ์ด: J[y=xยฒ]  = {J_parab:.6f}")
print(f"์ง์„ ์ด ๋” ์งง์Œ (์ตœ๋‹จ ๊ฒฝ๋กœ): {J_line < J_parab}")

2. ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹

2.1 ์œ ๋„

$\delta J = 0$ ์กฐ๊ฑด์— ๋ถ€๋ถ„์ ๋ถ„์„ ์ ์šฉํ•œ๋‹ค:

$$\delta J = \int_a^b \left(\frac{\partial F}{\partial y}\eta + \frac{\partial F}{\partial y'}\eta'\right) dx$$

๋‘ ๋ฒˆ์งธ ํ•ญ์„ ๋ถ€๋ถ„์ ๋ถ„ํ•˜๋ฉด:

$$\int_a^b \frac{\partial F}{\partial y'}\eta'\, dx = \left[\frac{\partial F}{\partial y'}\eta\right]_a^b - \int_a^b \frac{d}{dx}\frac{\partial F}{\partial y'}\eta\, dx$$

๊ฒฝ๊ณ„ ํ•ญ์€ $\eta(a) = \eta(b) = 0$์ด๋ฏ€๋กœ ์‚ฌ๋ผ์ง„๋‹ค. ๋”ฐ๋ผ์„œ:

$$\delta J = \int_a^b \left(\frac{\partial F}{\partial y} - \frac{d}{dx}\frac{\partial F}{\partial y'}\right)\eta\, dx = 0$$

๋ณ€๋ถ„๋ฒ•์˜ ๊ธฐ๋ณธ ๋ณด์กฐ์ •๋ฆฌ: ๋ชจ๋“  $\eta$์— ๋Œ€ํ•ด ์œ„ ์ ๋ถ„์ด 0์ด๋ฉด ํ”ผ์ ๋ถ„ํ•จ์ˆ˜๊ฐ€ 0์ด์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์ด ๋„์ถœ๋œ๋‹ค:

$$\boxed{\frac{\partial F}{\partial y} - \frac{d}{dx}\frac{\partial F}{\partial y'} = 0}$$

2.2 ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ

๊ฒฝ์šฐ 1: $F$๊ฐ€ $y$์— ์˜์กดํ•˜์ง€ ์•Š์„ ๋•Œ ($F = F(x, y')$):

$$\frac{\partial F}{\partial y'} = C \quad \text{(์ƒ์ˆ˜)}$$

๊ฒฝ์šฐ 2: $F$๊ฐ€ $x$์— ๋ช…์‹œ์ ์œผ๋กœ ์˜์กดํ•˜์ง€ ์•Š์„ ๋•Œ ($F = F(y, y')$) -- ๋ฒจํŠธ๋ผ๋ฏธ ํ•ญ๋“ฑ์‹:

$$\boxed{F - y'\frac{\partial F}{\partial y'} = C}$$

์ด๋Š” $\frac{d}{dx}\left(F - y'F_{y'}\right) = -xF_x = 0$์œผ๋กœ๋ถ€ํ„ฐ ๋„์ถœ๋œ๋‹ค.

import sympy as sp

x = sp.Symbol('x')
y = sp.Function('y')(x)
yp = y.diff(x)

def euler_lagrange(F, y_func, x_var):
    """์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์„ ์‹ฌ๋ณผ๋ฆญ์œผ๋กœ ๋„์ถœ"""
    yp = y_func.diff(x_var)
    # โˆ‚F/โˆ‚y
    dF_dy = sp.diff(F, y_func)
    # d/dx(โˆ‚F/โˆ‚y')
    dF_dyp = sp.diff(F, yp)
    d_dx_dF_dyp = sp.diff(dF_dyp, x_var)

    el_eq = sp.simplify(dF_dy - d_dx_dF_dyp)
    return sp.Eq(el_eq, 0)

# ์˜ˆ 1: ์ตœ๋‹จ ๊ฑฐ๋ฆฌ โ€” F = โˆš(1 + y'ยฒ)
F1 = sp.sqrt(1 + yp**2)
el1 = euler_lagrange(F1, y, x)
print("=== ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฌธ์ œ ===")
print(f"์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ: {el1}")
print("ํ•ด: y'' = 0  โ†’  y = ax + b (์ง์„ )")

# ์˜ˆ 2: ์ตœ์†Œ ๊ณก๋ฉด (ํšŒ์ „๋ฉด) โ€” F = yโˆš(1 + y'ยฒ)
F2 = y * sp.sqrt(1 + yp**2)
el2 = euler_lagrange(F2, y, x)
print(f"\n=== ์ตœ์†Œ ํšŒ์ „๋ฉด ===")
print(f"์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ: {el2}")
print("ํ•ด: y = cโ‚ cosh((x - cโ‚‚)/cโ‚) (ํ˜„์ˆ˜์„ )")

3. ๊ณ ์ „์  ๋ณ€๋ถ„ ๋ฌธ์ œ๋“ค

3.1 ์ตœ์† ๊ฐ•ํ•˜์„  (Brachistochrone Problem)

์ค‘๋ ฅ์žฅ์—์„œ ์  $A(0,0)$์—์„œ ์  $B(x_1, y_1)$๊นŒ์ง€ ๋งˆ์ฐฐ ์—†์ด ๋ฏธ๋„๋Ÿฌ์ง€๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋ผ. ($y$์ถ•์ด ์•„๋ž˜๋กœ ํ–ฅํ•œ๋‹ค.)

์—๋„ˆ์ง€ ๋ณด์กด์— ์˜ํ•ด ์†๋ ฅ์€ $v = \sqrt{2gy}$์ด๊ณ , ์ด๋™ ์‹œ๊ฐ„์€:

$$T[y] = \int_0^{x_1} \frac{\sqrt{1 + y'^2}}{\sqrt{2gy}}\, dx$$

$F = \sqrt{(1 + y'^2)/(2gy)}$๋Š” $x$์— ๋ช…์‹œ์ ์œผ๋กœ ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฒจํŠธ๋ผ๋ฏธ ํ•ญ๋“ฑ์‹์„ ์ ์šฉํ•œ๋‹ค:

$$F - y'F_{y'} = C \implies \frac{1}{\sqrt{2gy(1 + y'^2)}} = C$$

์ •๋ฆฌํ•˜๋ฉด $y(1 + y'^2) = \frac{1}{2gC^2} = 2R$ (์ƒ์ˆ˜). ์ด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ $\theta$๋กœ ํ’€๋ฉด ์‚ฌ์ดํด๋กœ์ด๋“œ ํ•ด๊ฐ€ ๋œ๋‹ค:

$$\boxed{x = R(\theta - \sin\theta), \quad y = R(1 - \cos\theta)}$$

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

def brachistochrone(x1, y1, N=500):
    """์ตœ์† ๊ฐ•ํ•˜์„  (์‚ฌ์ดํด๋กœ์ด๋“œ) ๊ณ„์‚ฐ"""
    def equations(params):
        R, theta1 = params
        eq1 = R * (theta1 - np.sin(theta1)) - x1
        eq2 = R * (1 - np.cos(theta1)) - y1
        return [eq1, eq2]

    R, theta1 = fsolve(equations, [1.0, np.pi])

    theta = np.linspace(0, theta1, N)
    x_cyc = R * (theta - np.sin(theta))
    y_cyc = R * (1 - np.cos(theta))
    return x_cyc, y_cyc, R, theta1

# ์‚ฌ์ดํด๋กœ์ด๋“œ vs ์ง์„  vs ํฌ๋ฌผ์„  ๋น„๊ต
x1, y1 = 1.0, 0.6
x_cyc, y_cyc, R, th1 = brachistochrone(x1, y1)

fig, ax = plt.subplots(1, 1, figsize=(8, 5))

# ์ง์„ 
ax.plot([0, x1], [0, y1], 'b--', label='์ง์„ ', linewidth=2)

# ํฌ๋ฌผ์„  (y = axยฒ)
x_par = np.linspace(0, x1, 200)
a_par = y1 / x1**2
y_par = a_par * x_par**2
ax.plot(x_par, y_par, 'g-.', label='ํฌ๋ฌผ์„ ', linewidth=2)

# ์‚ฌ์ดํด๋กœ์ด๋“œ
ax.plot(x_cyc, y_cyc, 'r-', label='์‚ฌ์ดํด๋กœ์ด๋“œ (์ตœ์†)', linewidth=2.5)

ax.set_xlabel('x')
ax.set_ylabel('y (์•„๋ž˜ ๋ฐฉํ–ฅ)')
ax.set_title('์ตœ์† ๊ฐ•ํ•˜์„  ๋ฌธ์ œ (Brachistochrone)')
ax.legend()
ax.invert_yaxis()
ax.grid(True, alpha=0.3)
ax.set_aspect('equal')
plt.tight_layout()
plt.savefig('brachistochrone.png', dpi=150)
plt.show()

# ๊ฐ ๊ฒฝ๋กœ์˜ ์ด๋™ ์‹œ๊ฐ„ ๋น„๊ต
g = 9.81
def travel_time(x_path, y_path):
    """๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ์‹œ๊ฐ„ ๊ณ„์‚ฐ"""
    ds = np.sqrt(np.diff(x_path)**2 + np.diff(y_path)**2)
    v = np.sqrt(2 * g * (y_path[:-1] + y_path[1:]) / 2)
    v = np.where(v < 1e-10, 1e-10, v)  # 0 ๋‚˜๋ˆ—์…ˆ ๋ฐฉ์ง€
    return np.sum(ds / v)

t_line = travel_time(np.linspace(0, x1, 500), np.linspace(0, y1, 500))
t_par = travel_time(x_par, y_par)
t_cyc = travel_time(x_cyc, y_cyc)

print(f"์ง์„  ์ด๋™ ์‹œ๊ฐ„:        {t_line:.4f}์ดˆ")
print(f"ํฌ๋ฌผ์„  ์ด๋™ ์‹œ๊ฐ„:      {t_par:.4f}์ดˆ")
print(f"์‚ฌ์ดํด๋กœ์ด๋“œ ์ด๋™ ์‹œ๊ฐ„: {t_cyc:.4f}์ดˆ (์ตœ์†Œ)")

3.2 ์ธก์ง€์„  (Geodesics)

ํ‰๋ฉด์—์„œ์˜ ์ธก์ง€์„ : ๋‘ ์  ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ. $F = \sqrt{1 + y'^2}$๋กœ๋ถ€ํ„ฐ $y'' = 0$, ์ฆ‰ ์ง์„ ์ด ํ•ด์ด๋‹ค.

๊ตฌ๋ฉด์—์„œ์˜ ์ธก์ง€์„ : ๊ตฌ๋ฉด ์ขŒํ‘œ $(\theta, \phi)$์—์„œ ํ˜ธ์˜ ๊ธธ์ด๋Š”:

$$L = R\int \sqrt{d\theta^2 + \sin^2\theta\, d\phi^2} = R\int_{\phi_1}^{\phi_2} \sqrt{\theta'^2 + \sin^2\theta}\, d\phi$$

์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์„ ํ’€๋ฉด ๋Œ€์›(great circle)์ด ๋œ๋‹ค.

3.3 ํ˜„์ˆ˜์„  (Catenary)

๋ฐ€๋„๊ฐ€ ๊ท ์ผํ•œ ์ฒด์ธ์ด ์–‘ ๋์ด ๊ณ ์ •๋œ ์ƒํƒœ๋กœ ๋งค๋‹ฌ๋ ค ์žˆ์„ ๋•Œ, ์œ„์น˜์—๋„ˆ์ง€๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ตฌํ•˜๋ผ:

$$U[y] = \rho g \int_{-a}^{a} y\sqrt{1 + y'^2}\, dx$$

์ฒด์ธ์˜ ๊ธธ์ด $L = \int \sqrt{1 + y'^2}\, dx$๊ฐ€ ์ผ์ •ํ•˜๋‹ค๋Š” ๊ตฌ์† ์กฐ๊ฑด ํ•˜์—์„œ, $F = y\sqrt{1 + y'^2}$์— ๋ฒจํŠธ๋ผ๋ฏธ ํ•ญ๋“ฑ์‹์„ ์ ์šฉํ•˜๋ฉด:

$$y = c_1 \cosh\left(\frac{x - c_2}{c_1}\right)$$

์ด๊ฒƒ์ด ํ˜„์ˆ˜์„ (catenary)์ด๋‹ค.

import numpy as np
import matplotlib.pyplot as plt

# ํ˜„์ˆ˜์„  ๊ทธ๋ฆฌ๊ธฐ
def catenary(x, c1, c2=0):
    """ํ˜„์ˆ˜์„ : y = cโ‚ cosh((x - cโ‚‚)/cโ‚)"""
    return c1 * np.cosh((x - c2) / c1)

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# (a) ๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ˜„์ˆ˜์„ 
x = np.linspace(-2, 2, 300)
for c in [0.5, 1.0, 1.5, 2.0]:
    axes[0].plot(x, catenary(x, c), label=f'$c_1 = {c}$')
axes[0].set_title('๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ˜„์ˆ˜์„ ')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# (b) ํ˜„์ˆ˜์„  vs ํฌ๋ฌผ์„  ๋น„๊ต
c1 = 1.0
y_cat = catenary(x, c1) - c1  # ์ตœ์ €์ ์„ 0์œผ๋กœ ์ด๋™
y_par = 0.5 * x**2            # ๋น„์Šทํ•œ ๋ชจ์–‘์˜ ํฌ๋ฌผ์„ 
axes[1].plot(x, y_cat, 'r-', linewidth=2, label='ํ˜„์ˆ˜์„ ')
axes[1].plot(x, y_par, 'b--', linewidth=2, label='ํฌ๋ฌผ์„ ')
axes[1].set_title('ํ˜„์ˆ˜์„  vs ํฌ๋ฌผ์„ ')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('catenary.png', dpi=150)
plt.show()

3.4 ๋“ฑ์ฃผ ๋ฌธ์ œ (Isoperimetric Problem)

์ฃผ์–ด์ง„ ๋‘˜๋ ˆ $L$์„ ๊ฐ€์ง„ ํ๊ณก์„  ์ค‘ ๋ฉด์ ์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ตฌํ•˜๋ผ. ํ•ด๋Š” ์›์ด๋‹ค.

๋ฉด์ : $A = \frac{1}{2}\oint (x\, dy - y\, dx)$, ๋‘˜๋ ˆ ๊ตฌ์†: $L = \oint \sqrt{dx^2 + dy^2}$

3.5 ์ตœ์†Œ ๊ณก๋ฉด (๋น„๋ˆ„๋ง‰ ๋ฌธ์ œ)

๋‘ ๋™์ถ• ์›ํ˜• ๊ณ ๋ฆฌ ์‚ฌ์ด์— ํ˜•์„ฑ๋˜๋Š” ๋น„๋ˆ„๋ง‰์˜ ์ตœ์†Œ ํšŒ์ „๋ฉด. ๋ฒ”ํ•จ์ˆ˜:

$$A[y] = 2\pi\int_a^b y\sqrt{1 + y'^2}\, dx$$

๋ฒจํŠธ๋ผ๋ฏธ ํ•ญ๋“ฑ์‹์œผ๋กœ ํ’€๋ฉด ํ˜„์ˆ˜๋ฉด(catenoid): $y = c\cosh\left(\frac{x - x_0}{c}\right)$


4. ๋‹ค๋ณ€์ˆ˜์™€ ๊ณ ์ฐจ ๋„ํ•จ์ˆ˜

4.1 ๋‹ค๋ณ€์ˆ˜ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹

์—ฌ๋Ÿฌ ์ข…์†๋ณ€์ˆ˜ $y_1(x), y_2(x), \ldots, y_n(x)$์— ๋Œ€ํ•œ ๋ฒ”ํ•จ์ˆ˜:

$$J[y_1, \ldots, y_n] = \int_a^b F(x, y_1, \ldots, y_n, y_1', \ldots, y_n')\, dx$$

๊ฐ $y_i$์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์ธ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์ด ์„ฑ๋ฆฝํ•œ๋‹ค:

$$\frac{\partial F}{\partial y_i} - \frac{d}{dx}\frac{\partial F}{\partial y_i'} = 0, \quad i = 1, 2, \ldots, n$$

4.2 ๊ณ ์ฐจ ๋„ํ•จ์ˆ˜: ์˜ค์ผ๋Ÿฌ-ํ‘ธ์•„์†ก ๋ฐฉ์ •์‹

$F$๊ฐ€ $y''$๊นŒ์ง€ ํฌํ•จํ•  ๋•Œ:

$$J[y] = \int_a^b F(x, y, y', y'')\, dx$$

์˜ค์ผ๋Ÿฌ-ํ‘ธ์•„์†ก ๋ฐฉ์ •์‹:

$$\frac{\partial F}{\partial y} - \frac{d}{dx}\frac{\partial F}{\partial y'} + \frac{d^2}{dx^2}\frac{\partial F}{\partial y''} = 0$$

๊ฒฝ๊ณ„์กฐ๊ฑด์œผ๋กœ $y$์™€ $y'$์ด ์–‘ ๋์—์„œ ๊ณ ์ •๋˜์–ด์•ผ ํ•œ๋‹ค (4๊ฐœ์˜ ๊ฒฝ๊ณ„์กฐ๊ฑด).

์˜ˆ: ํƒ„์„ฑ ๋น”์˜ ๊ตฝํž˜ ์—๋„ˆ์ง€ $J[y] = \int_0^L \frac{EI}{2}(y'')^2\, dx$์—์„œ $y'''' = 0$, ์ฆ‰ 3์ฐจ ๋‹คํ•ญ์‹์ด ํ•ด์ด๋‹ค.

4.3 ๋‹ค์ค‘ ๋…๋ฆฝ๋ณ€์ˆ˜

$u(x, y)$์— ๋Œ€ํ•œ ๋ฒ”ํ•จ์ˆ˜:

$$J[u] = \iint_D F(x, y, u, u_x, u_y)\, dx\, dy$$

์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹:

$$\frac{\partial F}{\partial u} - \frac{\partial}{\partial x}\frac{\partial F}{\partial u_x} - \frac{\partial}{\partial y}\frac{\partial F}{\partial u_y} = 0$$

์˜ˆ: ๋””๋ฆฌํด๋ ˆ ๋ฒ”ํ•จ์ˆ˜ $J[u] = \iint (u_x^2 + u_y^2)\, dx\, dy$๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด $\nabla^2 u = 0$ (๋ผํ”Œ๋ผ์Šค ๋ฐฉ์ •์‹)์ด ๋œ๋‹ค.

import sympy as sp

x = sp.Symbol('x')
y1 = sp.Function('y1')(x)
y2 = sp.Function('y2')(x)

# 2๋ณ€์ˆ˜ ๋ผ๊ทธ๋ž‘์ง€์•ˆ ์˜ˆ: ๊ฒฐํ•ฉ ์ง„๋™์ž
# L = ยฝm(แบโ‚ยฒ + แบโ‚‚ยฒ) - ยฝk(yโ‚ยฒ + yโ‚‚ยฒ) - ยฝk'(yโ‚ - yโ‚‚)ยฒ
m, k, kp = sp.symbols('m k k_prime', positive=True)
y1p, y2p = y1.diff(x), y2.diff(x)

T = sp.Rational(1, 2) * m * (y1p**2 + y2p**2)
V = sp.Rational(1, 2) * k * (y1**2 + y2**2) + sp.Rational(1, 2) * kp * (y1 - y2)**2
L = T - V

# ๊ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ
for yi, name in [(y1, 'yโ‚'), (y2, 'yโ‚‚')]:
    yip = yi.diff(x)
    dL_dyi = sp.diff(L, yi)
    dL_dyip = sp.diff(L, yip)
    d_dx = sp.diff(dL_dyip, x)
    eq = sp.simplify(dL_dyi - d_dx)
    print(f"E-L for {name}: {eq} = 0")

5. ๊ตฌ์† ์กฐ๊ฑด์ด ์žˆ๋Š” ๋ณ€๋ถ„ ๋ฌธ์ œ

5.1 ๋“ฑ์ฃผ ๊ตฌ์† (Isoperimetric Constraints)

๋ฒ”ํ•จ์ˆ˜ $J[y] = \int_a^b F(x, y, y')\, dx$๋ฅผ ๋‹ค์Œ ๊ตฌ์† ์กฐ๊ฑด ํ•˜์—์„œ ๊ทน๊ฐ’ํ™”ํ•˜๋ผ:

$$K[y] = \int_a^b G(x, y, y')\, dx = \ell \quad \text{(์ฃผ์–ด์ง„ ์ƒ์ˆ˜)}$$

๋ผ๊ทธ๋ž‘์ฃผ ์Šน์ˆ˜๋ฒ•: ๋ณด์กฐ ๋ฒ”ํ•จ์ˆ˜ $\bar{J} = J + \lambda K$๋ฅผ ์ •์˜ํ•˜๊ณ , $\bar{F} = F + \lambda G$์— ๋Œ€ํ•ด ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์„ ์ ์šฉํ•œ๋‹ค:

$$\frac{\partial \bar{F}}{\partial y} - \frac{d}{dx}\frac{\partial \bar{F}}{\partial y'} = 0$$

๋ฏธ์ง€์ˆ˜ $\lambda$๋Š” ๊ตฌ์† ์กฐ๊ฑด $K = \ell$๋กœ ๊ฒฐ์ •๋œ๋‹ค.

5.2 ํ™€๋กœ๋…ธ๋ฏน ๊ตฌ์† (Holonomic Constraints)

$g(x, y_1, y_2) = 0$ ํ˜•ํƒœ์˜ ๋Œ€์ˆ˜์  ๊ตฌ์†:

$$\frac{\partial F}{\partial y_i} - \frac{d}{dx}\frac{\partial F}{\partial y_i'} + \lambda(x)\frac{\partial g}{\partial y_i} = 0$$

์—ฌ๊ธฐ์„œ $\lambda(x)$๋Š” ์ ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ์Šน์ˆ˜ ํ•จ์ˆ˜์ด๋‹ค.

5.3 ๊ตฌ์† ๋ณ€๋ถ„ ๋ฌธ์ œ ์˜ˆ: ์ตœ๋Œ€ ๋ฉด์  ๊ณก์„ 

๊ธธ์ด $L$์ด ์ฃผ์–ด์ง„ ๊ณก์„  ์•„๋ž˜์˜ ๋ฉด์ ์„ ์ตœ๋Œ€ํ™”ํ•˜๋ผ:

$$J[y] = \int_0^a y\, dx, \quad K[y] = \int_0^a \sqrt{1 + y'^2}\, dx = L$$

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

def isoperimetric_circle(a, L):
    """๋“ฑ์ฃผ ๋ฌธ์ œ: ๊ธธ์ด L, ๊ตฌ๊ฐ„ [0, a]์—์„œ ์ตœ๋Œ€ ๋ฉด์  ๊ณก์„  (์›ํ˜ธ)"""
    # ์›ํ˜ธ: ๋ฐ˜์ง€๋ฆ„ R, ์ค‘์‹ฌ (a/2, y_c)
    # L = 2Rยทarcsin(a/(2R))๋กœ๋ถ€ํ„ฐ R ๊ฒฐ์ •
    def eq(R):
        if R < a / 2:
            return 1e10
        return 2 * R * np.arcsin(a / (2 * R)) - L

    R = fsolve(eq, L / np.pi)[0]

    theta = np.linspace(-np.arcsin(a / (2 * R)), np.arcsin(a / (2 * R)), 300)
    x_arc = R * np.sin(theta) + a / 2
    y_arc = R * np.cos(theta) - R * np.cos(np.arcsin(a / (2 * R)))

    return x_arc, y_arc, R

# ๊ตฌ๊ฐ„ ๊ธธ์ด 2, ๊ณก์„  ๊ธธ์ด ฯ€
a, L = 2.0, np.pi
x_arc, y_arc, R = isoperimetric_circle(a, L)

fig, ax = plt.subplots(figsize=(7, 5))
ax.plot(x_arc, y_arc, 'r-', linewidth=2, label=f'์›ํ˜ธ (R={R:.3f})')
ax.fill_between(x_arc, 0, y_arc, alpha=0.2, color='red')
ax.axhline(y=0, color='k', linewidth=0.5)
ax.set_title('๋“ฑ์ฃผ ๋ฌธ์ œ: ์ฃผ์–ด์ง„ ๊ธธ์ด์—์„œ ์ตœ๋Œ€ ๋ฉด์ ')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
ax.grid(True, alpha=0.3)
ax.set_aspect('equal')
plt.tight_layout()
plt.savefig('isoperimetric.png', dpi=150)
plt.show()

6. ๋ผ๊ทธ๋ž‘์ฃผ ์—ญํ•™

6.1 ์ตœ์†Œ์ž‘์šฉ ์›๋ฆฌ

ํ•ด๋ฐ€ํ„ด์˜ ์›๋ฆฌ: ์—ญํ•™๊ณ„์˜ ์‹ค์ œ ์šด๋™ ๊ฒฝ๋กœ๋Š” ์ž‘์šฉ(action)์„ ์ •๋ฅ˜(stationarize)ํ•˜๋Š” ๊ฒฝ๋กœ์ด๋‹ค.

$$S[q] = \int_{t_1}^{t_2} L(q, \dot{q}, t)\, dt, \quad \delta S = 0$$

๋ผ๊ทธ๋ž‘์ง€์•ˆ: $L = T - V$ (์šด๋™์—๋„ˆ์ง€ - ์œ„์น˜์—๋„ˆ์ง€)

์ผ๋ฐ˜ํ™” ์ขŒํ‘œ(generalized coordinates) $q_i$: ๊ณ„์˜ ์ž์œ ๋„๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋…๋ฆฝ ๋ณ€์ˆ˜. ๊ตฌ์† ์กฐ๊ฑด์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ฐ ์ผ๋ฐ˜ํ™” ์ขŒํ‘œ์— ๋Œ€ํ•œ ๋ผ๊ทธ๋ž‘์ฃผ ์šด๋™๋ฐฉ์ •์‹:

$$\frac{d}{dt}\frac{\partial L}{\partial \dot{q}_i} - \frac{\partial L}{\partial q_i} = 0, \quad i = 1, 2, \ldots, n$$

6.2 ๋‹จ์ง„์ž

์ผ๋ฐ˜ํ™” ์ขŒํ‘œ: ๊ฐ๋„ $\theta$

$$T = \frac{1}{2}ml^2\dot{\theta}^2, \quad V = -mgl\cos\theta$$

$$L = \frac{1}{2}ml^2\dot{\theta}^2 + mgl\cos\theta$$

์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹: $ml^2\ddot{\theta} + mgl\sin\theta = 0$, ์ฆ‰ $\ddot{\theta} + \frac{g}{l}\sin\theta = 0$

import sympy as sp

t = sp.Symbol('t')
m, l, g = sp.symbols('m l g', positive=True)
theta = sp.Function('theta')(t)
theta_dot = theta.diff(t)

# ๋ผ๊ทธ๋ž‘์ง€์•ˆ
T = sp.Rational(1, 2) * m * l**2 * theta_dot**2
V = -m * g * l * sp.cos(theta)
Lag = T - V

# ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹ ๋„์ถœ
dL_dtheta = sp.diff(Lag, theta)
dL_dthetadot = sp.diff(Lag, theta_dot)
d_dt = sp.diff(dL_dthetadot, t)

eq = sp.simplify(d_dt - dL_dtheta)
print("=== ๋‹จ์ง„์ž ์šด๋™๋ฐฉ์ •์‹ ===")
print(f"  {eq} = 0")
# ์ •๋ฆฌ: mlยฒฮธฬˆ + mglยทsin(ฮธ) = 0

6.3 ์ด์ค‘ ์ง„์ž

์ผ๋ฐ˜ํ™” ์ขŒํ‘œ: $\theta_1, \theta_2$

$$x_1 = l_1\sin\theta_1, \quad y_1 = -l_1\cos\theta_1$$

$$x_2 = l_1\sin\theta_1 + l_2\sin\theta_2, \quad y_2 = -l_1\cos\theta_1 - l_2\cos\theta_2$$

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

def double_pendulum_eom(t, state, m1, m2, l1, l2, g=9.81):
    """์ด์ค‘ ์ง„์ž์˜ ์šด๋™๋ฐฉ์ •์‹ (๋ผ๊ทธ๋ž‘์ฃผ ์—ญํ•™์œผ๋กœ ์œ ๋„)
    state = [theta1, theta2, omega1, omega2]
    """
    th1, th2, w1, w2 = state
    dth = th1 - th2
    cos_d, sin_d = np.cos(dth), np.sin(dth)
    M = m1 + m2

    # ์งˆ๋Ÿ‰ ํ–‰๋ ฌ์˜ ์—ญ์„ ์ด์šฉํ•œ ๊ฐ๊ฐ€์†๋„ ๊ณ„์‚ฐ
    den = M * l1 - m2 * l1 * cos_d**2

    alpha1 = (-m2 * l2 * w2**2 * sin_d
              - m2 * g * np.sin(th2) * cos_d
              + M * g * np.sin(th1)) / (-den)

    den2 = (l2 / l1) * den

    alpha2 = (M * l1 * w1**2 * sin_d
              + M * g * np.sin(th1) * cos_d
              - M * g * np.sin(th2)) / den2

    return [w1, w2, alpha1, alpha2]

# ์‹œ๋ฎฌ๋ ˆ์ด์…˜
m1, m2, l1, l2 = 1.0, 1.0, 1.0, 1.0
state0 = [np.pi / 2, np.pi / 2, 0, 0]  # ์ดˆ๊ธฐ ๊ฐ๋„ 90ยฐ, ๊ฐ์†๋„ 0
t_span = (0, 20)
t_eval = np.linspace(*t_span, 2000)

sol = solve_ivp(double_pendulum_eom, t_span, state0, t_eval=t_eval,
                args=(m1, m2, l1, l2), method='RK45', rtol=1e-10)

# ๋ฐ์นด๋ฅดํŠธ ์ขŒํ‘œ ๋ณ€ํ™˜
x1 = l1 * np.sin(sol.y[0])
y1_pos = -l1 * np.cos(sol.y[0])
x2 = x1 + l2 * np.sin(sol.y[1])
y2_pos = y1_pos - l2 * np.cos(sol.y[1])

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

# ๋์  ๊ถค์ 
axes[0].plot(x2, y2_pos, 'b-', linewidth=0.3, alpha=0.7)
axes[0].set_title('์ด์ค‘ ์ง„์ž: ๋์  ๊ถค์ ')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[0].set_aspect('equal')
axes[0].grid(True, alpha=0.3)

# ๊ฐ๋„ ์‹œ๊ฐ„ ๊ทธ๋ž˜ํ”„
axes[1].plot(sol.t, sol.y[0], label=r'$\theta_1$')
axes[1].plot(sol.t, sol.y[1], label=r'$\theta_2$')
axes[1].set_title('์ด์ค‘ ์ง„์ž: ๊ฐ๋„ vs ์‹œ๊ฐ„')
axes[1].set_xlabel('์‹œ๊ฐ„ (s)')
axes[1].set_ylabel('๊ฐ๋„ (rad)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('double_pendulum.png', dpi=150)
plt.show()

6.4 ์ค‘์‹ฌ๋ ฅ ๋ฌธ์ œ

์ผ๋ฐ˜ํ™” ์ขŒํ‘œ: $(r, \theta)$ (๊ทน์ขŒํ‘œ)

$$L = \frac{1}{2}m(\dot{r}^2 + r^2\dot{\theta}^2) - V(r)$$

$\theta$๊ฐ€ ์ˆœํ™˜ ์ขŒํ‘œ($L$์ด $\theta$์— ๋ช…์‹œ์ ์œผ๋กœ ์˜์กดํ•˜์ง€ ์•Š์Œ)์ด๋ฏ€๋กœ:

$$p_\theta = \frac{\partial L}{\partial \dot{\theta}} = mr^2\dot{\theta} = \text{const} \quad \text{(๊ฐ์šด๋™๋Ÿ‰ ๋ณด์กด)}$$

6.5 ์• ํŠธ์šฐ๋“œ ๊ธฐ๊ณ„ (Atwood Machine)

๋‘ ์งˆ๋Ÿ‰ $m_1, m_2$๊ฐ€ ๋„๋ฅด๋ž˜์— ์ค„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ์ผ๋ฐ˜ํ™” ์ขŒํ‘œ: $x$ (ํ•œ ์ชฝ ์งˆ๋Ÿ‰์˜ ๋ณ€์œ„).

$$T = \frac{1}{2}(m_1 + m_2)\dot{x}^2, \quad V = -(m_1 - m_2)gx$$

$$L = \frac{1}{2}(m_1 + m_2)\dot{x}^2 + (m_1 - m_2)gx$$

์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹: $(m_1 + m_2)\ddot{x} = (m_1 - m_2)g$, ์ฆ‰ $\ddot{x} = \frac{m_1 - m_2}{m_1 + m_2}g$

6.6 ๋‡Œํ„ฐ ์ •๋ฆฌ (Noether's Theorem)

๋ผ๊ทธ๋ž‘์ง€์•ˆ์ด ์–ด๋–ค ์—ฐ์† ๋ณ€ํ™˜์— ๋Œ€ํ•ด ๋ถˆ๋ณ€์ด๋ฉด, ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ๋ณด์กด๋Ÿ‰์ด ์กด์žฌํ•œ๋‹ค:

๋Œ€์นญ (๋ณ€ํ™˜) ๋ณด์กด๋Ÿ‰
์‹œ๊ฐ„ ๋ณ‘์ง„ ($t \to t + \epsilon$) ์—๋„ˆ์ง€
๊ณต๊ฐ„ ๋ณ‘์ง„ ($x \to x + \epsilon$) ์šด๋™๋Ÿ‰
ํšŒ์ „ ($\theta \to \theta + \epsilon$) ๊ฐ์šด๋™๋Ÿ‰

7. ํ•ด๋ฐ€ํ„ด ์—ญํ•™ ๊ธฐ์ดˆ

7.1 ๋ฅด์žฅ๋“œ๋ฅด ๋ณ€ํ™˜

๋ผ๊ทธ๋ž‘์ง€์•ˆ $L(q, \dot{q}, t)$์—์„œ ํ•ด๋ฐ€ํ† ๋‹ˆ์•ˆ $H(q, p, t)$์œผ๋กœ์˜ ๋ณ€ํ™˜:

์ผ๋ฐ˜ํ™” ์šด๋™๋Ÿ‰: $p_i = \frac{\partial L}{\partial \dot{q}_i}$

$$\boxed{H(q, p, t) = \sum_i p_i \dot{q}_i - L(q, \dot{q}, t)}$$

์—ฌ๊ธฐ์„œ $\dot{q}_i$๋Š” $p_i = \partial L / \partial \dot{q}_i$๋ฅผ ์—ญ์œผ๋กœ ํ’€์–ด $q, p$๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

๋ณด์กด๊ณ„(์‹œ๊ฐ„ ๋…๋ฆฝ)์—์„œ $H = T + V$ (์ „์ฒด ์—๋„ˆ์ง€)์ด๋‹ค.

7.2 ํ•ด๋ฐ€ํ„ด์˜ ์ •์ค€ ๋ฐฉ์ •์‹

$$\boxed{\dot{q}_i = \frac{\partial H}{\partial p_i}, \quad \dot{p}_i = -\frac{\partial H}{\partial q_i}}$$

๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์ด $n$๊ฐœ์˜ 2์ฐจ ODE์ธ ๋ฐ˜๋ฉด, ํ•ด๋ฐ€ํ„ด ๋ฐฉ์ •์‹์€ $2n$๊ฐœ์˜ 1์ฐจ ODE์ด๋‹ค.

7.3 ์œ„์ƒ ๊ณต๊ฐ„๊ณผ ํ‘ธ์•„์†ก ๊ด„ํ˜ธ

์œ„์ƒ ๊ณต๊ฐ„(phase space): $(q_1, \ldots, q_n, p_1, \ldots, p_n)$๋กœ ์ด๋ฃจ์–ด์ง„ $2n$์ฐจ์› ๊ณต๊ฐ„.

ํ‘ธ์•„์†ก ๊ด„ํ˜ธ:

$$\{A, B\} = \sum_i \left(\frac{\partial A}{\partial q_i}\frac{\partial B}{\partial p_i} - \frac{\partial A}{\partial p_i}\frac{\partial B}{\partial q_i}\right)$$

์‹œ๊ฐ„ ๋ฐœ์ „: $\dot{A} = \{A, H\} + \frac{\partial A}{\partial t}$. ๋ณด์กด๋Ÿ‰์ด๋ฉด $\{A, H\} = 0$.

7.4 ์–‘์ž์—ญํ•™๊ณผ์˜ ์—ฐ๊ฒฐ

์–‘์ž์—ญํ•™์—์„œ ํ‘ธ์•„์†ก ๊ด„ํ˜ธ๋Š” ๊ตํ™˜์ž๋กœ ๋Œ€์ฒด๋œ๋‹ค:

$$\{A, B\}_{\text{Poisson}} \to \frac{1}{i\hbar}[\hat{A}, \hat{B}]$$

์ •์ค€ ๊ตํ™˜ ๊ด€๊ณ„ $\{q, p\} = 1$์€ ์–‘์ž์—ญํ•™์˜ $[\hat{q}, \hat{p}] = i\hbar$์— ๋Œ€์‘ํ•œ๋‹ค. ์ด๊ฒƒ์ด ์ •์ค€ ์–‘์žํ™”(canonical quantization)์˜ ์ถœ๋ฐœ์ ์ด๋‹ค.

import sympy as sp
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

# === ์‹ฌ๋ณผ๋ฆญ: 1์ฐจ์› ์กฐํ™”์ง„๋™์ž์˜ ํ•ด๋ฐ€ํ„ด ์—ญํ•™ ===
t = sp.Symbol('t')
m_sym, k_sym = sp.symbols('m k', positive=True)
q_sym = sp.Function('q')(t)
p_sym = sp.Function('p')(t)

# ํ•ด๋ฐ€ํ† ๋‹ˆ์•ˆ: H = pยฒ/(2m) + kqยฒ/2
H = p_sym**2 / (2 * m_sym) + k_sym * q_sym**2 / 2

# ํ•ด๋ฐ€ํ„ด์˜ ์ •์ค€ ๋ฐฉ์ •์‹
q_dot = sp.diff(H, p_sym)      # dq/dt = โˆ‚H/โˆ‚p = p/m
p_dot = -sp.diff(H, q_sym)     # dp/dt = -โˆ‚H/โˆ‚q = -kq

print("=== ์กฐํ™”์ง„๋™์ž ํ•ด๋ฐ€ํ„ด ๋ฐฉ์ •์‹ ===")
print(f"  dq/dt = {q_dot}")
print(f"  dp/dt = {p_dot}")

# === ์ˆ˜์น˜ ํ•ด: ์œ„์ƒ ๊ณต๊ฐ„ ๊ถค์  ===
def harmonic_hamiltonian(t, state, m=1.0, k=1.0):
    q, p = state
    dqdt = p / m       # โˆ‚H/โˆ‚p
    dpdt = -k * q      # -โˆ‚H/โˆ‚q
    return [dqdt, dpdt]

# ์—ฌ๋Ÿฌ ์ดˆ๊ธฐ ์กฐ๊ฑด์œผ๋กœ ์œ„์ƒ ๊ณต๊ฐ„ ๊ถค์ 
fig, ax = plt.subplots(figsize=(7, 7))
for E0 in [0.5, 1.0, 2.0, 4.0]:
    q0 = np.sqrt(2 * E0)  # p0 = 0์ผ ๋•Œ ์ตœ๋Œ€ ๋ณ€์œ„
    sol = solve_ivp(harmonic_hamiltonian, (0, 10), [q0, 0],
                    t_eval=np.linspace(0, 10, 1000))
    ax.plot(sol.y[0], sol.y[1], label=f'E = {E0}')

ax.set_xlabel('q (์œ„์น˜)')
ax.set_ylabel('p (์šด๋™๋Ÿ‰)')
ax.set_title('์กฐํ™”์ง„๋™์ž ์œ„์ƒ ๊ณต๊ฐ„')
ax.legend()
ax.grid(True, alpha=0.3)
ax.set_aspect('equal')
plt.tight_layout()
plt.savefig('phase_space.png', dpi=150)
plt.show()

8. ๋ณ€๋ถ„๋ฒ•์˜ ํ˜„๋Œ€์  ์‘์šฉ

8.1 ํŽ˜๋ฅด๋งˆ ์›๋ฆฌ (๊ด‘ํ•™)

๋น›์€ ๋‘ ์  ์‚ฌ์ด๋ฅผ ๊ด‘ํ•™ ๊ฒฝ๋กœ ๊ธธ์ด๊ฐ€ ์ •๋ฅ˜(stationary)์ธ ๊ฒฝ๋กœ๋กœ ์ง„ํ–‰ํ•œ๋‹ค:

$$\delta \int_A^B n(x, y)\, ds = 0$$

์—ฌ๊ธฐ์„œ $n$์€ ๊ตด์ ˆ๋ฅ . ์ด๋กœ๋ถ€ํ„ฐ ์Šค๋„ฌ์˜ ๋ฒ•์น™์ด ๋„์ถœ๋œ๋‹ค:

$$n_1 \sin\theta_1 = n_2 \sin\theta_2$$

import numpy as np
import matplotlib.pyplot as plt

def snell_law_demo():
    """ํŽ˜๋ฅด๋งˆ ์›๋ฆฌ์™€ ์Šค๋„ฌ์˜ ๋ฒ•์น™ ์‹œ๊ฐํ™”"""
    n1, n2 = 1.0, 1.5  # ๊ตด์ ˆ๋ฅ  (๊ณต๊ธฐ โ†’ ์œ ๋ฆฌ)
    y_source, y_target = 2.0, -2.0
    x_source, x_target = -1.0, 1.5

    # ๊ฒฝ๊ณ„๋ฉด์—์„œ์˜ ์ž…์‚ฌ์  x๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋ฉฐ ๊ด‘ํ•™ ๊ฒฝ๋กœ ๊ธธ์ด ๊ณ„์‚ฐ
    x_boundary = np.linspace(-2, 3, 1000)
    optical_path = []
    for xb in x_boundary:
        d1 = np.sqrt((xb - x_source)**2 + y_source**2)
        d2 = np.sqrt((x_target - xb)**2 + y_target**2)
        opl = n1 * d1 + n2 * d2
        optical_path.append(opl)

    optical_path = np.array(optical_path)
    x_opt = x_boundary[np.argmin(optical_path)]

    fig, axes = plt.subplots(1, 2, figsize=(13, 5))

    # (a) ๊ด‘ํ•™ ๊ฒฝ๋กœ ๊ธธ์ด vs ์ž…์‚ฌ์ 
    axes[0].plot(x_boundary, optical_path, 'b-')
    axes[0].axvline(x_opt, color='r', linestyle='--', label=f'์ตœ์†Œ์  x={x_opt:.3f}')
    axes[0].set_xlabel('๊ฒฝ๊ณ„๋ฉด ์ž…์‚ฌ์  x')
    axes[0].set_ylabel('๊ด‘ํ•™ ๊ฒฝ๋กœ ๊ธธ์ด')
    axes[0].set_title('ํŽ˜๋ฅด๋งˆ ์›๋ฆฌ: ๊ด‘ํ•™ ๊ฒฝ๋กœ ๊ธธ์ด ์ตœ์†Œํ™”')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)

    # (b) ๋น›์˜ ๊ฒฝ๋กœ
    axes[1].fill_between([-3, 4], 0, 3, alpha=0.1, color='blue', label=f'๋งค์งˆ 1 (n={n1})')
    axes[1].fill_between([-3, 4], -3, 0, alpha=0.1, color='orange', label=f'๋งค์งˆ 2 (n={n2})')
    axes[1].plot([x_source, x_opt], [y_source, 0], 'r-', linewidth=2)
    axes[1].plot([x_opt, x_target], [0, y_target], 'r-', linewidth=2)
    axes[1].axhline(y=0, color='k', linewidth=1)
    axes[1].plot(x_source, y_source, 'ko', markersize=8)
    axes[1].plot(x_target, y_target, 'ko', markersize=8)
    axes[1].set_title('์Šค๋„ฌ์˜ ๋ฒ•์น™ (ํŽ˜๋ฅด๋งˆ ์›๋ฆฌ)')
    axes[1].set_xlabel('x')
    axes[1].set_ylabel('y')
    axes[1].legend()
    axes[1].grid(True, alpha=0.3)
    axes[1].set_aspect('equal')

    plt.tight_layout()
    plt.savefig('fermat_snell.png', dpi=150)
    plt.show()

    # ์Šค๋„ฌ์˜ ๋ฒ•์น™ ๊ฒ€์ฆ
    theta1 = np.arctan2(abs(x_opt - x_source), y_source)
    theta2 = np.arctan2(abs(x_target - x_opt), abs(y_target))
    print(f"์ž…์‚ฌ๊ฐ: {np.degrees(theta1):.2f}ยฐ, ๊ตด์ ˆ๊ฐ: {np.degrees(theta2):.2f}ยฐ")
    print(f"nโ‚ sin ฮธโ‚ = {n1 * np.sin(theta1):.4f}")
    print(f"nโ‚‚ sin ฮธโ‚‚ = {n2 * np.sin(theta2):.4f}")

snell_law_demo()

8.2 ๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ  ๋ฐฉ๋ฒ• (Rayleigh-Ritz Method)

๋ณ€๋ถ„ ๋ฌธ์ œ์˜ ๊ทผ์‚ฌํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ์ง์ ‘๋ฒ•(direct method). ํ•ด๋ฅผ ๊ธฐ์ €ํ•จ์ˆ˜์˜ ์„ ํ˜• ๊ฒฐํ•ฉ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค:

$$y(x) \approx \sum_{i=1}^{N} c_i \phi_i(x)$$

๋ฒ”ํ•จ์ˆ˜๋ฅผ $c_i$์˜ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ณ , $\partial J / \partial c_i = 0$์„ ํ’€์–ด ๊ณ„์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

import numpy as np
import matplotlib.pyplot as plt

def rayleigh_ritz_beam(N_basis=5, L_beam=1.0, q0=1.0, EI=1.0):
    """
    ๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ ๋ฒ•์œผ๋กœ ๋‹จ์ˆœ ์ง€์ง€ ๋ณด์˜ ์ฒ˜์ง ๊ณ„์‚ฐ
    ๋ฒ”ํ•จ์ˆ˜: J[y] = โˆซ[EI/2ยท(y'')ยฒ - qโ‚€ยทy]dx
    ๊ฒฝ๊ณ„์กฐ๊ฑด: y(0) = y(L) = 0, y''(0) = y''(L) = 0
    ๊ธฐ์ €ํ•จ์ˆ˜: ฯ†โ‚™(x) = sin(nฯ€x/L)
    """
    x = np.linspace(0, L_beam, 500)

    # ์ •ํ™•ํ•ด: y = qโ‚€/(24EI) ยท x(Lยณ - 2Lxยฒ + xยณ)
    y_exact = q0 / (24 * EI) * x * (L_beam**3 - 2 * L_beam * x**2 + x**3)

    # ๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ  ๊ทผ์‚ฌ
    y_approx = np.zeros_like(x)
    coefficients = []

    for n in range(1, N_basis + 1):
        kn = n * np.pi / L_beam
        # ๊ฐ•์„ฑ ํ–‰๋ ฌ ๋Œ€๊ฐ ์„ฑ๋ถ„
        K_nn = EI * kn**4 * L_beam / 2
        # ํ•˜์ค‘ ๋ฒกํ„ฐ: ํ™€์ˆ˜ n๋งŒ ๊ธฐ์—ฌ
        if n % 2 == 1:
            f_n = 2 * q0 * L_beam / (n * np.pi)
        else:
            f_n = 0
        c_n = f_n / K_nn
        coefficients.append(c_n)
        y_approx += c_n * np.sin(n * np.pi * x / L_beam)

    # ๊ทธ๋ž˜ํ”„
    fig, axes = plt.subplots(1, 2, figsize=(13, 5))

    # ์ฒ˜์ง ๋น„๊ต
    axes[0].plot(x, y_exact, 'r-', linewidth=2, label='์ •ํ™•ํ•ด')
    axes[0].plot(x, y_approx, 'b--', linewidth=2, label=f'R-R ({N_basis}ํ•ญ)')
    axes[0].set_title('๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ ๋ฒ•: ๋ณด์˜ ์ฒ˜์ง')
    axes[0].set_xlabel('x')
    axes[0].set_ylabel('y(x)')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)

    # ์ˆ˜๋ ด ๋ถ„์„
    errors = []
    N_range = range(1, 20)
    for N in N_range:
        y_rr = np.zeros_like(x)
        for n in range(1, N + 1):
            kn = n * np.pi / L_beam
            K_nn = EI * kn**4 * L_beam / 2
            f_n = 2 * q0 * L_beam / (n * np.pi) if n % 2 == 1 else 0
            y_rr += (f_n / K_nn) * np.sin(n * np.pi * x / L_beam)
        err = np.max(np.abs(y_rr - y_exact))
        errors.append(err)

    axes[1].semilogy(list(N_range), errors, 'ko-')
    axes[1].set_title('๊ธฐ์ €ํ•จ์ˆ˜ ์ˆ˜์— ๋”ฐ๋ฅธ ์˜ค์ฐจ ์ˆ˜๋ ด')
    axes[1].set_xlabel('๊ธฐ์ €ํ•จ์ˆ˜ ์ˆ˜ N')
    axes[1].set_ylabel('์ตœ๋Œ€ ์˜ค์ฐจ')
    axes[1].grid(True, alpha=0.3)

    plt.tight_layout()
    plt.savefig('rayleigh_ritz.png', dpi=150)
    plt.show()

    return coefficients

coeffs = rayleigh_ritz_beam(N_basis=7)
print("๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ  ๊ณ„์ˆ˜:", [f"{c:.6e}" for c in coeffs])

8.3 ์ตœ์  ์ œ์–ด ์ด๋ก  (๊ฐœ์š”)

๋ฌธ์ œ: ์ƒํƒœ $\mathbf{x}(t)$์™€ ์ œ์–ด $\mathbf{u}(t)$์— ๋Œ€ํ•ด ๋น„์šฉ ๋ฒ”ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™”:

$$J = \int_{t_0}^{t_f} L(\mathbf{x}, \mathbf{u}, t)\, dt$$

๊ตฌ์†: $\dot{\mathbf{x}} = \mathbf{f}(\mathbf{x}, \mathbf{u}, t)$ (์ƒํƒœ ๋ฐฉ์ •์‹)

ํฐํŠธ๋žด๊ธด์˜ ์ตœ๋Œ€ ์›๋ฆฌ: ํ•ด๋ฐ€ํ† ๋‹ˆ์•ˆ $H = L + \boldsymbol{\lambda}^T \mathbf{f}$๋ฅผ ์ •์˜ํ•˜๊ณ , $H$๋ฅผ $\mathbf{u}$์— ๋Œ€ํ•ด ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์  ์ œ์–ด์ด๋‹ค.

8.4 ์œ ํ•œ์š”์†Œ๋ฒ•๊ณผ์˜ ์—ฐ๊ฒฐ

๋ณ€๋ถ„ ๋ฌธ์ œ์˜ ์•ฝํ˜•(weak form)์€ ์œ ํ•œ์š”์†Œ๋ฒ•(FEM)์˜ ์ถœ๋ฐœ์ ์ด๋‹ค. ๋””๋ฆฌํด๋ ˆ ๋ฌธ์ œ:

$$\text{์ตœ์†Œํ™”: } J[u] = \frac{1}{2}\int_\Omega |\nabla u|^2\, d\Omega - \int_\Omega fu\, d\Omega$$

์˜ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์€ $-\nabla^2 u = f$ (ํฌ์•„์†ก ๋ฐฉ์ •์‹)์ด๋‹ค. FEM์€ ์ด ๋ณ€๋ถ„ ๋ฌธ์ œ๋ฅผ ์œ ํ•œ ์ฐจ์› ๊ธฐ์ €ํ•จ์ˆ˜๋กœ ์ด์‚ฐํ™”ํ•˜์—ฌ ๊ทผ์‚ฌ ํ•ด๋ฅผ ๊ตฌํ•œ๋‹ค.


์—ฐ์Šต ๋ฌธ์ œ

๊ธฐ์ดˆ ๋ฌธ์ œ

  1. ๋‹ค์Œ ๋ฒ”ํ•จ์ˆ˜์˜ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์„ ๊ตฌํ•˜๋ผ:
  2. (a) $J[y] = \int_0^1 (y'^2 + 2yy')\, dx$, $y(0)=0$, $y(1)=1$
  3. (b) $J[y] = \int_0^{\pi} (y'^2 - y^2)\, dx$, $y(0)=0$, $y(\pi)=0$
  4. (c) $J[y] = \int_1^2 \frac{\sqrt{1 + y'^2}}{x}\, dx$

  5. ๋ฒจํŠธ๋ผ๋ฏธ ํ•ญ๋“ฑ์‹์„ ์ด์šฉํ•˜์—ฌ $J[y] = \int_0^1 (y'^2 + y^2)\, dx$์˜ ๊ทน๊ฐ’ ๊ณก์„ ์„ ๊ตฌํ•˜๋ผ. ($y(0)=0$, $y(1)=1$)

  6. ํ˜ธ์˜ ๊ธธ์ด $L$์ด ์ฃผ์–ด์ง„ ๋‘ ์  $(0, 0)$, $(a, 0)$์„ ์ž‡๋Š” ๊ณก์„  ์ค‘ $x$์ถ•๊ณผ์˜ ๋ฉด์ ์ด ์ตœ๋Œ€์ธ ๊ณก์„ ์„ ๊ตฌํ•˜๋ผ.

์ค‘๊ธ‰ ๋ฌธ์ œ

  1. ๊ตฌ๋ฉด ์œ„์˜ ์ธก์ง€์„ ์ด ๋Œ€์›์ž„์„ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์œผ๋กœ ์ฆ๋ช…ํ•˜๋ผ. (ํžŒํŠธ: $\phi$๋ฅผ ๋…๋ฆฝ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ)

  2. ์ตœ์† ๊ฐ•ํ•˜์„ : ์  $(0, 0)$์—์„œ $(1, 1)$๊นŒ์ง€์˜ ์‚ฌ์ดํด๋กœ์ด๋“œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ตฌํ•˜๊ณ , ์ด๋™ ์‹œ๊ฐ„์„ ์ง์„  ๊ฒฝ๋กœ์™€ ๋น„๊ตํ•˜๋ผ.

  3. ์ด์ค‘ ์ง„์ž์˜ ๋ผ๊ทธ๋ž‘์ง€์•ˆ์„ ๊ตฌํ•˜๊ณ , $\theta_1$, $\theta_2$์— ๋Œ€ํ•œ ์šด๋™๋ฐฉ์ •์‹์„ ์œ ๋„ํ•˜๋ผ.

  4. 1์ฐจ์› ์กฐํ™”์ง„๋™์ž $L = \frac{1}{2}m\dot{x}^2 - \frac{1}{2}kx^2$์— ๋Œ€ํ•ด:

  5. (a) ๋ผ๊ทธ๋ž‘์ฃผ ์šด๋™๋ฐฉ์ •์‹์„ ๊ตฌํ•˜๋ผ
  6. (b) ํ•ด๋ฐ€ํ† ๋‹ˆ์•ˆ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ผ
  7. (c) ํ•ด๋ฐ€ํ„ด์˜ ์ •์ค€ ๋ฐฉ์ •์‹์ด (a)์˜ ๊ฒฐ๊ณผ์™€ ์ผ์น˜ํ•จ์„ ๋ณด์—ฌ๋ผ

์‹ฌํ™” ๋ฌธ์ œ

  1. ํƒ„์„ฑ ๋น”: ์บ”ํ‹ธ๋ ˆ๋ฒ„ ๋น”์˜ ๊ตฝํž˜์„ $J[y] = \int_0^L \left[\frac{EI}{2}(y'')^2 - qy\right] dx$๋กœ ๋ชจ๋ธ๋งํ•˜๋ผ. ๊ฒฝ๊ณ„์กฐ๊ฑด $y(0) = y'(0) = 0$, $y''(L) = y'''(L) = 0$์—์„œ ํ•ด๋ฅผ ๊ตฌํ•˜๋ผ.

  2. ์ „๊ธฐ์žฅ์˜ ๋ณ€๋ถ„ ์›๋ฆฌ: ์ „ํ•˜ ๋ถ„ํฌ $\rho(\mathbf{r})$๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ”ํ•จ์ˆ˜ $J[\phi] = \int \left[\frac{\epsilon_0}{2}|\nabla\phi|^2 + \rho\phi\right] d^3r$์˜ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹์ด ํฌ์•„์†ก ๋ฐฉ์ •์‹์ž„์„ ๋ณด์—ฌ๋ผ.

  3. ๋ ˆ์ผ๋ฆฌ-๋ฆฌ์ธ ๋ฒ•์œผ๋กœ $y'' + y = 1$ ($y(0) = y(\pi) = 0$)์˜ ๊ทผ์‚ฌํ•ด๋ฅผ $y \approx c_1\sin x + c_2\sin 2x + c_3\sin 3x$๋กœ ๊ตฌํ•˜๊ณ , ์ •ํ™•ํ•ด์™€ ๋น„๊ตํ•˜๋ผ.


์‹ฌํ™” ํ•™์Šต

์ œ2๋ณ€๋ถ„๊ณผ ์ถฉ๋ถ„ ์กฐ๊ฑด

์ œ1๋ณ€๋ถ„ $\delta J = 0$์€ ํ•„์š” ์กฐ๊ฑด์ด๋‹ค. ์‹ค์ œ๋กœ ๊ทน์†Œ์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ์ œ2๋ณ€๋ถ„์„ ์กฐ์‚ฌํ•œ๋‹ค:

$$\delta^2 J = \int_a^b \left(P\eta^2 + Q\eta'^2\right) dx$$

์—ฌ๊ธฐ์„œ $P = F_{yy} - \frac{d}{dx}F_{yy'}$, $Q = F_{y'y'}$. $\delta^2 J > 0$์ด๋ฉด ๊ทน์†Œ, $\delta^2 J < 0$์ด๋ฉด ๊ทน๋Œ€.

๋ฅด์žฅ๋“œ๋ฅด ์กฐ๊ฑด: $F_{y'y'} > 0$์ด๋ฉด ์•ฝํ•œ ๊ทน์†Œ์˜ ํ•„์š” ์กฐ๊ฑด.

์•ผ์ฝ”๋น„ ์กฐ๊ฑด: ์•ผ์ฝ”๋น„ ๋ฐฉ์ •์‹ $(Q\eta')' - P\eta = 0$์˜ ํ•ด๊ฐ€ ๊ตฌ๊ฐ„ $(a, b)$์—์„œ ์˜์ ์„ ๊ฐ–์ง€ ์•Š์œผ๋ฉด ๊ฐ•ํ•œ ๊ทน์†Œ์˜ ์ถฉ๋ถ„ ์กฐ๊ฑด.

์ง์ ‘๋ฒ•

  • ๋ฆฌ์ธ ๋ฒ• (Ritz method): ๋ฒ”ํ•จ์ˆ˜๋ฅผ ์œ ํ•œ ์ฐจ์› ๋ถ€๋ถ„๊ณต๊ฐ„์—์„œ ์ตœ์†Œํ™”
  • ๊ฐˆ๋ ˆ๋ฅดํ‚จ๋ฒ• (Galerkin method): ์ž”์ฐจ(residual)๋ฅผ ์‹œํ—˜ํ•จ์ˆ˜์™€ ์ง๊ตํ•˜๊ฒŒ ์„ค์ •
  • ์œ ํ•œ์š”์†Œ๋ฒ• (FEM): ๊ตฌ๊ฐ„๋ณ„(piecewise) ๊ธฐ์ €ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์ธ /๊ฐˆ๋ ˆ๋ฅดํ‚จ๋ฒ•

๋ณ€๋ถ„ ๋ถ€๋“ฑ์‹

๊ตฌ์† $y(x) \geq \psi(x)$ (์žฅ์• ๋ฌผ ๋ฌธ์ œ) ๋“ฑ, ๋“ฑํ˜ธ๊ฐ€ ์•„๋‹Œ ๋ถ€๋“ฑํ˜ธ ์กฐ๊ฑด์ด ์žˆ๋Š” ๋ฌธ์ œ. ์ž์œ  ๊ฒฝ๊ณ„ ๋ฌธ์ œ์™€ ๋ฐ€์ ‘ํžˆ ๊ด€๋ จ๋œ๋‹ค.

์ฐธ๊ณ  ๋ฌธํ—Œ

  1. Boas, M. L. Mathematical Methods in the Physical Sciences, 3rd ed., Ch. 9
  2. Gelfand, I. M. & Fomin, S. V. Calculus of Variations (Dover) -- ๋ณ€๋ถ„๋ฒ•์˜ ๊ณ ์ „์  ๊ต๊ณผ์„œ
  3. Goldstein, Poole, Safko Classical Mechanics, 3rd ed. -- ๋ผ๊ทธ๋ž‘์ฃผ/ํ•ด๋ฐ€ํ„ด ์—ญํ•™
  4. Lanczos, C. The Variational Principles of Mechanics (Dover) -- ๋ณ€๋ถ„ ์›๋ฆฌ์˜ ๋ฌผ๋ฆฌํ•™์  ํ•ด์„
  5. Arfken, Weber Mathematical Methods for Physicists, 7th ed., Ch. 22

ํ•ต์‹ฌ ๊ณต์‹ ์š”์•ฝ

๊ณต์‹ ์„ค๋ช…
$\frac{\partial F}{\partial y} - \frac{d}{dx}\frac{\partial F}{\partial y'} = 0$ ์˜ค์ผ๋Ÿฌ-๋ผ๊ทธ๋ž‘์ฃผ ๋ฐฉ์ •์‹
$F - y'F_{y'} = C$ ๋ฒจํŠธ๋ผ๋ฏธ ํ•ญ๋“ฑ์‹ ($F$๊ฐ€ $x$์— ๋ฌด๊ด€)
$F_{y'} = C$ $F$๊ฐ€ $y$์— ๋ฌด๊ด€ํ•œ ๊ฒฝ์šฐ
$\frac{d}{dt}\frac{\partial L}{\partial \dot{q}} - \frac{\partial L}{\partial q} = 0$ ๋ผ๊ทธ๋ž‘์ฃผ ์šด๋™๋ฐฉ์ •์‹
$H = \sum p_i\dot{q}_i - L$ ํ•ด๋ฐ€ํ† ๋‹ˆ์•ˆ ์ •์˜
$\dot{q} = \partial H/\partial p$, $\dot{p} = -\partial H/\partial q$ ํ•ด๋ฐ€ํ„ด ์ •์ค€ ๋ฐฉ์ •์‹
$x = R(\theta - \sin\theta)$, $y = R(1-\cos\theta)$ ์‚ฌ์ดํด๋กœ์ด๋“œ (์ตœ์† ๊ฐ•ํ•˜์„ )

์ด์ „: 16. ๊ทธ๋ฆฐ ํ•จ์ˆ˜ ๋‹ค์Œ: 18. ํ…์„œ ํ•ด์„

to navigate between lessons