ストークスの定理の導出と応用

ストークスの定理は、ベクトル場の線積分(閉曲線に沿った循環)と面積分(回転の面積分)を結びつける、ベクトル解析の最も重要な定理の一つです。グリーンの定理を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次元特殊ケース
  • 電磁気学(ファラデー、アンペール)の基盤

次のステップとして、以下の記事も参考にしてください。