ストークスの定理は、ベクトル場の線積分(閉曲線に沿った循環)と面積分(回転の面積分)を結びつける、ベクトル解析の最も重要な定理の一つです。グリーンの定理を3次元に拡張したものであり、電磁気学のファラデーの法則やアンペールの法則の数学的基盤です。
本記事の内容
- ストークスの定理の主張
- 直感的な理解と導出のアイデア
- グリーンの定理との関係
- 電磁気学への応用
- Pythonでの数値検証
前提知識
ストークスの定理
開曲面 $S$ とその境界の閉曲線 $\partial S$ に対して、
$$ \boxed{\oint_{\partial S} \bm{F} \cdot d\bm{r} = \iint_S (\nabla \times \bm{F}) \cdot d\bm{A}} $$
左辺は $\bm{F}$ の閉曲線 $\partial S$ に沿った循環、右辺は $\bm{F}$ の回転の曲面 $S$ 上での面積分です。
向きの約束: 閉曲線の向きと面の法線ベクトルは右手の法則に従います。
直感的な理解
曲面 $S$ を微小な面要素に分割すると、隣接する面要素の辺に沿った循環は互いに打ち消し合い、全体としては外周(境界)に沿った循環のみが残ります。
各微小面要素の循環は $(\nabla \times \bm{F}) \cdot \Delta\bm{A}$ で近似できるので、これを全面要素について足し合わせると右辺の面積分になります。
グリーンの定理との関係
$\bm{F} = (P, Q, 0)$、曲面を $xy$ 平面上の領域 $D$ とすると、ストークスの定理は
$$ \oint_{\partial D} (P \, dx + Q \, dy) = \iint_D \left(\frac{\partial Q}{\partial x} – \frac{\partial P}{\partial y}\right) dA $$
これはまさにグリーンの定理です。つまり、グリーンの定理はストークスの定理の2次元特殊ケースです。
具体例
例: $\bm{F} = (y, -x, z)$ の曲面 $S$: $z = 0$, $x^2+y^2 \leq 1$
左辺(線積分): 境界は単位円 $\bm{r}(t) = (\cos t, \sin t, 0)$、$0 \leq t \leq 2\pi$
$$ \begin{align} \oint \bm{F} \cdot d\bm{r} &= \int_0^{2\pi} (\sin t, -\cos t, 0) \cdot (-\sin t, \cos t, 0) \, dt \\ &= \int_0^{2\pi} (-\sin^2 t – \cos^2 t) \, dt \\ &= -2\pi \end{align} $$
右辺(面積分): $\nabla \times \bm{F} = (0-1, 0-0, -1-1) = (-1, 0, -2)$
$d\bm{A} = (0, 0, 1) dA$(上向き法線)なので、
$$ \iint_S (\nabla \times \bm{F}) \cdot d\bm{A} = \iint_D (-2) \, dA = -2\pi $$
左辺 = 右辺 = $-2\pi$ ✓
電磁気学への応用
ファラデーの法則
$$ \oint_{\partial S} \bm{E} \cdot d\bm{r} = -\frac{d}{dt}\iint_S \bm{B} \cdot d\bm{A} $$
ストークスの定理を左辺に適用すると微分形が得られます:
$$ \nabla \times \bm{E} = -\frac{\partial \bm{B}}{\partial t} $$
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
# ストークスの定理の数値検証
# F = (y, -x, z), S: z=0上の単位円板
# 左辺: 線積分 ∮F·dr (単位円に沿って)
N = 1000
t = np.linspace(0, 2*np.pi, N+1)
dt = t[1] - t[0]
x_c = np.cos(t)
y_c = np.sin(t)
dx = -np.sin(t) * dt
dy = np.cos(t) * dt
# F = (y, -x, 0) on the circle
Fx = y_c
Fy = -x_c
line_integral = np.sum(Fx[:-1]*dx[:-1] + Fy[:-1]*dy[:-1])
print(f"線積分(左辺): {line_integral:.6f}")
print(f"面積分(右辺): {-2*np.pi:.6f}")
# 可視化
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# ベクトル場と閉曲線
xg = np.linspace(-1.5, 1.5, 12)
yg = np.linspace(-1.5, 1.5, 12)
Xg, Yg = np.meshgrid(xg, yg)
axes[0].quiver(Xg, Yg, Yg, -Xg, alpha=0.5, color='blue')
axes[0].plot(np.cos(t), np.sin(t), 'r-', linewidth=2, label='$\\partial S$(境界)')
axes[0].arrow(0, 1, -0.3, 0, head_width=0.08, color='r')
axes[0].set_title('$\\mathbf{F}=(y,-x,0)$ と閉曲線')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[0].set_aspect('equal')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
# curl の z 成分の可視化
x_fine = np.linspace(-1.5, 1.5, 100)
y_fine = np.linspace(-1.5, 1.5, 100)
Xf, Yf = np.meshgrid(x_fine, y_fine)
curl_z = -2 * np.ones_like(Xf) # (∇×F)_z = -2
mask = Xf**2 + Yf**2 <= 1
curl_masked = np.where(mask, curl_z, np.nan)
im = axes[1].pcolormesh(Xf, Yf, curl_masked, cmap='coolwarm', shading='auto')
axes[1].plot(np.cos(t), np.sin(t), 'k-', linewidth=2)
plt.colorbar(im, ax=axes[1], label='$(\\nabla\\times\\mathbf{F})_z$')
axes[1].set_title('$(\\nabla\\times\\mathbf{F})_z = -2$(面上)')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
axes[1].set_aspect('equal')
plt.tight_layout()
plt.savefig('stokes_theorem.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
- ストークスの定理: $\oint_{\partial S} \bm{F} \cdot d\bm{r} = \iint_S (\nabla \times \bm{F}) \cdot d\bm{A}$
- 線積分(循環)= 回転の面積分
- グリーンの定理は2次元特殊ケース
- 電磁気学(ファラデー、アンペール)の基盤
次のステップとして、以下の記事も参考にしてください。