発散(div)の定義と物理的意味

ベクトル場がある点から「湧き出している」のか「吸い込まれている」のかを定量化するのが発散(divergence)です。流体の湧き出しや吸い込み、電荷による電場の発散など、物理学の基本法則を記述するのに不可欠な概念です。

ガウスの法則(電磁気学)や連続の方程式(流体力学)は、発散を用いて表現されます。本記事では、発散の定義、物理的意味、そしてガウスの発散定理との関係を解説します。

本記事の内容

  • 発散の定義
  • 物理的意味(湧き出し・吸い込み)
  • ガウスの発散定理
  • 連続の方程式への応用
  • Pythonでの可視化

前提知識

発散の定義

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

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

発散はベクトル場からスカラー場を生成する演算です。

物理的意味

発散は、ある点におけるベクトル場の湧き出しの強さを表します。

  • $\nabla \cdot \bm{F} > 0$: その点は湧き出し(source) — ベクトル場が外向きに広がる
  • $\nabla \cdot \bm{F} < 0$: その点は吸い込み(sink) — ベクトル場が内向きに集まる
  • $\nabla \cdot \bm{F} = 0$: 湧き出しなし(ソレノイダル場) — 入る量と出る量が等しい

直感的理解

微小な箱を考えたとき、箱から出ていくベクトル場のフラックスの正味の量が発散です。

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

ガウスの発散定理

閉曲面 $\partial V$ で囲まれた体積 $V$ に対して、

$$ \boxed{\oint_{\partial V} \bm{F} \cdot d\bm{A} = \int_V \nabla \cdot \bm{F} \, dV} $$

左辺は閉曲面を通る全フラックス、右辺は体積内の湧き出しの総量です。

物理への応用

電磁気学: ガウスの法則

$$ \nabla \cdot \bm{E} = \frac{\rho}{\varepsilon_0} $$

電荷密度 $\rho$ がある場所で電場 $\bm{E}$ が湧き出します。

流体力学: 連続の方程式

$$ \frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \bm{v}) = 0 $$

非圧縮性流体($\rho$ = 一定)では $\nabla \cdot \bm{v} = 0$(湧き出しなし)。

磁場

$$ \nabla \cdot \bm{B} = 0 $$

磁気単極子が存在しないことを表します。

具体例

例1: $\bm{F} = (x, y, z)$(放射状場)

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

全空間で一様に湧き出しています。

例2: $\bm{F} = (-y, x, 0)$(渦場)

$$ \nabla \cdot \bm{F} = 0 + 0 + 0 = 0 $$

ソレノイダル場(湧き出しなし)。

例3: $\bm{F} = \frac{\bm{r}}{r^3} = \frac{(x,y,z)}{(x^2+y^2+z^2)^{3/2}}$(クーロン場)

原点以外では $\nabla \cdot \bm{F} = 0$ です。原点では $\nabla \cdot \bm{F} = 4\pi\delta^3(\bm{r})$(デルタ関数的な湧き出し)。

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 = (x, y) — div > 0(湧き出し)
Fx1, Fy1 = X, Y
axes[0].quiver(X, Y, Fx1, Fy1, np.sqrt(Fx1**2+Fy1**2), cmap='Reds', alpha=0.8)
axes[0].set_title('$\\mathbf{F}=(x,y)$, div$=2$ > 0(湧き出し)')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[0].set_aspect('equal')

# 例2: F = (-y, x) — div = 0(ソレノイダル)
Fx2, Fy2 = -Y, X
axes[1].quiver(X, Y, Fx2, Fy2, np.sqrt(Fx2**2+Fy2**2), cmap='Blues', alpha=0.8)
axes[1].set_title('$\\mathbf{F}=(-y,x)$, div$=0$(ソレノイダル)')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
axes[1].set_aspect('equal')

# 例3: F = (-x, -y) — div < 0(吸い込み)
Fx3, Fy3 = -X, -Y
axes[2].quiver(X, Y, Fx3, Fy3, np.sqrt(Fx3**2+Fy3**2), cmap='Greens', alpha=0.8)
axes[2].set_title('$\\mathbf{F}=(-x,-y)$, div$=-2$ < 0(吸い込み)')
axes[2].set_xlabel('x')
axes[2].set_ylabel('y')
axes[2].set_aspect('equal')

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

湧き出し(左)、ソレノイダル(中央)、吸い込み(右)の3つのベクトル場の違いが視覚的に確認できます。

まとめ

  • 発散 $\nabla \cdot \bm{F} = \partial F_x/\partial x + \partial F_y/\partial y + \partial F_z/\partial z$
  • 発散は湧き出しの強さを表すスカラー量
  • $\nabla \cdot \bm{F} > 0$: 湧き出し、$< 0$: 吸い込み、$= 0$: ソレノイダル
  • ガウスの発散定理: 閉曲面のフラックス = 体積内の湧き出し総量
  • 物理応用: ガウスの法則、連続の方程式、$\nabla \cdot \bm{B} = 0$

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