回転(rot/curl)の定義と意味

ベクトル場に「渦」があるかどうかを判定し、その回転の強さを定量化するのが回転(rotation/curl)です。流体の渦、電磁誘導(変動磁場が電場を生む)、保存力場の判定など、物理学の重要な概念と深く結びついています。

本記事では、回転の定義、物理的意味、そして保存場との関係を解説します。

本記事の内容

  • 回転の定義(行列式表現)
  • 物理的意味(渦の強さ)
  • 保存場の条件(rot F = 0)
  • 具体例とPythonでの可視化

前提知識

回転の定義

ベクトル場 $\bm{F} = (F_x, F_y, F_z)$ の回転は次で定義されます。

$$ \boxed{\text{rot} \, \bm{F} = \nabla \times \bm{F} = \begin{vmatrix} \bm{e}_x & \bm{e}_y & \bm{e}_z \\ \frac{\partial}{\partial x} & \frac{\partial}{\partial y} & \frac{\partial}{\partial z} \\ F_x & F_y & F_z \end{vmatrix}} $$

成分で書くと、

$$ \nabla \times \bm{F} = \left(\frac{\partial F_z}{\partial y} – \frac{\partial F_y}{\partial z}, \; \frac{\partial F_x}{\partial z} – \frac{\partial F_z}{\partial x}, \; \frac{\partial F_y}{\partial x} – \frac{\partial F_x}{\partial y}\right) $$

回転はベクトル場からベクトル場を生成する演算です。

物理的意味

$\nabla \times \bm{F}$ は、ベクトル場 $\bm{F}$ の各点における局所的な回転(渦)の強さと向きを表します。

微小な閉曲線に沿った循環(line integral)を面積で割った極限値が、その法線方向の回転成分です。

$$ (\nabla \times \bm{F}) \cdot \hat{\bm{n}} = \lim_{\Delta A \to 0} \frac{1}{\Delta A} \oint_{\partial A} \bm{F} \cdot d\bm{r} $$

2次元の場合

$\bm{F} = (F_x(x,y), F_y(x,y), 0)$ のとき、回転の $z$ 成分のみが非ゼロです。

$$ (\nabla \times \bm{F})_z = \frac{\partial F_y}{\partial x} – \frac{\partial F_x}{\partial y} $$

保存場との関係

定理: $\nabla \times \bm{F} = \bm{0}$ ⇔ $\bm{F}$ は保存場(ポテンシャル $\phi$ が存在して $\bm{F} = \nabla\phi$)

これは「渦なし場は勾配場である」ことを意味します。

ベクトル恒等式: 任意のスカラー場 $\phi$ に対して

$$ \nabla \times (\nabla \phi) = \bm{0} $$

これは「勾配の回転は常にゼロ」という恒等式です。

また、任意のベクトル場 $\bm{F}$ に対して

$$ \nabla \cdot (\nabla \times \bm{F}) = 0 $$

「回転の発散は常にゼロ」です。

具体例

例1: $\bm{F} = (-y, x, 0)$(剛体回転)

$$ \nabla \times \bm{F} = \left(0, 0, \frac{\partial x}{\partial x} – \frac{\partial(-y)}{\partial y}\right) = (0, 0, 2) $$

一様な渦度を持つ回転場です。

例2: $\bm{F} = (yz, xz, xy)$

$$ \nabla \times \bm{F} = (x-x, y-y, z-z) = (0, 0, 0) $$

渦なし → ポテンシャル $\phi = xyz$ が存在し、$\bm{F} = \nabla(xyz)$。

例3: $\bm{F} = (y^2, 2xy+z, y)$

$$ \nabla \times \bm{F} = (1-1, 0-0, 2y-2y) = (0, 0, 0) $$

渦なし。ポテンシャル $\phi = xy^2 + yz$ が存在。

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 20)
y = np.linspace(-3, 3, 20)
X, Y = np.meshgrid(x, y)

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# 例1: F=(-y,x) — rot = 2 (渦あり)
Fx1, Fy1 = -Y, X
curl_z1 = np.full_like(X, 2.0)
im1 = axes[0].pcolormesh(X, Y, curl_z1, cmap='coolwarm', shading='auto', vmin=-3, vmax=3)
axes[0].quiver(X, Y, Fx1, Fy1, alpha=0.6, color='k')
axes[0].set_title('$\\mathbf{F}=(-y,x)$\n$(\\nabla\\times\\mathbf{F})_z = 2$')
axes[0].set_aspect('equal')
plt.colorbar(im1, ax=axes[0], label='curl$_z$')

# 例2: F=(y,-x) — rot = -2 (逆渦)
Fx2, Fy2 = Y, -X
curl_z2 = np.full_like(X, -2.0)
im2 = axes[1].pcolormesh(X, Y, curl_z2, cmap='coolwarm', shading='auto', vmin=-3, vmax=3)
axes[1].quiver(X, Y, Fx2, Fy2, alpha=0.6, color='k')
axes[1].set_title('$\\mathbf{F}=(y,-x)$\n$(\\nabla\\times\\mathbf{F})_z = -2$')
axes[1].set_aspect('equal')
plt.colorbar(im2, ax=axes[1], label='curl$_z$')

# 例3: F=(x,y) — rot = 0 (保存場)
Fx3, Fy3 = X, Y
curl_z3 = np.zeros_like(X)
im3 = axes[2].pcolormesh(X, Y, curl_z3, cmap='coolwarm', shading='auto', vmin=-3, vmax=3)
axes[2].quiver(X, Y, Fx3, Fy3, alpha=0.6, color='k')
axes[2].set_title('$\\mathbf{F}=(x,y)$\n$(\\nabla\\times\\mathbf{F})_z = 0$(保存場)')
axes[2].set_aspect('equal')
plt.colorbar(im3, ax=axes[2], label='curl$_z$')

for ax in axes:
    ax.set_xlabel('x')
    ax.set_ylabel('y')

plt.tight_layout()
plt.savefig('curl_vector.png', dpi=150, bbox_inches='tight')
plt.show()

まとめ

  • 回転 $\nabla \times \bm{F}$ は渦の強さと方向を表すベクトル量
  • 行列式表現で体系的に計算できる
  • $\nabla \times \bm{F} = \bm{0}$ ⇔ 保存場(ポテンシャル存在)
  • $\nabla \times (\nabla\phi) = \bm{0}$、$\nabla \cdot (\nabla \times \bm{F}) = 0$ は重要な恒等式

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