勾配・発散・回転の定義と直感的理解

山の斜面を登るとき、あなたは無意識に「最も急な方向」を見極めています。地図上の等高線に対して垂直な方向が最急勾配であり、その傾斜の度合いと方向を数学的に表したのが勾配(gradient)です。

一方、水道の蛇口を開けると水が湧き出し、排水口では水が吸い込まれます。ある点から流体が湧き出す度合いを表すのが発散(divergence)です。そして、台風の渦巻きのように流体が回転する度合いを表すのが回転(curl、rot とも呼ぶ)です。

これら3つの演算子 — 勾配(grad)、発散(div)、回転(curl) — はベクトル解析の3大演算子であり、物理学と工学のあらゆる場面で現れます。

  • 電磁気学: マクスウェル方程式は勾配・発散・回転で書かれる
  • 流体力学: ナビエ・ストークス方程式の定式化
  • 熱力学: フーリエの熱伝導則(温度の勾配が熱流を決める)
  • 機械学習: 勾配降下法(損失関数の勾配方向に最適化)

本記事の内容

  • ナブラ演算子 $\nabla$ の定義と3つの演算の統一的理解
  • 勾配(grad)の定義、物理的意味、具体的な計算
  • 発散(div)の定義、物理的意味、湧き出しの概念
  • 回転(curl)の定義、物理的意味、渦の概念
  • 重要な恒等式($\nabla \times \nabla f = \bm{0}$、$\nabla \cdot (\nabla \times \bm{F}) = 0$)
  • Pythonによるベクトル場の可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

ナブラ演算子 — 3つの演算を統一する道具

ナブラの定義

3次元空間でのナブラ演算子(nabla operator, del operator)は、形式的に次のように定義されるベクトル微分演算子です。

$$ \begin{equation} \nabla = \begin{pmatrix} \partial / \partial x \\ \partial / \partial y \\ \partial / \partial z \end{pmatrix} \end{equation} $$

これ自体はベクトルでも関数でもない「演算子」ですが、ベクトルのように扱うことで、3つの演算が統一的に理解できます。

演算 表記 入力 出力 ナブラとの関係
勾配 $\nabla f$ スカラー場 ベクトル場 ナブラ × スカラー(スカラー倍)
発散 $\nabla \cdot \bm{F}$ ベクトル場 スカラー場 ナブラとの内積
回転 $\nabla \times \bm{F}$ ベクトル場 ベクトル場 ナブラとの外積

ナブラを「偏微分のベクトル」と見なすと、勾配は「スカラーとの積」、発散は「内積」、回転は「外積」に対応します。この統一的な見方が、ベクトル解析の計算を体系的に行う鍵です。

では、各演算を順に詳しく見ていきましょう。まずは最も直感的な「勾配」からです。

勾配(gradient)

直感的な理解

勾配を理解するには、山の地形図を思い浮かべてください。

地形図の等高線は標高が等しい点を結んだ線です。ある地点に立ったとき、最も急に登れる方向はどちらでしょうか。それは等高線に垂直な方向です。そしてその「急さ」(傾斜の度合い)は等高線の間隔が狭いほど大きくなります。

勾配 $\nabla f$ は、まさにこの「最急方向」と「傾斜の度合い」を一つのベクトルで表したものです。

  • 方向: $f$ が最も急速に増加する方向
  • 大きさ: その方向への $f$ の変化率

数学的定義

スカラー場 $f(x, y, z)$ の勾配は

$$ \begin{equation} \nabla f = \text{grad}\, f = \begin{pmatrix} \partial f / \partial x \\ \partial f / \partial y \\ \partial f / \partial z \end{pmatrix} \end{equation} $$

各成分は座標軸方向への偏微分です。

方向微分との関係

勾配と方向微分の関係を明らかにしましょう。単位ベクトル $\hat{\bm{n}}$ 方向への方向微分は

$$ D_{\hat{\bm{n}}} f = \nabla f \cdot \hat{\bm{n}} = |\nabla f| \cos\theta $$

ここで $\theta$ は $\nabla f$ と $\hat{\bm{n}}$ のなす角です。$\cos\theta = 1$($\theta = 0$)のとき最大になるので、$\nabla f$ の方向が $f$ の変化率が最大の方向です。

具体例

$f(x, y) = x^2 + y^2$(放物面)の勾配は

$$ \nabla f = \begin{pmatrix} 2x \\ 2y \end{pmatrix} $$

各点 $(x, y)$ での勾配ベクトルは原点から外向きを指し、大きさは原点からの距離に比例します。これは放物面が原点から離れるほど急になることに対応しています。

等高線 $f = c$ は円 $x^2 + y^2 = c$ であり、勾配ベクトル $(2x, 2y)$ はこの円に対して確かに垂直(法線方向)を向いています。

勾配がスカラー場の「最急方向」を教えてくれることを理解しました。次に、ベクトル場の「湧き出し」を定量化する発散を見ていきましょう。

発散(divergence)

直感的な理解

発散を理解するには、部屋の中の空気の流れを想像してください。

暖房器具の周りでは暖められた空気が膨張して外向きに流れ出します。この点は「湧き出し」(source)です。逆にエアコンの吸い込み口では空気が集まって吸い込まれます。この点は「吸い込み」(sink)です。

発散は、ある点でのベクトル場の湧き出しの度合いを表します。

  • $\nabla \cdot \bm{F} > 0$: 湧き出し(source)— 流体が外向きに流れ出す
  • $\nabla \cdot \bm{F} < 0$: 吸い込み(sink)— 流体が内向きに集まる
  • $\nabla \cdot \bm{F} = 0$: 湧き出しも吸い込みもない(非圧縮流)

もっと厳密に言えば、発散は微小体積 $\Delta V$ を囲む表面から流れ出す「正味の流量」を体積で割ったものの極限です。

$$ \nabla \cdot \bm{F} = \lim_{\Delta V \to 0} \frac{1}{\Delta V} \oint_{\partial(\Delta V)} \bm{F} \cdot d\bm{S} $$

数学的定義

ベクトル場 $\bm{F} = (F_x, F_y, F_z)$ の発散は

$$ \begin{equation} \nabla \cdot \bm{F} = \text{div}\,\bm{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} \end{equation} $$

発散はナブラ演算子とベクトル場の内積として計算されます。結果はスカラー場です。

具体例

$\bm{F}(x, y, z) = (x, y, z)$(原点から放射状に広がるベクトル場)の発散は

$$ \nabla \cdot \bm{F} = 1 + 1 + 1 = 3 $$

全ての点で発散が正(= 3)です。これは原点から外向きに広がるベクトル場が、空間のあらゆる点で「膨張」していることを意味します。

一方、$\bm{G}(x, y) = (-y, x)$(反時計回りの回転場)の発散は

$$ \nabla \cdot \bm{G} = \frac{\partial(-y)}{\partial x} + \frac{\partial x}{\partial y} = 0 + 0 = 0 $$

回転するだけの場には湧き出しも吸い込みもないので、発散がゼロです。

発散が「湧き出し」を定量化するのに対し、次に見る回転は「渦」を定量化します。

回転(curl, rotation)

直感的な理解

回転を理解するには、川の流れに小さな水車を置く場面を想像してください。

流れが一様なら水車は回りません。しかし、流速が位置によって異なると(たとえば川の中央は速く、岸に近いと遅い)、水車の片側がもう片側より強い力を受けて回転します。この回転の度合いと軸の方向を表すのが回転(curl)です。

  • 方向: 右手の法則に従い、渦の回転軸の方向
  • 大きさ: 渦の強さ(角速度に比例)

数学的定義

ベクトル場 $\bm{F} = (F_x, F_y, F_z)$ の回転は

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

行列式を展開すると

$$ \nabla \times \bm{F} = \begin{pmatrix} \partial F_z/\partial y – \partial F_y/\partial z \\ \partial F_x/\partial z – \partial F_z/\partial x \\ \partial F_y/\partial x – \partial F_x/\partial y \end{pmatrix} $$

回転はナブラ演算子とベクトル場の外積として計算されます。結果はベクトル場です。

具体例

$\bm{G}(x, y, z) = (-y, x, 0)$($z$ 軸周りの反時計回り回転)の回転は

$$ \nabla \times \bm{G} = \begin{pmatrix} \partial(0)/\partial y – \partial(x)/\partial z \\ \partial(-y)/\partial z – \partial(0)/\partial x \\ \partial(x)/\partial x – \partial(-y)/\partial y \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 2 \end{pmatrix} $$

回転ベクトルは $(0, 0, 2)$ で、$z$ 軸の正方向を向いています。これは反時計回りの回転に右手の法則を適用した結果と一致します。大きさ2は角速度が一定であることを反映しています。

勾配・発散・回転の3つの演算を理解したところで、次にこれらの間に成り立つ重要な恒等式を見ていきましょう。

重要な恒等式

回転の勾配はゼロ

$$ \begin{equation} \nabla \times (\nabla f) = \bm{0} \end{equation} $$

証明: $\nabla f = (\partial f/\partial x, \partial f/\partial y, \partial f/\partial z)$ の回転を計算します。

$z$ 成分は $\partial^2 f/\partial x \partial y – \partial^2 f/\partial y \partial x = 0$(偏微分の交換可能性、シュワルツの定理)です。$x$ 成分と $y$ 成分も同様にゼロになります。$\square$

物理的意味: 勾配場(保存力場)には渦がない。重力場が保存力であることの数学的表現です。逆に $\nabla \times \bm{F} = \bm{0}$ ならば $\bm{F} = \nabla f$ となるスカラーポテンシャル $f$ が存在します(ポアンカレの補題)。

回転場の発散はゼロ

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

証明: $\nabla \times \bm{F}$ の各成分を代入して発散を計算すると

$$ \frac{\partial}{\partial x}\left(\frac{\partial F_z}{\partial y} – \frac{\partial F_y}{\partial z}\right) + \frac{\partial}{\partial y}\left(\frac{\partial F_x}{\partial z} – \frac{\partial F_z}{\partial x}\right) + \frac{\partial}{\partial z}\left(\frac{\partial F_y}{\partial x} – \frac{\partial F_x}{\partial y}\right) = 0 $$

各項を展開すると、6つの2階偏微分が符号を変えて対になり、全て相殺します。$\square$

物理的意味: 渦の場には正味の湧き出しがない。電磁気学で磁場 $\bm{B}$ が $\nabla \cdot \bm{B} = 0$(磁気単極子は存在しない)であることと関連しています。

ラプラシアン

勾配の発散はラプラシアンと呼ばれる重要な演算子です。

$$ \begin{equation} \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} \end{equation} $$

ラプラシアンは熱伝導方程式 $\partial u/\partial t = \alpha \nabla^2 u$、波動方程式 $\partial^2 u/\partial t^2 = c^2 \nabla^2 u$、ラプラス方程式 $\nabla^2 u = 0$ など、物理学の基本方程式に登場します。

その他の恒等式

恒等式 用途
$\nabla(fg) = f\nabla g + g\nabla f$ 積の勾配
$\nabla \cdot (f\bm{F}) = f\nabla \cdot \bm{F} + \bm{F} \cdot \nabla f$ スカラー倍の発散
$\nabla \times (f\bm{F}) = f\nabla \times \bm{F} + \nabla f \times \bm{F}$ スカラー倍の回転
$\nabla \times (\nabla \times \bm{F}) = \nabla(\nabla \cdot \bm{F}) – \nabla^2 \bm{F}$ 二重回転

これらの理論をPythonで可視化して、直感的な理解をさらに深めましょう。

Pythonでの可視化

勾配の可視化

スカラー場の勾配ベクトル場を等高線とともに表示します。

import numpy as np
import matplotlib.pyplot as plt

# スカラー場: f(x, y) = sin(x) * cos(y)
x = np.linspace(-2*np.pi, 2*np.pi, 200)
y = np.linspace(-2*np.pi, 2*np.pi, 200)
X, Y = np.meshgrid(x, y)
F = np.sin(X) * np.cos(Y)

# 勾配の計算
dFdx = np.cos(X) * np.cos(Y)   # ∂f/∂x
dFdy = -np.sin(X) * np.sin(Y)  # ∂f/∂y

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

# (a) 等高線と勾配ベクトル
ax = axes[0]
cs = ax.contourf(X, Y, F, levels=30, cmap="coolwarm", alpha=0.8)
plt.colorbar(cs, ax=ax, label="$f(x,y)$")

# 間引いてベクトルを表示
skip = 15
ax.quiver(X[::skip, ::skip], Y[::skip, ::skip],
          dFdx[::skip, ::skip], dFdy[::skip, ::skip],
          color="black", alpha=0.7, scale=15)
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("y", fontsize=12)
ax.set_title("$f(x,y) = \\sin(x)\\cos(y)$ and $\\nabla f$", fontsize=13)
ax.set_aspect("equal")

# (b) 勾配の大きさ
ax = axes[1]
grad_mag = np.sqrt(dFdx**2 + dFdy**2)
cs2 = ax.contourf(X, Y, grad_mag, levels=30, cmap="hot", alpha=0.8)
plt.colorbar(cs2, ax=ax, label="$|\\nabla f|$")

# 等高線(勾配の大きさゼロの点 = 極値点を確認)
ax.contour(X, Y, grad_mag, levels=[0.05], colors="cyan", linewidths=2)
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("y", fontsize=12)
ax.set_title("Gradient Magnitude $|\\nabla f|$", fontsize=13)
ax.set_aspect("equal")

plt.tight_layout()
plt.savefig("gradient_viz.png", dpi=150, bbox_inches="tight")
plt.show()

このグラフから、勾配の幾何学的な意味が視覚的に読み取れます。

  1. 左図(等高線と勾配ベクトル): スカラー場 $f(x,y) = \sin(x)\cos(y)$ の等高線(色)の上に勾配ベクトル(黒い矢印)を重ねています。勾配ベクトルが等高線に対して常に垂直であることが確認できます。また、等高線の間隔が狭い(変化が急な)場所ほど勾配ベクトルが長くなっています。

  2. 右図(勾配の大きさ): 勾配の大きさ $|\nabla f|$ の分布を示しています。水色の線は $|\nabla f| \approx 0$ の等値線であり、関数の極大点・極小点・鞍点に対応しています。これらの点では勾配がゼロになるため、最適化における停留点(臨界点)と一致します。

発散と回転の可視化

2次元ベクトル場の発散と回転($z$ 成分)を可視化します。

import numpy as np
import matplotlib.pyplot as plt

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

fig, axes = plt.subplots(2, 3, figsize=(16, 10))

# --- ベクトル場1: 放射状場 F = (x, y) ---
Fx1, Fy1 = X, Y
div1 = 2 * np.ones_like(X)  # ∂x/∂x + ∂y/∂y = 2
curl1 = np.zeros_like(X)    # ∂y/∂x - ∂x/∂y = 0

ax = axes[0, 0]
skip = 12
ax.quiver(X[::skip, ::skip], Y[::skip, ::skip],
          Fx1[::skip, ::skip], Fy1[::skip, ::skip],
          color="blue", alpha=0.7)
ax.set_title("$\\bm{F}_1 = (x, y)$\nRadial field", fontsize=12)
ax.set_aspect("equal")
ax.grid(True, alpha=0.3)

ax = axes[0, 1]
cs1 = ax.contourf(X, Y, div1, levels=20, cmap="RdBu_r")
plt.colorbar(cs1, ax=ax, label="div $\\bm{F}_1$")
ax.set_title(f"div $\\bm{{F}}_1$ = 2 (constant)", fontsize=12)
ax.set_aspect("equal")

ax = axes[0, 2]
cs2 = ax.contourf(X, Y, curl1, levels=20, cmap="PiYG")
plt.colorbar(cs2, ax=ax, label="curl$_z$ $\\bm{F}_1$")
ax.set_title(f"curl$_z$ $\\bm{{F}}_1$ = 0", fontsize=12)
ax.set_aspect("equal")

# --- ベクトル場2: 回転場 F = (-y, x) ---
Fx2, Fy2 = -Y, X
div2 = np.zeros_like(X)     # ∂(-y)/∂x + ∂x/∂y = 0
curl2 = 2 * np.ones_like(X) # ∂x/∂x - ∂(-y)/∂y = 2

ax = axes[1, 0]
ax.quiver(X[::skip, ::skip], Y[::skip, ::skip],
          Fx2[::skip, ::skip], Fy2[::skip, ::skip],
          color="red", alpha=0.7)
ax.set_title("$\\bm{F}_2 = (-y, x)$\nRotational field", fontsize=12)
ax.set_aspect("equal")
ax.grid(True, alpha=0.3)

ax = axes[1, 1]
cs3 = ax.contourf(X, Y, div2, levels=20, cmap="RdBu_r")
plt.colorbar(cs3, ax=ax, label="div $\\bm{F}_2$")
ax.set_title(f"div $\\bm{{F}}_2$ = 0", fontsize=12)
ax.set_aspect("equal")

ax = axes[1, 2]
cs4 = ax.contourf(X, Y, curl2, levels=20, cmap="PiYG")
plt.colorbar(cs4, ax=ax, label="curl$_z$ $\\bm{F}_2$")
ax.set_title(f"curl$_z$ $\\bm{{F}}_2$ = 2 (constant)", fontsize=12)
ax.set_aspect("equal")

for ax in axes.flat:
    ax.set_xlabel("x", fontsize=10)
    ax.set_ylabel("y", fontsize=10)

plt.suptitle("Divergence and Curl of Vector Fields", fontsize=14, y=1.02)
plt.tight_layout()
plt.savefig("div_curl_viz.png", dpi=150, bbox_inches="tight")
plt.show()

このグラフから、発散と回転の物理的意味が明確に読み取れます。

  1. 上段(放射状場 $\bm{F}_1 = (x, y)$): 原点から放射状に広がるベクトル場です。発散(中央)は空間全体で一定値2であり、全ての点で均一に「膨張」していることを示しています。回転(右)はゼロであり、この場には渦がないことを確認できます。

  2. 下段(回転場 $\bm{F}_2 = (-y, x)$): 反時計回りの回転ベクトル場です。発散(中央)はゼロであり、湧き出しも吸い込みもありません。回転(右)は空間全体で一定値2であり、全ての点で同じ強さの渦が存在することを示しています。

この2つの例は「純粋な湧き出し場」と「純粋な渦場」の典型であり、発散と回転が独立な性質を測定していることを示しています。

恒等式の数値検証

重要な恒等式を数値的に検証します。

import numpy as np

# 格子点の生成
n = 50
x = np.linspace(-2, 2, n)
y = np.linspace(-2, 2, n)
z = np.linspace(-2, 2, n)
dx = x[1] - x[0]
X, Y, Z = np.meshgrid(x, y, z, indexing="ij")

# スカラー場: f = x^2 y + y^2 z + z^2 x
f = X**2 * Y + Y**2 * Z + Z**2 * X

# 勾配の計算(中心差分)
grad_f_x = np.gradient(f, dx, axis=0)
grad_f_y = np.gradient(f, dx, axis=1)
grad_f_z = np.gradient(f, dx, axis=2)

# curl(grad f) の計算(ゼロになるはず)
curl_grad_x = np.gradient(grad_f_z, dx, axis=1) - np.gradient(grad_f_y, dx, axis=2)
curl_grad_y = np.gradient(grad_f_x, dx, axis=2) - np.gradient(grad_f_z, dx, axis=0)
curl_grad_z = np.gradient(grad_f_y, dx, axis=0) - np.gradient(grad_f_x, dx, axis=1)

max_curl_grad = np.max(np.sqrt(curl_grad_x**2 + curl_grad_y**2 + curl_grad_z**2))
print(f"恒等式1: max|curl(grad f)| = {max_curl_grad:.6e}")

# ベクトル場: F = (yz, xz, xy)
Fx = Y * Z
Fy = X * Z
Fz = X * Y

# curl F の計算
curl_F_x = np.gradient(Fz, dx, axis=1) - np.gradient(Fy, dx, axis=2)
curl_F_y = np.gradient(Fx, dx, axis=2) - np.gradient(Fz, dx, axis=0)
curl_F_z = np.gradient(Fy, dx, axis=0) - np.gradient(Fx, dx, axis=1)

# div(curl F) の計算(ゼロになるはず)
div_curl = (np.gradient(curl_F_x, dx, axis=0)
           + np.gradient(curl_F_y, dx, axis=1)
           + np.gradient(curl_F_z, dx, axis=2))

max_div_curl = np.max(np.abs(div_curl))
print(f"恒等式2: max|div(curl F)| = {max_div_curl:.6e}")

# ラプラシアンの計算: ∇²f = 2y + 2z + 2x(解析解)
laplacian_numeric = (np.gradient(grad_f_x, dx, axis=0)
                    + np.gradient(grad_f_y, dx, axis=1)
                    + np.gradient(grad_f_z, dx, axis=2))
laplacian_analytic = 2*Y + 2*Z + 2*X

max_laplacian_error = np.max(np.abs(laplacian_numeric - laplacian_analytic))
print(f"ラプラシアン: max|数値 - 解析| = {max_laplacian_error:.6e}")

この数値検証から、ベクトル解析の恒等式が確かに成立していることが確認できます。curl(grad f)div(curl F) の最大値が数値精度の範囲で実質ゼロであり、理論の予測と完全に一致しています。ラプラシアンの解析解との誤差も有限差分の精度に起因する微小な値に留まっています。

マクスウェル方程式への接続

勾配・発散・回転の応用例として、マクスウェル方程式を示しておきます。

import numpy as np
import matplotlib.pyplot as plt

# 点電荷による電場の可視化
fig, axes = plt.subplots(1, 2, figsize=(14, 6))

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

# 点電荷の電場: E = q/(4πε₀) * r/|r|³
q = 1.0
R = np.sqrt(X**2 + Y**2)
R_safe = np.maximum(R, 0.3)  # ゼロ除算を避ける
Ex = q * X / R_safe**3
Ey = q * Y / R_safe**3

# (a) 電場ベクトルと電位の等高線
ax = axes[0]
V = q / R_safe  # 電位(スカラーポテンシャル)
cs = ax.contour(X, Y, V, levels=np.linspace(0.5, 5, 15), cmap="Oranges")
skip = 12
E_mag = np.sqrt(Ex**2 + Ey**2)
ax.quiver(X[::skip, ::skip], Y[::skip, ::skip],
          (Ex/E_mag)[::skip, ::skip], (Ey/E_mag)[::skip, ::skip],
          color="blue", alpha=0.6)
ax.plot(0, 0, "ro", markersize=10, label="Point charge (+)")
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("y", fontsize=12)
ax.set_title("$\\bm{E} = -\\nabla V$ (Gauss's law)", fontsize=13)
ax.legend(fontsize=10)
ax.set_aspect("equal")
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

# (b) 磁場(直線電流)
ax = axes[1]
# ビオ・サバールの法則: B ∝ (-y, x)/r²
Bx = -Y / R_safe**2
By = X / R_safe**2
B_mag = np.sqrt(Bx**2 + By**2)

ax.streamplot(X, Y, Bx, By, color=np.log(B_mag + 1e-10), cmap="viridis",
              density=2, linewidth=1)
ax.plot(0, 0, "k^", markersize=12, label="Current (into page)")
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("y", fontsize=12)
ax.set_title("$\\nabla \\times \\bm{B} = \\mu_0 \\bm{J}$ (Ampere's law)", fontsize=13)
ax.legend(fontsize=10)
ax.set_aspect("equal")
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

plt.tight_layout()
plt.savefig("maxwell_viz.png", dpi=150, bbox_inches="tight")
plt.show()

このグラフから、勾配・発散・回転がマクスウェル方程式を通じて電磁気学の基本法則を表現していることが読み取れます。

  1. 左図(ガウスの法則): 点電荷の電場 $\bm{E}$ は電位 $V$ の勾配の符号反転 $\bm{E} = -\nabla V$ で与えられます。電場ベクトル(青い矢印)が等電位面(オレンジの等高線)に垂直であることが確認できます。$\nabla \cdot \bm{E} = \rho/\varepsilon_0$(ガウスの法則)は、電荷のある点で発散が非ゼロになることを表しています。

  2. 右図(アンペールの法則): 直線電流による磁場 $\bm{B}$ は電流の周りを渦巻くように分布しています。$\nabla \times \bm{B} = \mu_0 \bm{J}$(アンペールの法則)は、電流が流れている点で回転が非ゼロになることを表しています。

ヘルムホルツ分解との関連

本記事で学んだ発散と回転は、実はベクトル場を完全に特徴付けるための2つの「独立な情報」に対応しています。ヘルムホルツの分解定理によれば、適切な条件のもとで任意のベクトル場 $\bm{F}$ は

$$ \bm{F} = -\nabla \phi + \nabla \times \bm{A} $$

と一意に分解できます。ここで $\phi$ はスカラーポテンシャル、$\bm{A}$ はベクトルポテンシャルです。第1項 $-\nabla \phi$ は渦なし成分(irrotational part)であり $\nabla \times (-\nabla \phi) = \bm{0}$ を満たします。第2項 $\nabla \times \bm{A}$ は湧き出しなし成分(solenoidal part)であり $\nabla \cdot (\nabla \times \bm{A}) = 0$ を満たします。

この分解は流体力学では「速度場をポテンシャル流と渦成分に分ける」ことに対応し、電磁気学ではスカラーポテンシャル $\phi$ とベクトルポテンシャル $\bm{A}$ を用いたマクスウェル方程式の再定式化に直結します。勾配・発散・回転の3つの演算子は、このようにベクトル場の構造を理解するための本質的な道具です。次のステップとして、ガウスの発散定理やストークスの定理を学ぶと、これらの微分演算子と積分の深い関係が明らかになります。

まとめ

本記事では、ベクトル解析の3大演算子について解説しました。

  • ナブラ演算子 $\nabla$ は偏微分のベクトルであり、スカラー倍(勾配)、内積(発散)、外積(回転)の3通りの使い方がある
  • 勾配 $\nabla f$ はスカラー場の最急方向と変化率を表すベクトル場であり、等高面に垂直な方向を指す
  • 発散 $\nabla \cdot \bm{F}$ はベクトル場の湧き出しの度合いを表すスカラー場であり、流体の膨張/圧縮を定量化する
  • 回転 $\nabla \times \bm{F}$ はベクトル場の渦の強さと方向を表すベクトル場であり、流体の局所的な回転を定量化する
  • $\nabla \times (\nabla f) = \bm{0}$(勾配場に渦なし)と $\nabla \cdot (\nabla \times \bm{F}) = 0$(渦場に湧き出しなし)は基本恒等式

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