05. ๋ฒกํฐ ํด์ (Vector Analysis)
05. ๋ฒกํฐ ํด์ (Vector Analysis)¶
ํ์ต ๋ชฉํ¶
- ๊ธฐ์ธ๊ธฐ(gradient), ๋ฐ์ฐ(divergence), ํ์ (curl) ์ฐ์ฐ์์ ๋ฌผ๋ฆฌ์ ์๋ฏธ๋ฅผ ์ดํดํ๊ณ ๊ณ์ฐํ ์ ์๋ค
- ์ ์ ๋ถ๊ณผ ๋ฉด์ ๋ถ์ ์ํํ๊ณ , ๋ณด์กด์ฅ(conservative field)์ ํ๋ณ ์กฐ๊ฑด์ ์ค๋ช ํ ์ ์๋ค
- ๊ทธ๋ฆฐ ์ ๋ฆฌ, ์คํ ํฌ์ค ์ ๋ฆฌ, ๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ๋ฅผ ์์ ํ๊ณ ์ ์ฉํ ์ ์๋ค
- ๋งฅ์ค์ฐ ๋ฐฉ์ ์์ ์ ๋ถ ํํ์ ๋ฏธ๋ถ ํํ๋ก ์ํธ ๋ณํํ ์ ์๋ค
- Python(SymPy, Matplotlib)์ ์ด์ฉํ์ฌ ๋ฒกํฐ์ฅ์ ์๊ฐํํ๊ณ , ์ ์ ๋ถ/๋ฉด์ ๋ถ์ ์์น์ ์ผ๋ก ๊ณ์ฐํ ์ ์๋ค
1. ๋ฒกํฐ ๋ฏธ๋ถ ์ฐ์ฐ์¶
๋ฒกํฐ ๋ฏธ๋ถ ์ฐ์ฐ์๋ ์ค์นผ๋ผ์ฅ(scalar field)๊ณผ ๋ฒกํฐ์ฅ(vector field)์ ๊ณต๊ฐ์ ๋ณํ๋ฅผ ๊ธฐ์ ํ๋ ํต์ฌ ๋๊ตฌ์ด๋ค. 3์ฐจ์ ์ง๊ต ์ขํ๊ณ์์ ๋๋ธ๋ผ(nabla) ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋๋ค:
$$ \nabla = \hat{x}\frac{\partial}{\partial x} + \hat{y}\frac{\partial}{\partial y} + \hat{z}\frac{\partial}{\partial z} $$
1.1 ๊ธฐ์ธ๊ธฐ (Gradient, nabla f)¶
์ค์นผ๋ผ์ฅ $f(x, y, z)$์ ๊ธฐ์ธ๊ธฐ(gradient)๋ $f$๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ ๋ฐฉํฅ๊ณผ ๊ทธ ๋ณํ์จ์ ๋ํ๋ด๋ ๋ฒกํฐ์ฅ์ด๋ค.
$$ \nabla f = \frac{\partial f}{\partial x}\hat{x} + \frac{\partial f}{\partial y}\hat{y} + \frac{\partial f}{\partial z}\hat{z} $$
๋ฌผ๋ฆฌ์ ์๋ฏธ: - ๋ฐฉํฅ: $f$๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ ๋ฐฉํฅ - ํฌ๊ธฐ: ๊ทธ ๋ฐฉํฅ์ผ๋ก์ ๋ณํ์จ (directional derivative์ ์ต๋๊ฐ) - ๋ฑ์๋ฉด(level surface)์ ํญ์ ์์ง
์์: ์จ๋ ๋ถํฌ $T(x, y) = x^2 + y^2$ (2D ์ด์)
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
from sympy.vector import CoordSys3D
# === SymPy๋ฅผ ์ด์ฉํ ํด์์ gradient ๊ณ์ฐ ===
N = CoordSys3D('N')
x, y, z = sp.symbols('x y z')
# ์ค์นผ๋ผ์ฅ ์ ์
f = x**2 + y**2
# gradient ๊ณ์ฐ
grad_f = sp.diff(f, x)*N.i + sp.diff(f, y)*N.j
print(f"f = {f}")
print(f"โf = {grad_f}") # 2*x*N.i + 2*y*N.j
# === Matplotlib๋ฅผ ์ด์ฉํ ์๊ฐํ ===
X, Y = np.meshgrid(np.linspace(-3, 3, 30), np.linspace(-3, 3, 30))
T = X**2 + Y**2 # ์จ๋ ๋ถํฌ
# gradient ์ฑ๋ถ
dTdx = 2 * X
dTdy = 2 * Y
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# ๋ฑ๊ณ ์ + gradient ๋ฒกํฐ
ax = axes[0]
contour = ax.contourf(X, Y, T, levels=20, cmap='hot')
ax.quiver(X[::3, ::3], Y[::3, ::3], dTdx[::3, ::3], dTdy[::3, ::3],
color='cyan', alpha=0.8)
plt.colorbar(contour, ax=ax, label='T(x,y)')
ax.set_title('์จ๋ ๋ถํฌ์ gradient ๋ฒกํฐ')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
# gradient ํฌ๊ธฐ
ax = axes[1]
grad_mag = np.sqrt(dTdx**2 + dTdy**2)
im = ax.pcolormesh(X, Y, grad_mag, cmap='viridis', shading='auto')
plt.colorbar(im, ax=ax, label='|โT|')
ax.set_title('gradient ํฌ๊ธฐ (๋ณํ์จ)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
plt.tight_layout()
plt.savefig('gradient_visualization.png', dpi=150, bbox_inches='tight')
plt.show()
1.2 ๋ฐ์ฐ (Divergence, nabla . F)¶
๋ฒกํฐ์ฅ $\mathbf{F} = F_x\hat{x} + F_y\hat{y} + F_z\hat{z}$์ ๋ฐ์ฐ(divergence)์ ๊ฐ ์ ์์ ๋ฒกํฐ์ฅ์ด "ํผ์ ธ๋๊ฐ๋ ์ ๋"๋ฅผ ๋ํ๋ด๋ ์ค์นผ๋ผ๋์ด๋ค.
$$ \nabla \cdot \mathbf{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} $$
๋ฌผ๋ฆฌ์ ์๋ฏธ: - $\nabla \cdot \mathbf{F} > 0$: ํด๋น ์ ์ ์์ฒ(source) โ ๋ฒกํฐ์ฅ์ด ํผ์ ธ๋๊ฐ - $\nabla \cdot \mathbf{F} < 0$: ํด๋น ์ ์ ํก์์(sink) โ ๋ฒกํฐ์ฅ์ด ๋ชจ์ฌ๋ฆ - $\nabla \cdot \mathbf{F} = 0$: ๋น์์ถ(solenoidal) โ ์์ฑ๋ ์๋ฉธ๋ ์์
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
x, y = sp.symbols('x y')
# ์์ฒ์ด ์๋ ๋ฒกํฐ์ฅ: F = (x, y) โ ์์ ์์ ํผ์ ธ๋๊ฐ
Fx_expr = x
Fy_expr = y
div_F = sp.diff(Fx_expr, x) + sp.diff(Fy_expr, y)
print(f"F = ({Fx_expr})xฬ + ({Fy_expr})ลท")
print(f"โยทF = {div_F}") # 2 (ํญ์ ์์ โ ๋ชจ๋ ์ ์ด source)
# ๋น์์ถ ๋ฒกํฐ์ฅ: G = (-y, x) โ ํ์ ๋ง ํ๋ ์ฅ
Gx_expr = -y
Gy_expr = x
div_G = sp.diff(Gx_expr, x) + sp.diff(Gy_expr, y)
print(f"\nG = ({Gx_expr})xฬ + ({Gy_expr})ลท")
print(f"โยทG = {div_G}") # 0 (๋น์์ถ)
# ์๊ฐํ
X, Y = np.meshgrid(np.linspace(-2, 2, 15), np.linspace(-2, 2, 15))
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# F = (x, y): divergence > 0 (source field)
ax = axes[0]
ax.quiver(X, Y, X, Y, color='red', alpha=0.7)
ax.set_title(f'F = (x, y), โยทF = {div_F} (์์ฒ์ฅ)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
# G = (-y, x): divergence = 0 (solenoidal)
ax = axes[1]
ax.quiver(X, Y, -Y, X, color='blue', alpha=0.7)
ax.set_title(f'G = (-y, x), โยทG = {div_G} (๋น์์ถ์ฅ)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('divergence_comparison.png', dpi=150, bbox_inches='tight')
plt.show()
1.3 ํ์ (Curl, nabla x F)¶
๋ฒกํฐ์ฅ $\mathbf{F}$์ ํ์ (curl)์ ๊ฐ ์ ์์ ๋ฒกํฐ์ฅ์ด "ํ์ ํ๋ ์ ๋์ ํ์ ์ถ"์ ๋ํ๋ด๋ ๋ฒกํฐ์ฅ์ด๋ค.
$$ \nabla \times \mathbf{F} = \begin{vmatrix} \hat{x} & \hat{y} & \hat{z} \\ \frac{\partial}{\partial x} & \frac{\partial}{\partial y} & \frac{\partial}{\partial z} \\ F_x & F_y & F_z \end{vmatrix} $$
์ ๊ฐํ๋ฉด:
$$ \nabla \times \mathbf{F} = \left(\frac{\partial F_z}{\partial y} - \frac{\partial F_y}{\partial z}\right)\hat{x} + \left(\frac{\partial F_x}{\partial z} - \frac{\partial F_z}{\partial x}\right)\hat{y} + \left(\frac{\partial F_y}{\partial x} - \frac{\partial F_x}{\partial y}\right)\hat{z} $$
๋ฌผ๋ฆฌ์ ์๋ฏธ: - ๋ฐฉํฅ: ์ค๋ฅธ์ ๋ฒ์น์ ๋ฐ๋ฅธ ํ์ ์ถ - ํฌ๊ธฐ: ํ์ ์ ์ธ๊ธฐ (๋จ์ ๋ฉด์ ๋น ์ํ) - $\nabla \times \mathbf{F} = \mathbf{0}$์ด๋ฉด ๋นํ์ ์ฅ(irrotational field) โ ๋ณด์กด์ฅ์ ํ์์ถฉ๋ถ์กฐ๊ฑด (๋จ์์ฐ๊ฒฐ ์์ญ์์)
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
x, y, z = sp.symbols('x y z')
# 3D ๋ฒกํฐ์ฅ: F = (-y, x, 0) โ z์ถ ๋๋ ํ์
Fx, Fy, Fz = -y, x, sp.Integer(0)
# curl ๊ณ์ฐ
curl_x = sp.diff(Fz, y) - sp.diff(Fy, z)
curl_y = sp.diff(Fx, z) - sp.diff(Fz, x)
curl_z = sp.diff(Fy, x) - sp.diff(Fx, y)
print(f"F = ({Fx})xฬ + ({Fy})ลท + ({Fz})แบ")
print(f"โรF = ({curl_x})xฬ + ({curl_y})ลท + ({curl_z})แบ")
# ๊ฒฐ๊ณผ: (0)xฬ + (0)ลท + (2)แบ โ z ๋ฐฉํฅ์ผ๋ก ๊ท ์ผํ ํ์
# 2D streamplot์ผ๋ก ์๊ฐํ
X, Y = np.meshgrid(np.linspace(-3, 3, 30), np.linspace(-3, 3, 30))
U = -Y # Fx = -y
V = X # Fy = x
speed = np.sqrt(U**2 + V**2)
fig, ax = plt.subplots(figsize=(8, 8))
strm = ax.streamplot(X, Y, U, V, color=speed, cmap='coolwarm',
density=1.5, linewidth=1.5, arrowsize=1.5)
plt.colorbar(strm.lines, ax=ax, label='|F|')
ax.set_title('F = (-y, x): โรF = 2แบ (๊ท ์ผํ ํ์ ์ฅ)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('curl_streamplot.png', dpi=150, bbox_inches='tight')
plt.show()
1.4 ๋ผํ๋ผ์์ (nabla^2)¶
์ค์นผ๋ผ ๋ผํ๋ผ์์์ ๊ธฐ์ธ๊ธฐ์ ๋ฐ์ฐ์ผ๋ก ์ ์๋๋ค:
$$ \nabla^2 f = \nabla \cdot (\nabla f) = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} $$
๋ฒกํฐ ๋ผํ๋ผ์์์ ๊ฐ ์ฑ๋ถ์ ์ค์นผ๋ผ ๋ผํ๋ผ์์์ ์ ์ฉํ๋ค:
$$ \nabla^2 \mathbf{F} = (\nabla^2 F_x)\hat{x} + (\nabla^2 F_y)\hat{y} + (\nabla^2 F_z)\hat{z} $$
๋ฌผ๋ฆฌ์ ์๋ฏธ: - ํ ์ ์์์ ๊ฐ๊ณผ ๊ทธ ์ฃผ๋ณ ํ๊ท ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ํ๋ - $\nabla^2 f > 0$: ์ฃผ๋ณ ํ๊ท ์ด ํ์ฌ ๊ฐ๋ณด๋ค ํผ (๊ทน์ ๊ฒฝํฅ) - $\nabla^2 f = 0$: ์กฐํํจ์(harmonic function) โ ๋ผํ๋ผ์ค ๋ฐฉ์ ์์ ํด
import sympy as sp
x, y, z = sp.symbols('x y z')
# ์กฐํํจ์์ธ์ง ํ์ธ: f = 1/r (r = sqrt(x^2 + y^2 + z^2))
r = sp.sqrt(x**2 + y**2 + z**2)
f = 1 / r
laplacian_f = sp.diff(f, x, 2) + sp.diff(f, y, 2) + sp.diff(f, z, 2)
laplacian_f_simplified = sp.simplify(laplacian_f)
print(f"f = 1/r")
print(f"โยฒf = {laplacian_f_simplified}") # 0 (r โ 0์์ ์กฐํํจ์)
# ๋น์กฐํํจ์ ์์: g = x^2 + y^2
g = x**2 + y**2
laplacian_g = sp.diff(g, x, 2) + sp.diff(g, y, 2)
print(f"\ng = {g}")
print(f"โยฒg = {laplacian_g}") # 4 (๋น์กฐํ)
1.5 ๋ฒกํฐ ํญ๋ฑ์¶
๋ฒกํฐ ํด์์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ค์ํ ํญ๋ฑ์๋ค:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ํต์ฌ ๋ฒกํฐ ํญ๋ฑ์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. โร(โf) = 0 gradient์ curl์ ํญ์ 0 โ
โ โ ๋ณด์กด์ฅ์ ํญ์ ๋นํ์ โ
โ โ
โ 2. โยท(โรF) = 0 curl์ divergence๋ ํญ์ 0 โ
โ โ ์๊ธฐ์ฅ์ ํญ์ ๋น๋ฐ์ฐ (โยทB = 0) โ
โ โ
โ 3. โร(โรF) = โ(โยทF) - โยฒF โ
โ โ curl of curl ๋ถํด (์ ์๊ธฐํ ๋ฐฉ์ ์ ์ ๋์ ์ฌ์ฉ) โ
โ โ
โ 4. โยท(fF) = f(โยทF) + Fยท(โf) ๊ณฑ์ ๋ฐ์ฐ โ
โ 5. โร(fF) = f(โรF) + (โf)รF ๊ณฑ์ ํ์ โ
โ 6. โ(FยทG) = (Fยทโ)G + (Gยทโ)F + Fร(โรG) + Gร(โรF) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
import sympy as sp
from sympy.vector import CoordSys3D, curl, divergence, gradient
N = CoordSys3D('N')
x, y, z = N.x, N.y, N.z
# ํญ๋ฑ์ 1 ๊ฒ์ฆ: curl(grad(f)) = 0
f = x**2 * y + y**2 * z + z**2 * x
grad_f = gradient(f, N)
curl_grad_f = curl(grad_f, N)
print(f"f = {f}")
print(f"โf = {grad_f}")
print(f"โร(โf) = {curl_grad_f}") # 0
# ํญ๋ฑ์ 2 ๊ฒ์ฆ: div(curl(F)) = 0
F = (x*y*z)*N.i + (x**2 - z)*N.j + (y*z**2)*N.k
curl_F = curl(F, N)
div_curl_F = divergence(curl_F, N)
print(f"\nF = {F}")
print(f"โรF = {curl_F}")
print(f"โยท(โรF) = {sp.simplify(div_curl_F)}") # 0
2. ์ ์ ๋ถ (Line Integrals)¶
์ ์ ๋ถ์ ๊ณก์ ์ ๋ฐ๋ผ ์ค์นผ๋ผ์ฅ์ด๋ ๋ฒกํฐ์ฅ์ ์ ๋ถํ๋ ๊ฒ์ผ๋ก, ์ผ(work), ์ํ(circulation), ๊ฒฝ๋ก ๊ธธ์ด ๋ฑ์ ๋ฌผ๋ฆฌ๋์ ๊ณ์ฐํ๋ค.
2.1 ์ค์นผ๋ผ์ฅ์ ์ ์ ๋ถ¶
์ค์นผ๋ผ์ฅ $f$๋ฅผ ๊ณก์ $C: \mathbf{r}(t) = (x(t), y(t), z(t))$, $a \leq t \leq b$ ๋ฅผ ๋ฐ๋ผ ์ ๋ถ:
$$ \int_C f \, ds = \int_a^b f(\mathbf{r}(t)) \left|\frac{d\mathbf{r}}{dt}\right| dt $$
์ฌ๊ธฐ์ $ds = |\mathbf{r}'(t)| \, dt$๋ ํธ ๊ธธ์ด ์์(arc length element)์ด๋ค.
์์ฉ: ๋ฐ๋๊ฐ ๋ณํ๋ ๊ณก์ ์ฒ ์ฌ์ ์ง๋, ๊ณก์ ์ ๊ธธ์ด
import numpy as np
import sympy as sp
t = sp.Symbol('t')
# ์์ : ๋์ ๊ฒฝ๋ก r(t) = (cos t, sin t, t), 0 <= t <= 2pi ์์์
# f = x^2 + y^2 + z^2 ์ ์ ์ ๋ถ
x_t = sp.cos(t)
y_t = sp.sin(t)
z_t = t
f = x_t**2 + y_t**2 + z_t**2 # cosยฒt + sinยฒt + tยฒ = 1 + tยฒ
# dr/dt ๊ณ์ฐ
dx = sp.diff(x_t, t)
dy = sp.diff(y_t, t)
dz = sp.diff(z_t, t)
ds_dt = sp.sqrt(dx**2 + dy**2 + dz**2)
ds_dt_simplified = sp.simplify(ds_dt)
print(f"|dr/dt| = {ds_dt_simplified}") # sqrt(2)
# ์ ์ ๋ถ ๊ณ์ฐ
integrand = f * ds_dt_simplified
result = sp.integrate(integrand, (t, 0, 2*sp.pi))
print(f"โซ_C f ds = {sp.simplify(result)}")
print(f"์์น๊ฐ = {float(result):.4f}")
2.2 ๋ฒกํฐ์ฅ์ ์ ์ ๋ถ (์ผ)¶
๋ฒกํฐ์ฅ $\mathbf{F}$๋ฅผ ๊ณก์ $C$๋ฅผ ๋ฐ๋ผ ์ ๋ถํ๋ฉด ์ผ(work)์ ์ป๋๋ค:
$$ W = \int_C \mathbf{F} \cdot d\mathbf{r} = \int_a^b \mathbf{F}(\mathbf{r}(t)) \cdot \mathbf{r}'(t) \, dt $$
์ฑ๋ถ์ผ๋ก ์ ๊ฐํ๋ฉด:
$$ W = \int_C F_x \, dx + F_y \, dy + F_z \, dz $$
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
t = sp.Symbol('t')
# ๋ฒกํฐ์ฅ F = (y, -x) ์์ ์ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฅธ ์ผ(work) ๊ณ์ฐ
# ๊ฒฝ๋ก: r(t) = (cos t, sin t), 0 <= t <= 2pi
# ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์ํ
x_t = sp.cos(t)
y_t = sp.sin(t)
# ๋ฒกํฐ์ฅ ์ฑ๋ถ (๊ฒฝ๋ก ์)
Fx = y_t # F_x = y = sin t
Fy = -x_t # F_y = -x = -cos t
# dr/dt
dx_dt = sp.diff(x_t, t) # -sin t
dy_dt = sp.diff(y_t, t) # cos t
# F ยท dr/dt
integrand = Fx * dx_dt + Fy * dy_dt
integrand_simplified = sp.simplify(integrand)
print(f"Fยทdr/dt = {integrand_simplified}") # -1
# ์ผ(work) ๊ณ์ฐ
W = sp.integrate(integrand, (t, 0, 2*sp.pi))
print(f"W = โฎ Fยทdr = {W}") # -2*pi (์์: ์ฅ์ด ๊ฒฝ๋ก์ ๋ฐ๋ ๋ฐฉํฅ)
# ์๊ฐํ: ๋ฒกํฐ์ฅ๊ณผ ๊ฒฝ๋ก
theta = np.linspace(0, 2*np.pi, 100)
X, Y = np.meshgrid(np.linspace(-1.5, 1.5, 12), np.linspace(-1.5, 1.5, 12))
fig, ax = plt.subplots(figsize=(8, 8))
ax.quiver(X, Y, Y, -X, color='steelblue', alpha=0.6, label='F = (y, -x)')
ax.plot(np.cos(theta), np.sin(theta), 'r-', linewidth=2, label='๊ฒฝ๋ก C')
ax.annotate('', xy=(0.7, 0.7), xytext=(0.71, 0.69),
arrowprops=dict(arrowstyle='->', color='red', lw=2))
ax.set_title(f'โฎ Fยทdr = {W} (์๊ณ ๋ฐฉํฅ ์ํ)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('line_integral_work.png', dpi=150, bbox_inches='tight')
plt.show()
2.3 ๋ณด์กด์ฅ๊ณผ ํผํ ์ ํจ์¶
๋ฒกํฐ์ฅ $\mathbf{F}$๊ฐ ๋ณด์กด์ฅ(conservative field)์ด๋ฉด, ์ ์ ๋ถ์ ๊ฐ์ ๊ฒฝ๋ก์ ๋ฌด๊ดํ๊ณ ์ ๋์ ์๋ง ์์กดํ๋ค.
$$ \mathbf{F} = \nabla \phi \quad \Longleftrightarrow \quad \int_A^B \mathbf{F} \cdot d\mathbf{r} = \phi(B) - \phi(A) $$
๋ณด์กด์ฅ์ ๋์น ์กฐ๊ฑด (๋จ์์ฐ๊ฒฐ ์์ญ):
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ค์ ์กฐ๊ฑด๋ค์ ๋ชจ๋ ๋์น์ด๋ค (๋จ์์ฐ๊ฒฐ ์์ญ์์): โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ (1) F = โฯ ์ธ ํผํ
์
ํจ์ ฯ๊ฐ ์กด์ฌ โ
โ (2) โฎ_C Fยทdr = 0 (์์์ ๋ซํ ๊ฒฝ๋ก์ ๋ํด) โ
โ (3) โซ_A^B Fยทdr ์ ๊ฒฝ๋ก์ ๋ฌด๊ด โ
โ (4) โรF = 0 โ
โ (5) F_x dx + F_y dy + F_z dz ๊ฐ ์์ ๋ฏธ๋ถ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
import sympy as sp
from sympy.vector import CoordSys3D, curl
N = CoordSys3D('N')
x, y, z = N.x, N.y, N.z
# === ๋ณด์กด์ฅ ํ๋ณ ์์ ===
# F1 = (2xy + z)xฬ + (xยฒ + 2yz)ลท + (x + yยฒ)แบ
F1 = (2*x*y + z)*N.i + (x**2 + 2*y*z)*N.j + (x + y**2)*N.k
curl_F1 = curl(F1, N)
print(f"F1 = {F1}")
print(f"โรF1 = {curl_F1}") # 0 โ ๋ณด์กด์ฅ!
# ํผํ
์
ํจ์ ๊ตฌํ๊ธฐ: โฯ/โx = 2xy + z
phi_x = sp.Symbol('phi')
phi = sp.integrate(2*x*y + z, x) # xยฒy + xz + g(y,z)
print(f"\nโซ (2xy+z)dx = {phi} + g(y,z)")
# g(y,z) ๊ฒฐ์ : โฯ/โy = xยฒ + โg/โy = xยฒ + 2yz โ โg/โy = 2yz
g = sp.integrate(2*y*z, y) # yยฒz + h(z)
print(f"โซ 2yz dy = {g} + h(z)")
# h(z) ๊ฒฐ์ : โฯ/โz = x + yยฒ + h'(z) = x + yยฒ โ h'(z) = 0 โ h = C
phi_total = x**2 * y + x*z + y**2 * z
print(f"\nฯ(x,y,z) = {phi_total}")
# ๊ฒ์ฆ: โฯ = F1?
from sympy.vector import gradient
grad_phi = gradient(phi_total, N)
print(f"โฯ = {grad_phi}")
print(f"F1 = โฯ? {sp.simplify(grad_phi - F1) == N.zero}")
# === ๋น๋ณด์กด์ฅ ์์ ===
# F2 = (y)xฬ + (x + z)ลท + (y + 1)แบ โ curl โ 0 ํ์ธ
F2 = y*N.i + (x + z)*N.j + (y + 1)*N.k
curl_F2 = curl(F2, N)
print(f"\nF2 = {F2}")
print(f"โรF2 = {curl_F2}") # ๋น๋ณด์กด์ฅ ์ฌ๋ถ ํ์ธ
3. ๋ฉด์ ๋ถ (Surface Integrals)¶
3.1 ๋ฉด์ ์์์ ๋ฒ์ ๋ฒกํฐ¶
๊ณก๋ฉด $S$๊ฐ ๋งค๊ฐ๋ณ์ $(u, v)$๋ก ํํ๋ ๋: $\mathbf{r}(u, v) = (x(u,v),\, y(u,v),\, z(u,v))$
๋ฉด์ ์์(surface element):
$$ d\mathbf{S} = \left(\frac{\partial \mathbf{r}}{\partial u} \times \frac{\partial \mathbf{r}}{\partial v}\right) du \, dv = \hat{n} \, dA $$
์ฌ๊ธฐ์ $\hat{n}$์ ๋จ์ ๋ฒ์ ๋ฒกํฐ, $dA = |d\mathbf{S}|$๋ ๋ฉด์ ์์์ ํฌ๊ธฐ์ด๋ค.
$z = g(x, y)$๋ก ์ฃผ์ด์ง ๊ณก๋ฉด์ ๊ฒฝ์ฐ:
$$ d\mathbf{S} = \left(-\frac{\partial g}{\partial x}\hat{x} - \frac{\partial g}{\partial y}\hat{y} + \hat{z}\right) dx \, dy $$
3.2 ์ค์นผ๋ผ์ฅ์ ๋ฉด์ ๋ถ¶
$$ \iint_S f \, dA = \iint_D f(\mathbf{r}(u,v)) \left|\frac{\partial \mathbf{r}}{\partial u} \times \frac{\partial \mathbf{r}}{\partial v}\right| du \, dv $$
์์ฉ: ๊ณก๋ฉด์ ๋์ด ($f = 1$), ๊ณก๋ฉด ์ ๋ฌผ๋ฆฌ๋์ ์ดํฉ
import numpy as np
import sympy as sp
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# ๊ตฌ๋ฉด r = 1 ์ ๋ฉด์ ๊ณ์ฐ (๊ตฌ๋ฉด์ขํ)
theta, phi = sp.symbols('theta phi')
# ๊ตฌ๋ฉด ๋งค๊ฐ๋ณ์ํ: r(ฮธ, ฯ) = (sinฮธ cosฯ, sinฮธ sinฯ, cosฮธ)
r_theta = sp.Matrix([sp.cos(phi)*sp.cos(theta), # โr/โฮธ
sp.sin(phi)*sp.cos(theta),
-sp.sin(theta)])
r_phi = sp.Matrix([-sp.sin(phi)*sp.sin(theta), # โr/โฯ
sp.cos(phi)*sp.sin(theta),
0])
# ์ธ์ : โr/โฮธ ร โr/โฯ
cross = r_theta.cross(r_phi)
dA = sp.simplify(cross.norm())
print(f"|โr/โฮธ ร โr/โฯ| = {dA}") # sin(theta) (ฮธ โ [0, ฯ]์์ ์์)
# ๋ฉด์ ์ ๋ถ
area = sp.integrate(sp.sin(theta), (phi, 0, 2*sp.pi), (theta, 0, sp.pi))
print(f"๊ตฌ์ ๋ฉด์ = {area}") # 4*pi
# 3D ์๊ฐํ
u = np.linspace(0, np.pi, 40)
v = np.linspace(0, 2*np.pi, 40)
U, V = np.meshgrid(u, v)
X = np.sin(U) * np.cos(V)
Y = np.sin(U) * np.sin(V)
Z = np.cos(U)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, alpha=0.6, cmap='viridis')
# ๋ฒ์ ๋ฒกํฐ ํ์ (์ผ๋ถ ์ ์์)
step = 8
for i in range(0, len(u), step):
for j in range(0, len(v), step):
px, py, pz = X[j, i], Y[j, i], Z[j, i]
ax.quiver(px, py, pz, px*0.3, py*0.3, pz*0.3,
color='red', arrow_length_ratio=0.3)
ax.set_title('๋จ์ ๊ตฌ๋ฉด๊ณผ ๋ฒ์ ๋ฒกํฐ')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.tight_layout()
plt.savefig('sphere_normal_vectors.png', dpi=150, bbox_inches='tight')
plt.show()
3.3 ๋ฒกํฐ์ฅ์ ๋ฉด์ ๋ถ (ํ๋ญ์ค)¶
๋ฒกํฐ์ฅ $\mathbf{F}$๊ฐ ๊ณก๋ฉด $S$๋ฅผ ํต๊ณผํ๋ ํ๋ญ์ค(flux):
$$ \Phi = \iint_S \mathbf{F} \cdot d\mathbf{S} = \iint_S \mathbf{F} \cdot \hat{n} \, dA $$
๋ฌผ๋ฆฌ์ ์๋ฏธ: - ์ ๊ธฐ ํ๋ญ์ค: ์ ๊ธฐ์ฅ์ด ๊ณก๋ฉด์ ๊ดํตํ๋ ์ (๊ฐ์ฐ์ค ๋ฒ์น) - ์ง๋ ํ๋ญ์ค: ์ ์ฒด๊ฐ ๊ณก๋ฉด์ ํต๊ณผํ๋ ์ง๋ ์ ๋
import sympy as sp
x, y, z = sp.symbols('x y z')
u, v = sp.symbols('u v')
# ์์ : F = (x, y, z)๊ฐ ๊ตฌ๋ฉด r = R์ ํต๊ณผํ๋ ํ๋ญ์ค
R = sp.Symbol('R', positive=True)
theta, phi = sp.symbols('theta phi')
# ๊ตฌ๋ฉด ์์์ rฬ = (sinฮธ cosฯ, sinฮธ sinฯ, cosฮธ)
# ๊ตฌ๋ฉด ์์์ F = R*(sinฮธ cosฯ, sinฮธ sinฯ, cosฮธ) = R*rฬ
# Fยทnฬ = Fยทrฬ = R (๊ตฌ๋ฉด์์ ๋ฒ์ ์ rฬ ๋ฐฉํฅ)
# dA = Rยฒ sinฮธ dฮธ dฯ
integrand = R * R**2 * sp.sin(theta)
flux = sp.integrate(integrand, (phi, 0, 2*sp.pi), (theta, 0, sp.pi))
print(f"F = (x, y, z) ๊ฐ ๊ตฌ๋ฉด r={R}์ ๊ดํตํ๋ ํ๋ญ์ค:")
print(f"ฮฆ = โฌ FยทdS = {flux}") # 4*pi*R^3
# ๋ฐ์ฐ ์ ๋ฆฌ๋ก ๊ฒ์ฆ: โฌ FยทdS = โญ (โยทF) dV
div_F = 3 # โยท(x,y,z) = 1 + 1 + 1 = 3
volume = sp.Rational(4, 3) * sp.pi * R**3
flux_divergence = div_F * volume
print(f"\n๋ฐ์ฐ ์ ๋ฆฌ ๊ฒ์ฆ: โญ (โยทF)dV = 3 ร (4/3)ฯRยณ = {flux_divergence}")
print(f"์ผ์น ์ฌ๋ถ: {sp.simplify(flux - flux_divergence) == 0}") # True
4. ์ ๋ถ ์ ๋ฆฌ¶
๋ฒกํฐ ํด์์ ์ธ ๋์ ๋ถ ์ ๋ฆฌ๋ ๋ฏธ๋ถ ์ฐ์ฐ(gradient, curl, divergence)๊ณผ ์ ๋ถ(์ ์ ๋ถ, ๋ฉด์ ๋ถ, ์ฒด์ ์ ๋ถ)์ ์ฐ๊ฒฐํ๋ ๊ทผ๋ณธ์ ์ธ ๊ฒฐ๊ณผ์ด๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฒกํฐ ํด์์ ์ธ ๋์ ๋ถ ์ ๋ฆฌ โ ์ฐจ์๋ณ ์ ๋ฆฌ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ์ฐจ์ ์ ๋ฆฌ ๋ฏธ๋ถ ์ฐ์ฐ ์ ๋ถ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ 2D ๊ทธ๋ฆฐ โ/โx, โ/โy ๋ฉด์ ๋ถ โ ์ ์ ๋ถ โ
โ 3D-S ์คํ ํฌ์ค โร ๋ฉด์ ๋ถ โ ์ ์ ๋ถ โ
โ 3D-V ๊ฐ์ฐ์ค โยท ์ฒด์ ์ ๋ถ โ ๋ฉด์ ๋ถ โ
โ โ
โ ๊ณตํต ํจํด: โซโซ(๋ฏธ๋ถ ์ฐ์ฐ) = โฎ(๊ฒฝ๊ณ์์์ ์ ๋ถ) โ
โ "๋ด๋ถ์ ๋ฏธ๋ถ = ๊ฒฝ๊ณ์ ์ ๋ถ" โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4.1 ๊ทธ๋ฆฐ ์ ๋ฆฌ (Green's Theorem)¶
2์ฐจ์ ํ๋ฉด์์, ๋จ์ ๋ซํ ๊ณก์ $C$์ ๊ทธ๊ฒ์ด ๋๋ฌ์ธ๋ ์์ญ $D$์ ๋ํด:
$$ \oint_C (P \, dx + Q \, dy) = \iint_D \left(\frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y}\right) dA $$
๋ฌผ๋ฆฌ์ ์๋ฏธ: ๋ฒกํฐ์ฅ์ ์ํ(circulation)์ ์์ญ ๋ด๋ถ์ $z$-์ฑ๋ถ ํ์ (curl)์ ํฉ์ผ๋ก ํ์ฐ.
import numpy as np
import sympy as sp
x, y, t = sp.symbols('x y t')
# ์์ : P = -yยฒ, Q = xยฒ ์ ๋ํด ๊ทธ๋ฆฐ ์ ๋ฆฌ ๊ฒ์ฆ
# ์์ญ: ๋จ์ ์ xยฒ + yยฒ โค 1
P = -y**2
Q = x**2
# ์ข๋ณ: ์ ์ ๋ถ (๋จ์ ์ ๊ฒฝ๋ก)
x_t = sp.cos(t)
y_t = sp.sin(t)
dx_dt = sp.diff(x_t, t)
dy_dt = sp.diff(y_t, t)
P_on_C = P.subs([(x, x_t), (y, y_t)])
Q_on_C = Q.subs([(x, x_t), (y, y_t)])
line_integral = sp.integrate(P_on_C * dx_dt + Q_on_C * dy_dt, (t, 0, 2*sp.pi))
print(f"์ ์ ๋ถ โฎ(P dx + Q dy) = {line_integral}")
# ์ฐ๋ณ: ๋ฉด์ ๋ถ (๊ทน์ขํ)
r, theta = sp.symbols('r theta')
dQ_dx = sp.diff(Q, x) # 2x
dP_dy = sp.diff(P, y) # -2y
integrand = dQ_dx - dP_dy # 2x + 2y
# ๊ทน์ขํ ๋ณํ
integrand_polar = integrand.subs([(x, r*sp.cos(theta)), (y, r*sp.sin(theta))])
area_integral = sp.integrate(integrand_polar * r, (r, 0, 1), (theta, 0, 2*sp.pi))
print(f"๋ฉด์ ๋ถ โฌ(โQ/โx - โP/โy)dA = {area_integral}")
print(f"\n๊ทธ๋ฆฐ ์ ๋ฆฌ ์ฑ๋ฆฝ: {sp.simplify(line_integral - area_integral) == 0}")
๊ทธ๋ฆฐ ์ ๋ฆฌ์ ํน์ ํํ โ ๋ฉด์ ๊ณต์:
$$ A = \frac{1}{2} \oint_C (x \, dy - y \, dx) $$
์ด ๊ณต์์ ์ธก๋, ์ปดํจํฐ ๊ทธ๋ํฝ์ค์์ ๋ค๊ฐํ ๋์ด๋ฅผ ๊ณ์ฐํ ๋ ์ฌ์ฉ๋๋ค.
4.2 ์คํ ํฌ์ค ์ ๋ฆฌ (Stokes' Theorem)¶
3์ฐจ์์์, ๊ณก๋ฉด $S$์ ๊ทธ ๊ฒฝ๊ณ ๊ณก์ $C = \partial S$์ ๋ํด:
$$ \oint_C \mathbf{F} \cdot d\mathbf{r} = \iint_S (\nabla \times \mathbf{F}) \cdot d\mathbf{S} $$
ํด์: ๋ฒกํฐ์ฅ์ ๊ฒฝ๊ณ ์ํ(circulation) = ๊ณก๋ฉด ์ curl์ ํ๋ญ์ค
import numpy as np
import sympy as sp
x, y, z, t = sp.symbols('x y z t')
# ์์ : F = (y, -x, zยฒ) ์ ๋ํด ์คํ ํฌ์ค ์ ๋ฆฌ ๊ฒ์ฆ
# ๊ณก๋ฉด S: z = 1 - xยฒ - yยฒ (z โฅ 0์ธ ํฌ๋ฌผ๋ฉด)
# ๊ฒฝ๊ณ C: z = 0์์ xยฒ + yยฒ = 1 (๋จ์ ์)
# --- curl(F) ๊ณ์ฐ ---
Fx, Fy, Fz = y, -x, z**2
curl_x = sp.diff(Fz, y) - sp.diff(Fy, z) # 0 - 0 = 0
curl_y = sp.diff(Fx, z) - sp.diff(Fz, x) # 0 - 0 = 0
curl_z = sp.diff(Fy, x) - sp.diff(Fx, y) # -1 - 1 = -2
print(f"โรF = ({curl_x}, {curl_y}, {curl_z})")
# --- ์ข๋ณ: ์ ์ ๋ถ โฎ_C Fยทdr ---
# C: r(t) = (cos t, sin t, 0), 0 โค t โค 2ฯ (๋ฐ์๊ณ)
x_t, y_t, z_t = sp.cos(t), sp.sin(t), sp.Integer(0)
dx_dt = sp.diff(x_t, t)
dy_dt = sp.diff(y_t, t)
dz_dt = sp.diff(z_t, t)
Fx_C = Fy_expr = y_t # Fx = y = sin t
Fy_C = -x_t # Fy = -x = -cos t
Fz_C = z_t**2 # Fz = zยฒ = 0
line_int = sp.integrate(
Fx_C * dx_dt + Fy_C * dy_dt + Fz_C * dz_dt,
(t, 0, 2*sp.pi)
)
print(f"\n์ข๋ณ (์ ์ ๋ถ): โฎ Fยทdr = {line_int}")
# --- ์ฐ๋ณ: ๋ฉด์ ๋ถ โฌ_S (โรF)ยทdS ---
# ๊ณก๋ฉด z = 1 - xยฒ - yยฒ, dS = (-โz/โx, -โz/โy, 1) dx dy = (2x, 2y, 1) dx dy
# (โรF)ยทdS = (0, 0, -2)ยท(2x, 2y, 1) dx dy = -2 dx dy
r_sym, theta_sym = sp.symbols('r_s theta_s')
surface_int = sp.integrate(
-2 * r_sym, # -2 ร r (์ผ์ฝ๋น์)
(r_sym, 0, 1),
(theta_sym, 0, 2*sp.pi)
)
print(f"์ฐ๋ณ (๋ฉด์ ๋ถ): โฌ (โรF)ยทdS = {surface_int}")
print(f"์คํ ํฌ์ค ์ ๋ฆฌ ์ฑ๋ฆฝ: {line_int == surface_int}")
4.3 ๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ (Divergence Theorem)¶
๋ซํ ๊ณก๋ฉด $S$๊ฐ ๋๋ฌ์ธ๋ ์ฒด์ $V$์ ๋ํด:
$$ \oiint_S \mathbf{F} \cdot d\mathbf{S} = \iiint_V (\nabla \cdot \mathbf{F}) \, dV $$
ํด์: ๋ฒกํฐ์ฅ์ด ๋ซํ ๊ณก๋ฉด์ ํต๊ณผํ๋ ์ด ํ๋ญ์ค = ์ฒด์ ๋ด๋ถ์ ๋ฐ์ฐ ์ดํฉ
import numpy as np
import sympy as sp
x, y, z = sp.symbols('x y z')
# ์์ : F = (xยณ, yยณ, zยณ), ๋ซํ ๊ณก๋ฉด = ๋จ์ ๊ตฌ xยฒ+yยฒ+zยฒ = 1
# โยทF = 3xยฒ + 3yยฒ + 3zยฒ = 3rยฒ
div_F = sp.diff(x**3, x) + sp.diff(y**3, y) + sp.diff(z**3, z)
print(f"โยทF = {div_F}") # 3xยฒ + 3yยฒ + 3zยฒ
# ์ฒด์ ์ ๋ถ (๊ตฌ๋ฉด์ขํ)
r, theta, phi = sp.symbols('r theta phi')
div_F_spherical = 3 * r**2 # 3(xยฒ + yยฒ + zยฒ) = 3rยฒ
jacobian = r**2 * sp.sin(theta)
volume_int = sp.integrate(
div_F_spherical * jacobian,
(r, 0, 1),
(theta, 0, sp.pi),
(phi, 0, 2*sp.pi)
)
print(f"โญ (โยทF) dV = {volume_int}") # 12ฯ/5
# ์ง์ ๋ฉด์ ๋ถ์ผ๋ก ๊ฒ์ฆ
# ๊ตฌ๋ฉด ์์์ rฬ = (x, y, z) (๋จ์๊ตฌ์ด๋ฏ๋ก |r| = 1)
# Fยทrฬ = xโด + yโด + zโด (๊ตฌ๋ฉด ์์์ xยฒ + yยฒ + zยฒ = 1)
# ๊ตฌ๋ฉด์ขํ: x = sinฮธ cosฯ, y = sinฮธ sinฯ, z = cosฮธ
F_dot_n = (sp.sin(theta)*sp.cos(phi))**4 + \
(sp.sin(theta)*sp.sin(phi))**4 + \
sp.cos(theta)**4
surface_int = sp.integrate(
F_dot_n * sp.sin(theta), # dA = sinฮธ dฮธ dฯ
(theta, 0, sp.pi),
(phi, 0, 2*sp.pi)
)
surface_int_simplified = sp.simplify(surface_int)
print(f"โฌ FยทdS = {surface_int_simplified}")
print(f"์ผ์น: {sp.simplify(volume_int - surface_int_simplified) == 0}")
4.4 ์ธ ์ ๋ฆฌ์ ๊ด๊ณ¶
์ธ ์ ๋ถ ์ ๋ฆฌ๋ ๋ชจ๋ ์ผ๋ฐํ๋ ์คํ ํฌ์ค ์ ๋ฆฌ(generalized Stokes' theorem)์ ํน์ํ ๊ฒฝ์ฐ์ด๋ค:
$$ \int_{\partial \Omega} \omega = \int_{\Omega} d\omega $$
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์ธ ์ ๋ฆฌ์ ํต์ผ์ ๊ด์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋ฏธ์ ๋ถํ์ ๊ธฐ๋ณธ์ ๋ฆฌ (1D): โ
โ โซ_a^b f'(x) dx = f(b) - f(a) โ
โ "๋ฏธ๋ถ์ ์ ๋ถ = ๊ฒฝ๊ณ๊ฐ์ ์ฐจ์ด" โ
โ โ
โ ๊ทธ๋ฆฐ ์ ๋ฆฌ (2D): โ
โ โฌ_D (โQ/โx - โP/โy) dA = โฎ_{โD} (P dx + Q dy) โ
โ "curl์ ๋ฉด์ ๋ถ = ๊ฒฝ๊ณ์ ์ ์ ๋ถ" โ
โ โ
โ ์คํ ํฌ์ค ์ ๋ฆฌ (3D, ๊ณก๋ฉดโ๊ฒฝ๊ณ์ ): โ
โ โฌ_S (โรF)ยทdS = โฎ_{โS} Fยทdr โ
โ "curl์ ๋ฉด์ ๋ถ = ๊ฒฝ๊ณ์ ์ ์ ๋ถ" โ
โ โ
โ ๊ฐ์ฐ์ค ์ ๋ฆฌ (3D, ์ฒด์ โ๊ฒฝ๊ณ๋ฉด): โ
โ โญ_V (โยทF) dV = โฌ_{โV} FยทdS โ
โ "divergence์ ์ฒด์ ์ ๋ถ = ๊ฒฝ๊ณ์ ๋ฉด์ ๋ถ" โ
โ โ
โ ํจํด: "๋ด๋ถ์ ๋ฏธ๋ถ = ๊ฒฝ๊ณ์์์ ๊ฐ" โ
โ ์ฐจ์ n์ ์ ๋ถ โ ์ฐจ์ (n-1)์ ๊ฒฝ๊ณ ์ ๋ถ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
5. ๋ฌผ๋ฆฌํ ์์ฉ¶
5.1 ์ ๊ธฐ์ฅ๊ณผ ๊ฐ์ฐ์ค ๋ฒ์น¶
๊ฐ์ฐ์ค ๋ฒ์น (์ ๋ถ ํํ):
$$ \oiint_S \mathbf{E} \cdot d\mathbf{S} = \frac{Q_{\text{enc}}}{\epsilon_0} $$
๊ฐ์ฐ์ค ๋ฒ์น (๋ฏธ๋ถ ํํ): ๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด:
$$ \nabla \cdot \mathbf{E} = \frac{\rho}{\epsilon_0} $$
์ ํ๋ฐ๋ $\rho$๊ฐ ์๋ ๊ณณ์์ ์ ๊ธฐ์ฅ์ ๋ฐ์ฐ์ด 0์ด ์๋๋ค.
import numpy as np
import matplotlib.pyplot as plt
# ์ ์ ํ์ ์ ๊ธฐ์ฅ ์๊ฐํ (2D ๋จ๋ฉด)
# E = q/(4ฯฮตโ) ร rฬ/rยฒ (์ฟจ๋กฑ ๋ฒ์น)
q = 1.0 # ์ ํ๋ (์์ ๋จ์)
eps0 = 1.0 # ฮตโ (๋จ์๊ณ ํธ์์)
X, Y = np.meshgrid(np.linspace(-3, 3, 20), np.linspace(-3, 3, 20))
R = np.sqrt(X**2 + Y**2)
R = np.where(R < 0.3, 0.3, R) # ํน์ด์ ๋ฐฉ์ง
# ์ ๊ธฐ์ฅ ์ฑ๋ถ
k = q / (4 * np.pi * eps0)
Ex = k * X / R**3
Ey = k * Y / R**3
E_mag = np.sqrt(Ex**2 + Ey**2)
fig, axes = plt.subplots(1, 2, figsize=(16, 7))
# ์์ ํ (+q)
ax = axes[0]
ax.streamplot(X, Y, Ex, Ey, color=np.log(E_mag + 1), cmap='Reds',
density=2, linewidth=1.2)
ax.plot(0, 0, 'ro', markersize=15, label='+q')
circle1 = plt.Circle((0, 0), 1.0, fill=False, color='gray', linestyle='--', label='๊ฐ์ฐ์ค ๋ฉด r=1')
circle2 = plt.Circle((0, 0), 2.0, fill=False, color='gray', linestyle=':', label='๊ฐ์ฐ์ค ๋ฉด r=2')
ax.add_patch(circle1)
ax.add_patch(circle2)
ax.set_title('์์ ํ์ ์ ๊ธฐ์ฅ (๋ฐ์ฐ > 0)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.legend(loc='upper left', fontsize=9)
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
# ์๊ทน์ (dipole): +q at (1,0), -q at (-1,0)
ax = axes[1]
d = 1.0
R1 = np.sqrt((X - d)**2 + Y**2)
R2 = np.sqrt((X + d)**2 + Y**2)
R1 = np.where(R1 < 0.3, 0.3, R1)
R2 = np.where(R2 < 0.3, 0.3, R2)
Ex_dip = k * (X - d) / R1**3 - k * (X + d) / R2**3
Ey_dip = k * Y / R1**3 - k * Y / R2**3
E_dip_mag = np.sqrt(Ex_dip**2 + Ey_dip**2)
ax.streamplot(X, Y, Ex_dip, Ey_dip, color=np.log(E_dip_mag + 1),
cmap='coolwarm', density=2, linewidth=1.2)
ax.plot(d, 0, 'ro', markersize=12, label='+q')
ax.plot(-d, 0, 'bo', markersize=12, label='-q')
ax.set_title('์ ๊ธฐ ์๊ทน์ (dipole)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.legend(fontsize=9)
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
plt.tight_layout()
plt.savefig('electric_field_gauss.png', dpi=150, bbox_inches='tight')
plt.show()
5.2 ์๊ธฐ์ฅ๊ณผ ์ํ๋ฅด ๋ฒ์น¶
์ํ๋ฅด ๋ฒ์น (์ ๋ถ ํํ):
$$ \oint_C \mathbf{B} \cdot d\mathbf{r} = \mu_0 I_{\text{enc}} $$
์ํ๋ฅด ๋ฒ์น (๋ฏธ๋ถ ํํ): ์คํ ํฌ์ค ์ ๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด:
$$ \nabla \times \mathbf{B} = \mu_0 \mathbf{J} $$
์ฌ๊ธฐ์ $\mathbf{J}$๋ ์ ๋ฅ ๋ฐ๋(current density)์ด๋ค.
๋ฌผ๋ฆฌ์ ์๋ฏธ: - ์๊ธฐ์ฅ์ curl์ ์ ๋ฅ ๋ฐ๋์ ๋น๋ก - ์๊ธฐ์ฅ์ ์ ์ ๋ฅ ์ฃผ์๋ฅผ ๊ฐ์ธ๋ ๋ซํ ๋ฃจํ (์ค๋ฅธ์ ๋ฒ์น) - $\nabla \cdot \mathbf{B} = 0$ โ ์๊ธฐ ๋จ๊ทน์(magnetic monopole)๋ ์กด์ฌํ์ง ์์
import numpy as np
import matplotlib.pyplot as plt
# ๋ฌดํ ์ง์ ์ ๋ฅ์ ์ํ ์๊ธฐ์ฅ
# B = ฮผโI/(2ฯr) ร ฯฬ (์ํต์ขํ)
mu0 = 1.0 # ฮผโ (์์ ๋จ์)
I = 1.0 # ์ ๋ฅ (z ๋ฐฉํฅ)
X, Y = np.meshgrid(np.linspace(-3, 3, 20), np.linspace(-3, 3, 20))
R = np.sqrt(X**2 + Y**2)
R = np.where(R < 0.3, 0.3, R)
# B = ฮผโI/(2ฯr) ร ฯฬ, ์ฌ๊ธฐ์ ฯฬ = (-y/r, x/r, 0)
B_coeff = mu0 * I / (2 * np.pi * R)
Bx = B_coeff * (-Y / R)
By = B_coeff * (X / R)
fig, ax = plt.subplots(figsize=(8, 8))
B_mag = np.sqrt(Bx**2 + By**2)
strm = ax.streamplot(X, Y, Bx, By, color=np.log(B_mag + 0.01),
cmap='plasma', density=2, linewidth=1.5)
plt.colorbar(strm.lines, ax=ax, label='log|B|')
# ์ ๋ฅ ์์น (์์ , z ๋ฐฉํฅ)
ax.plot(0, 0, 'g^', markersize=15, label='I (z ๋ฐฉํฅ, ์ง๋ฉด์์ ๋์ด)')
# ์ํ๋ฅด ๋ฃจํ ํ์
for r in [1.0, 2.0]:
circle = plt.Circle((0, 0), r, fill=False, color='lime',
linestyle='--', linewidth=2)
ax.add_patch(circle)
ax.set_title('์ง์ ์ ๋ฅ ์ฃผ์์ ์๊ธฐ์ฅ (์ํ๋ฅด ๋ฒ์น)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.legend(loc='upper left')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
plt.tight_layout()
plt.savefig('magnetic_field_ampere.png', dpi=150, bbox_inches='tight')
plt.show()
5.3 ์ ์ฒด์ญํ์ ์ฐ์ ๋ฐฉ์ ์¶
์ง๋ ๋ณด์กด์ ํํํ๋ ์ฐ์ ๋ฐฉ์ ์(continuity equation):
$$ \frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{v}) = 0 $$
์ฌ๊ธฐ์ $\rho$๋ ์ ์ฒด ๋ฐ๋, $\mathbf{v}$๋ ์ ์(velocity field)์ด๋ค.
์ ๋ ๊ณผ์ : 1. ๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ๋ก๋ถํฐ ๋ซํ ๋ฉด์ ํตํ ์ง๋ ์ ์ถ์จ = $\oiint_S \rho \mathbf{v} \cdot d\mathbf{S}$ 2. ์ฒด์ ๋ด ์ง๋ ๋ณํ์จ = $-\frac{\partial}{\partial t}\iiint_V \rho \, dV$ 3. ๋ฐ์ฐ ์ ๋ฆฌ ์ ์ฉ: $\iiint_V \left[\frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{v})\right] dV = 0$ 4. ์์์ ์ฒด์ ์ ๋ํด ์ฑ๋ฆฝํ๋ฏ๋ก ํผ์ ๋ถํจ์ = 0
๋น์์ถ ์ ์ฒด ($\rho$ = ์์)์ ๊ฒฝ์ฐ:
$$ \nabla \cdot \mathbf{v} = 0 $$
import numpy as np
import matplotlib.pyplot as plt
# 2D ๋น์์ถ ์ ์ฒด ํ๋ฆ ์์
# ํ๋ฆ ํจ์(stream function) ฯ๋ฅผ ์ด์ฉ: vx = โฯ/โy, vy = -โฯ/โx
# โ ์๋์ผ๋ก โยทv = 0 ๋ง์กฑ
X, Y = np.meshgrid(np.linspace(-3, 3, 25), np.linspace(-3, 3, 25))
# ์์ 1: ๊ท ์ผ ํ๋ฆ + ์ํต ์ฃผ์ ํ๋ฆ (ํผํ
์
ํ๋ฆ)
# ฯ = U*y*(1 - aยฒ/rยฒ), U = ์์ ๋ฅ ์๋, a = ์ํต ๋ฐ์ง๋ฆ
U_inf = 1.0
a = 1.0
R_sq = X**2 + Y**2
R_sq = np.where(R_sq < a**2, a**2, R_sq) # ์ํต ๋ด๋ถ ๋ง์คํน
Vx = U_inf * (1 - a**2 * (X**2 - Y**2) / R_sq**2)
Vy = -U_inf * 2 * a**2 * X * Y / R_sq**2
# ์ํต ๋ด๋ถ ์๋ = 0
mask = (X**2 + Y**2) < a**2
Vx[mask] = 0
Vy[mask] = 0
fig, ax = plt.subplots(figsize=(10, 8))
speed = np.sqrt(Vx**2 + Vy**2)
strm = ax.streamplot(X, Y, Vx, Vy, color=speed, cmap='RdYlBu_r',
density=2, linewidth=1.2)
plt.colorbar(strm.lines, ax=ax, label='|v| (์๋ ฅ)')
# ์ํต ํ์
circle = plt.Circle((0, 0), a, color='gray', alpha=0.5)
ax.add_patch(circle)
# ๋ฐ์ฐ ๊ณ์ฐ (์์น์ )
dVx_dx = np.gradient(Vx, X[0], axis=1)
dVy_dy = np.gradient(Vy, Y[:, 0], axis=0)
div_v = dVx_dx + dVy_dy
max_div = np.max(np.abs(div_v[~mask]))
ax.set_title(f'์ํต ์ฃผ์ ๋น์์ถ ์ ์ฒด ํ๋ฆ (max|โยทv| โ {max_div:.2e})')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
plt.tight_layout()
plt.savefig('fluid_flow_cylinder.png', dpi=150, bbox_inches='tight')
plt.show()
5.4 ๋งฅ์ค์ฐ ๋ฐฉ์ ์์ ์ ๋ถ ํํ์ ๋ฏธ๋ถ ํํ¶
๋งฅ์ค์ฐ ๋ฐฉ์ ์์ ์ ์๊ธฐ ํ์์ ์์ ํ ๊ธฐ์ ํ๋ 4๊ฐ์ ๋ฐฉ์ ์์ด๋ค. ๋ฒกํฐ ํด์์ ์ ๋ถ ์ ๋ฆฌ(๊ฐ์ฐ์ค, ์คํ ํฌ์ค)๋ฅผ ํตํด ์ ๋ถ ํํ์ ๋ฏธ๋ถ ํํ๋ฅผ ์ํธ ๋ณํํ ์ ์๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋งฅ์ค์ฐ ๋ฐฉ์ ์ (Maxwell's Equations) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋ฒ์น ๋ฏธ๋ถ ํํ ์ ๋ถ ํํ ๋ณํ ์ ๋ฆฌ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ๊ฐ์ฐ์ค (์ ๊ธฐ) โยทE = ฯ/ฮตโ โฎ EยทdS = Q/ฮตโ ๊ฐ์ฐ์ค โ
โ โ
โ ๊ฐ์ฐ์ค (์๊ธฐ) โยทB = 0 โฎ BยทdS = 0 ๊ฐ์ฐ์ค โ
โ โ
โ ํจ๋ฌ๋ฐ์ด โรE = -โB/โt โฎ Eยทdr = -dฮฆ_B/dt ์คํ ํฌ์ค โ
โ โ
โ ์ํ๋ฅด-๋งฅ์ค์ฐ โรB = ฮผโJ + ฮผโฮตโโE/โt ์คํ ํฌ์ค โ
โ โฎ Bยทdr = ฮผโI + ฮผโฮตโ dฮฆ_E/dt โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ๋ฌผ๋ฆฌ์ ์๋ฏธ: โ
โ โข ๊ฐ์ฐ์ค(์ ๊ธฐ): ์ ํ๊ฐ ์ ๊ธฐ์ฅ์ ์์ฒ โ
โ โข ๊ฐ์ฐ์ค(์๊ธฐ): ์๊ธฐ ๋จ๊ทน์๋ ์กด์ฌํ์ง ์์ โ
โ โข ํจ๋ฌ๋ฐ์ด: ๋ณํ๋ ์๊ธฐ์ฅ์ด ์ ๊ธฐ์ฅ์ ์ ๋ โ
โ โข ์ํ๋ฅด-๋งฅ์ค์ฐ: ์ ๋ฅ์ ๋ณํ๋ ์ ๊ธฐ์ฅ์ด ์๊ธฐ์ฅ์ ์ ๋ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ ๋ถ ํํ์์ ๋ฏธ๋ถ ํํ๋ก์ ๋ณํ (๊ฐ์ฐ์ค ๋ฒ์น ์์):
$$ \oiint_S \mathbf{E} \cdot d\mathbf{S} = \frac{Q_{\text{enc}}}{\epsilon_0} = \frac{1}{\epsilon_0}\iiint_V \rho \, dV $$
๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ๋ฅผ ์ข๋ณ์ ์ ์ฉ:
$$ \iiint_V (\nabla \cdot \mathbf{E}) \, dV = \frac{1}{\epsilon_0}\iiint_V \rho \, dV $$
์์์ ์ฒด์ $V$์ ๋ํด ์ฑ๋ฆฝํ๋ฏ๋ก:
$$ \nabla \cdot \mathbf{E} = \frac{\rho}{\epsilon_0} $$
import numpy as np
import matplotlib.pyplot as plt
# ๋งฅ์ค์ฐ ๋ฐฉ์ ์์ ์๊ฐ์ ์ ๋ฆฌ: ์ ๊ธฐ์ฅ๊ณผ ์๊ธฐ์ฅ์ ๊ด๊ณ
fig, axes = plt.subplots(2, 2, figsize=(14, 12))
# === (1) ๊ฐ์ฐ์ค ๋ฒ์น (์ ๊ธฐ): โยทE = ฯ/ฮตโ ===
ax = axes[0, 0]
X, Y = np.meshgrid(np.linspace(-2, 2, 15), np.linspace(-2, 2, 15))
R = np.sqrt(X**2 + Y**2)
R = np.where(R < 0.3, 0.3, R)
Ex = X / R**3
Ey = Y / R**3
ax.quiver(X, Y, Ex, Ey, color='red', alpha=0.6)
circle = plt.Circle((0, 0), 0.2, color='red', alpha=0.8)
ax.add_patch(circle)
ax.set_title('(1) ๊ฐ์ฐ์ค ๋ฒ์น: โยทE = ฯ/ฮตโ\n์ ํ โ ๋ฐ์ฐํ๋ E')
ax.set_aspect('equal')
ax.set_xlim(-2.5, 2.5)
ax.set_ylim(-2.5, 2.5)
ax.grid(True, alpha=0.2)
# === (2) ๊ฐ์ฐ์ค ๋ฒ์น (์๊ธฐ): โยทB = 0 ===
ax = axes[0, 1]
# ์๊ธฐ ์๊ทน์ (๋จ๊ทน์ ์์)
d = 0.5
R1 = np.sqrt((X - 0)**2 + (Y - d)**2)
R2 = np.sqrt((X - 0)**2 + (Y + d)**2)
R1 = np.where(R1 < 0.3, 0.3, R1)
R2 = np.where(R2 < 0.3, 0.3, R2)
Bx = X / R1**3 - X / R2**3
By = (Y - d) / R1**3 - (Y + d) / R2**3
speed = np.sqrt(Bx**2 + By**2)
ax.streamplot(X, Y, Bx, By, color=np.log(speed + 0.1), cmap='Blues',
density=2, linewidth=1)
ax.set_title('(2) ๊ฐ์ฐ์ค ๋ฒ์น: โยทB = 0\n์๊ธฐ์ฅ์ ์ ๋ซํ ๋ฃจํ')
ax.set_aspect('equal')
ax.set_xlim(-2.5, 2.5)
ax.set_ylim(-2.5, 2.5)
ax.grid(True, alpha=0.2)
# === (3) ํจ๋ฌ๋ฐ์ด ๋ฒ์น: โรE = -โB/โt ===
ax = axes[1, 0]
# ๋ณํ๋ ์๊ธฐ์ฅ โ ์ ๋ ์ ๊ธฐ์ฅ (์ํ)
R_circ = np.sqrt(X**2 + Y**2)
R_circ = np.where(R_circ < 0.2, 0.2, R_circ)
Ex_ind = -Y / R_circ**2
Ey_ind = X / R_circ**2
ax.streamplot(X, Y, Ex_ind, Ey_ind, color='orange', density=1.5, linewidth=1.5)
ax.annotate('dB/dt\n(z ๋ฐฉํฅ)', xy=(0, 0), fontsize=12, ha='center',
bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.8))
ax.set_title('(3) ํจ๋ฌ๋ฐ์ด: โรE = -โB/โt\n๋ณํ๋ B โ ์ ๋ E')
ax.set_aspect('equal')
ax.set_xlim(-2.5, 2.5)
ax.set_ylim(-2.5, 2.5)
ax.grid(True, alpha=0.2)
# === (4) ์ํ๋ฅด-๋งฅ์ค์ฐ: โรB = ฮผโJ + ฮผโฮตโ โE/โt ===
ax = axes[1, 1]
R_wire = np.sqrt(X**2 + Y**2)
R_wire = np.where(R_wire < 0.2, 0.2, R_wire)
Bx_wire = -Y / R_wire**2
By_wire = X / R_wire**2
ax.streamplot(X, Y, Bx_wire, By_wire, color='purple', density=1.5, linewidth=1.5)
ax.annotate('I or โE/โt\n(z ๋ฐฉํฅ)', xy=(0, 0), fontsize=12, ha='center',
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.8))
ax.set_title('(4) ์ํ๋ฅด-๋งฅ์ค์ฐ: โรB = ฮผโJ + ฮผโฮตโโE/โt\n์ ๋ฅ/๋ณํ๋ E โ B')
ax.set_aspect('equal')
ax.set_xlim(-2.5, 2.5)
ax.set_ylim(-2.5, 2.5)
ax.grid(True, alpha=0.2)
plt.suptitle('๋งฅ์ค์ฐ ๋ฐฉ์ ์์ 4๊ฐ์ง ๋ฒ์น', fontsize=16, fontweight='bold', y=1.02)
plt.tight_layout()
plt.savefig('maxwell_equations.png', dpi=150, bbox_inches='tight')
plt.show()
์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: ๊ธฐ์ธ๊ธฐ์ ๋ฐฉํฅ๋ํจ์¶
์ค์นผ๋ผ์ฅ $f(x, y, z) = x^2 y + y^2 z + z^2 x$ ์ ๋ํด: 1. $\nabla f$๋ฅผ ๊ตฌํ๋ผ. 2. ์ $(1, 1, 1)$์์ $\hat{u} = \frac{1}{\sqrt{3}}(1, 1, 1)$ ๋ฐฉํฅ์ ๋ฐฉํฅ๋ํจ์(directional derivative)๋ฅผ ๊ตฌํ๋ผ. 3. ์ $(1, 1, 1)$์์ $f$๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ ๋ฐฉํฅ๊ณผ ๊ทธ ๋ณํ์จ์ ๊ตฌํ๋ผ.
๋ฌธ์ 2: ๋ฐ์ฐ๊ณผ ํ์ ํ๋ณ¶
๋ค์ ๋ฒกํฐ์ฅ์ ๋ํด ๋ฐ์ฐ๊ณผ ํ์ ์ ๊ณ์ฐํ๊ณ , ๋ณด์กด์ฅ์ธ์ง ํ๋ณํ๋ผ:
(a) $\mathbf{F} = (yz, xz, xy)$
(b) $\mathbf{G} = (x^2 - y, y^2 + x, z)$
๋ณด์กด์ฅ์ด๋ฉด ํผํ ์ ํจ์๋ฅผ ๊ตฌํ๋ผ.
๋ฌธ์ 3: ์ ์ ๋ถ¶
๋ฒกํฐ์ฅ $\mathbf{F} = (2xy + z^2)\hat{x} + x^2\hat{y} + 2xz\hat{z}$ ์ ๋ํด: 1. $\mathbf{F}$๊ฐ ๋ณด์กด์ฅ์์ ๋ณด์ด๊ณ ํผํ ์ ํจ์ $\phi$๋ฅผ ๊ตฌํ๋ผ. 2. $(0, 0, 0)$์์ $(1, 2, 3)$๊น์ง์ ์ ์ ๋ถ์ (a) ํผํ ์ ํจ์๋ฅผ ์ด์ฉํ์ฌ, (b) ์ง์ ๊ฒฝ๋ก $\mathbf{r}(t) = (t, 2t, 3t)$๋ฅผ ๋ฐ๋ผ ์ง์ ๊ณ์ฐํ์ฌ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ ํ์ธํ๋ผ.
๋ฌธ์ 4: ๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ ๊ฒ์ฆ¶
$\mathbf{F} = (x^2, y^2, z^2)$์ ๋ํด, ๋จ์ ์ ์ก๋ฉด์ฒด $[0,1]^3$์์ ๊ฐ์ฐ์ค ๋ฐ์ฐ ์ ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๋ผ. 1. $\nabla \cdot \mathbf{F}$๋ฅผ ๊ตฌํ๊ณ ์ฒด์ ์ ๋ถ์ ๊ณ์ฐํ๋ผ. 2. 6๊ฐ ๋ฉด์์์ ๋ฉด์ ๋ถ์ ๊ฐ๊ฐ ๊ณ์ฐํ์ฌ ํฉ์ฐํ๋ผ. 3. ๋ ๊ฒฐ๊ณผ๊ฐ ์ผ์นํจ์ ํ์ธํ๋ผ.
๋ฌธ์ 5: ์คํ ํฌ์ค ์ ๋ฆฌ์ ๋ฌผ๋ฆฌ ์์ฉ¶
์ ๋ฅ ๋ฐ๋ $\mathbf{J} = J_0 \hat{z}$ (๊ท ์ผ)๊ฐ ๋ฐ์ง๋ฆ $a$์ธ ์ํต ๋์ ์ ํ๋ฅผ ๋: 1. ์ํ๋ฅด ๋ฒ์น(์ ๋ถ ํํ)์ ์ด์ฉํ์ฌ $r < a$์ $r > a$ ์์ญ์์์ ์๊ธฐ์ฅ $\mathbf{B}$๋ฅผ ๊ตฌํ๋ผ. 2. $r < a$์์ $\nabla \times \mathbf{B} = \mu_0 \mathbf{J}$๊ฐ ์ฑ๋ฆฝํจ์ ์ง์ ํ์ธํ๋ผ (์ํต์ขํ curl ๊ณต์ ์ฌ์ฉ).
๋ฌธ์ 6: ๋งฅ์ค์ฐ ๋ฐฉ์ ์ ๋ณํ¶
ํจ๋ฌ๋ฐ์ด ๋ฒ์น์ ์ ๋ถ ํํ:
$$ \oint_C \mathbf{E} \cdot d\mathbf{r} = -\frac{d}{dt}\iint_S \mathbf{B} \cdot d\mathbf{S} $$
์์ ์คํ ํฌ์ค ์ ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๋ฏธ๋ถ ํํ $\nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t}$๋ฅผ ์ ๋ํ๋ผ. ์ ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์์ ํ๋ผ.
์ฐธ๊ณ ์๋ฃ¶
๊ต์ฌ¶
- Boas, M. L. (2005). Mathematical Methods in the Physical Sciences, 3rd ed., Chapter 6. Wiley.
- Griffiths, D. J. (2017). Introduction to Electrodynamics, 4th ed. Cambridge University Press.
- ๋ฒกํฐ ํด์์ ์ ์๊ธฐํ ์์ฉ์ ๋ํ ์ต๊ณ ์ ์ฐธ๊ณ ์
- Arfken, G. B., Weber, H. J., & Harris, F. E. (2012). Mathematical Methods for Physicists, 7th ed., Chapters 1-3. Academic Press.
- Schey, H. M. (2005). Div, Grad, Curl, and All That, 4th ed. W.W. Norton.
- ๋ฒกํฐ ํด์์ ์ง๊ด์ ์ ๋ฌธ์
์จ๋ผ์ธ ์๋ฃ¶
- 3Blue1Brown โ Divergence and Curl: ๋ฐ์ฐ๊ณผ ํ์ ์ ์๊ฐ์ ์ดํด
- MIT OCW 18.02 โ Multivariable Calculus: ๋ฒกํฐ ํด์ ๊ฐ์
- Paul's Online Math Notes โ Calculus III: ์ฐ์ต ๋ฌธ์ ํ๋ถ
Python ๋๊ตฌ¶
sympy.vector: ๊ธฐํธ์ ๋ฒกํฐ ๋ฏธ์ ๋ถ (gradient,divergence,curl)matplotlib.pyplot.quiver: 2D ๋ฒกํฐ์ฅ ํ์ดํ ์๊ฐํmatplotlib.pyplot.streamplot: ์ ์ (streamline) ์๊ฐํmpl_toolkits.mplot3d: 3D ๊ณก๋ฉด ๋ฐ ๋ฒกํฐ ์๊ฐํ
๋ค์ ๋ ์จ¶
- ์ด์ : 02. ๋ณต์์ (Complex Numbers) โ ๋ณต์ ๋์, ๊ทน์ขํ/์ง์ ํํ, ๋๋ชจ์๋ธ๋ฅด ์ ๋ฆฌ
- ๋ค์: 04. ๊ณก์ ์ขํ๊ณ์ ๋ค์ค์ ๋ถ (Curvilinear Coordinates) โ ์ํต/๊ตฌ๋ฉด ์ขํ, ์ผ์ฝ๋น์, ์ขํ ๋ณํ