テントの表面に太陽光が当たっているとします。テントの各点で光の強度(単位面積あたりのエネルギー)は異なり、テントの表面の向きによって受ける光の量も変わります。テント全体が受ける光の総エネルギーを計算するには、曲面上の各点での「光の強度×面積要素」を足し合わせる必要があります。これが面積分です。
面積分は線積分の次元を一つ上げたもので、曲線に沿った積分を曲面上に拡張します。物理学では流体のフラックス(流量)、電磁気学ではガウスの法則やファラデーの法則に不可欠です。
面積分を理解すると、以下のような応用が開けます。
- 電磁気学: ガウスの法則 $\oiint_S \bm{E} \cdot d\bm{A} = Q/\varepsilon_0$ は電場の面積分で電荷を求める
- 流体力学: 曲面を通過する流体の流量(フラックス)の計算
- 熱伝導: 物体表面からの放熱量の計算
- コンピュータグラフィックス: 曲面の面積やシェーディングの計算
本記事の内容
- スカラー場の面積分の定義と計算方法
- ベクトル場の面積分(フラックス積分)の定義
- 面積要素ベクトルの導出
- ガウスの発散定理とストークスの定理
- Pythonによる可視化と数値計算
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
- 線積分の定義と計算方法を解説する — 線積分の基礎
- 重積分の計算方法と座標変換 — 二重積分の基礎
スカラー場の面積分
直感的な理解
曲面の面積を考えてみましょう。平面の面積は「縦×横」で簡単に計算できますが、曲面の面積はどうでしょうか。たとえば、半径 $R$ の球の表面積を求めるにはどうすればよいでしょうか。
基本的なアイデアは線積分と同じです。曲面を微小な「パッチ」に分割し、各パッチの面積を足し合わせます。曲面上の各点で密度 $f(x, y, z)$ が定義されていれば、「密度×面積」を足し合わせたものがスカラー場の面積分です。
パラメータ化と面積要素
曲面 $S$ が2つのパラメータ $(u, v)$ によって
$$ \bm{r}(u, v) = (x(u,v), y(u,v), z(u,v)), \quad (u, v) \in D $$
とパラメータ化されているとします。パラメータ空間 $D$ の微小な長方形 $[u, u+du] \times [v, v+dv]$ は、曲面上の微小な平行四辺形に対応します。
$u$ 方向の辺は $\frac{\partial \bm{r}}{\partial u} du$、$v$ 方向の辺は $\frac{\partial \bm{r}}{\partial v} dv$ です。この平行四辺形の面積は外積の大きさで与えられます。
$$ \begin{equation} dS = \left\|\frac{\partial \bm{r}}{\partial u} \times \frac{\partial \bm{r}}{\partial v}\right\| du \, dv \end{equation} $$
これが面積要素(surface element)です。
面積分の定義
スカラー場 $f$ の曲面 $S$ 上の面積分は
$$ \begin{equation} \iint_S f \, dS = \iint_D f(\bm{r}(u, v)) \left\|\frac{\partial \bm{r}}{\partial u} \times \frac{\partial \bm{r}}{\partial v}\right\| du \, dv \end{equation} $$
$f = 1$ のとき、面積分は曲面 $S$ の面積 $\text{Area}(S) = \iint_S dS$ に等しくなります。
$z = g(x, y)$ の場合
曲面が $z = g(x, y)$ の形で与えられている場合、$\bm{r}(x, y) = (x, y, g(x,y))$ とパラメータ化できます。
$$ \frac{\partial \bm{r}}{\partial x} = (1, 0, g_x), \quad \frac{\partial \bm{r}}{\partial y} = (0, 1, g_y) $$
外積を計算すると $\frac{\partial \bm{r}}{\partial x} \times \frac{\partial \bm{r}}{\partial y} = (-g_x, -g_y, 1)$ であり
$$ \left\|\frac{\partial \bm{r}}{\partial x} \times \frac{\partial \bm{r}}{\partial y}\right\| = \sqrt{g_x^2 + g_y^2 + 1} $$
したがって
$$ \begin{equation} \iint_S f \, dS = \iint_D f(x, y, g(x,y)) \sqrt{1 + g_x^2 + g_y^2} \, dx \, dy \end{equation} $$
$\sqrt{1 + g_x^2 + g_y^2}$ は「曲面の傾き」による面積の補正因子です。平面($g_x = g_y = 0$)なら1ですが、傾きが急になるほど大きくなります。
計算例: 球の表面積
半径 $R$ の球を球面座標でパラメータ化します。
$$ \bm{r}(\theta, \phi) = (R\sin\theta\cos\phi, R\sin\theta\sin\phi, R\cos\theta) $$
面積要素を計算します。
$$ \frac{\partial \bm{r}}{\partial \theta} = (R\cos\theta\cos\phi, R\cos\theta\sin\phi, -R\sin\theta) $$
$$ \frac{\partial \bm{r}}{\partial \phi} = (-R\sin\theta\sin\phi, R\sin\theta\cos\phi, 0) $$
外積を計算すると(各成分を丁寧に計算して)
$$ \frac{\partial \bm{r}}{\partial \theta} \times \frac{\partial \bm{r}}{\partial \phi} = R^2\sin\theta(\sin\theta\cos\phi, \sin\theta\sin\phi, \cos\theta) $$
大きさは $\left\|\frac{\partial \bm{r}}{\partial \theta} \times \frac{\partial \bm{r}}{\partial \phi}\right\| = R^2\sin\theta$($0 \leq \theta \leq \pi$ で $\sin\theta \geq 0$)です。
したがって
$$ \text{Area}(S) = \int_0^{2\pi}\int_0^{\pi} R^2\sin\theta \, d\theta \, d\phi = R^2 \cdot 2 \cdot 2\pi = 4\pi R^2 $$
スカラー場の面積分で曲面の面積や質量を計算する方法がわかりました。次に、物理学でより重要なベクトル場の面積分(フラックス)を見てみましょう。
ベクトル場の面積分(フラックス)
フラックスの直感
水の流れの中に網を置いたとき、網を通り抜ける水の量(流量)を考えましょう。流量は、水の速度ベクトル $\bm{v}$ の、網の面に垂直な成分に面積を掛けたものです。
数学的には、曲面 $S$ の各点で法線ベクトル $\bm{n}$ を考え、ベクトル場 $\bm{F}$ の法線成分 $\bm{F} \cdot \bm{n}$ を曲面全体にわたって積分します。これがフラックス積分(flux integral)です。
定義
ベクトル場 $\bm{F}$ の曲面 $S$ を通るフラックスは
$$ \begin{equation} \Phi = \iint_S \bm{F} \cdot d\bm{A} = \iint_S \bm{F} \cdot \bm{n} \, dS \end{equation} $$
ここで $d\bm{A} = \bm{n} \, dS$ は面積要素ベクトルであり、面の法線方向を向き、大きさが面積要素 $dS$ に等しいベクトルです。
パラメータ化 $\bm{r}(u, v)$ を使うと
$$ d\bm{A} = \left(\frac{\partial \bm{r}}{\partial u} \times \frac{\partial \bm{r}}{\partial v}\right) du \, dv $$
$$ \begin{equation} \iint_S \bm{F} \cdot d\bm{A} = \iint_D \bm{F}(\bm{r}(u,v)) \cdot \left(\frac{\partial \bm{r}}{\partial u} \times \frac{\partial \bm{r}}{\partial v}\right) du \, dv \end{equation} $$
外積のベクトルをそのまま使えばよく、大きさを計算する必要がありません。
向き付け(orientation)
フラックスの値は曲面の向きに依存します。閉曲面(球面など)では通常、外向きの法線を正とします。非閉曲面では、曲面のどちら側を「表」とするかを選ぶ必要があります。
向きを反転すると、法線ベクトルの符号が変わり、フラックスの符号も変わります。
フラックスの概念を理解したところで、面積分に関する2つの重要な定理を紹介しましょう。
ガウスの発散定理とストークスの定理
ガウスの発散定理
ガウスの発散定理は、閉曲面を通るフラックスを、その内部の発散の体積積分に変換します。
定理(ガウスの発散定理): $V$ を有界な領域、$\partial V$ をその境界(外向き法線)とする。$\bm{F}$ が $V$ 上で $C^1$ 級ならば
$$ \begin{equation} \oiint_{\partial V} \bm{F} \cdot d\bm{A} = \iiint_V \nabla \cdot \bm{F} \, dV \end{equation} $$
ここで $\nabla \cdot \bm{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z}$ は発散(divergence)です。
発散 $\nabla \cdot \bm{F}$ は、その点でベクトル場が「湧き出しているか沈み込んでいるか」を表す量です。ガウスの発散定理は「境界面からの正味の流出量は、内部の湧き出しの総量に等しい」ということを述べています。
電磁気学のガウスの法則 $\oiint_S \bm{E} \cdot d\bm{A} = Q/\varepsilon_0$ は、発散定理の直接的な応用です。
ストークスの定理
ストークスの定理は、曲面上の回転の面積分を、その境界曲線に沿った線積分に変換します。
定理(ストークスの定理): $S$ を曲面、$\partial S$ をその境界曲線とする。$\bm{F}$ が $S$ 上で $C^1$ 級ならば
$$ \begin{equation} \oint_{\partial S} \bm{F} \cdot d\bm{r} = \iint_S (\nabla \times \bm{F}) \cdot d\bm{A} \end{equation} $$
ここで $\nabla \times \bm{F}$ は回転(curl)です。ストークスの定理は2次元のグリーンの定理の3次元版です。
アンペールの法則 $\oint_C \bm{B} \cdot d\bm{l} = \mu_0 I$ は、ストークスの定理の物理への応用です。
三大積分定理のまとめ
| 定理 | 左辺(高次元の境界上の積分) | 右辺(内部の積分) |
|---|---|---|
| 微積分学の基本定理 | $f(b) – f(a)$ | $\int_a^b f'(x) \, dx$ |
| グリーンの定理(ストークス 2D) | $\oint_C \bm{F} \cdot d\bm{r}$ | $\iint_D (\nabla \times \bm{F})_z \, dA$ |
| ストークスの定理 | $\oint_C \bm{F} \cdot d\bm{r}$ | $\iint_S (\nabla \times \bm{F}) \cdot d\bm{A}$ |
| ガウスの発散定理 | $\oiint_S \bm{F} \cdot d\bm{A}$ | $\iiint_V \nabla \cdot \bm{F} \, dV$ |
これらは全て「境界上の積分 = 内部の微分量の積分」という同じ構造を持っています。微分形式の言葉では、全てが一般化されたストークスの定理 $\int_{\partial M} \omega = \int_M d\omega$ の特殊な場合です。
この統一的な構造を物理的に理解するには、「保存量の収支」という観点が有用です。たとえば、ある領域内の電荷が変化するのは、境界面を通って電荷が出入りする場合に限られます。この直感はガウスの発散定理そのものであり、連続の方程式 $\frac{\partial \rho}{\partial t} + \nabla \cdot \bm{J} = 0$ の積分形に対応しています。同様に、ストークスの定理は「渦度の面積分が循環に等しい」という流体力学の基本的な関係を表しています。渦なし場($\nabla \times \bm{F} = \bm{0}$)では任意の閉曲線に沿った線積分がゼロになり、場がスカラーポテンシャルで表せるという重要な結果が導かれます。これらの定理を使いこなすことで、複雑な面積分や体積積分を、より計算しやすい等価な積分に置き換えることが可能になります。実際の問題では、直接面積分を計算するよりも発散定理やストークスの定理を経由した方が圧倒的に簡単になるケースが多いため、適用可能かどうかを常に検討する習慣をつけておくことが大切です。
理論的な内容を一通り学んだところで、Pythonで可視化してみましょう。
Pythonでの実装と可視化
面積分の可視化
曲面の面積要素とフラックスを可視化します。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 半球面 z = sqrt(1 - x^2 - y^2) の面積分を可視化
fig = plt.figure(figsize=(16, 5))
# (a) 曲面と法線ベクトル
ax1 = fig.add_subplot(131, projection='3d')
u = np.linspace(0, 2*np.pi, 40)
v = np.linspace(0, np.pi/2, 20)
U, V = np.meshgrid(u, v)
X = np.cos(U) * np.sin(V)
Y = np.sin(U) * np.sin(V)
Z = np.cos(V)
ax1.plot_surface(X, Y, Z, cmap='viridis', alpha=0.6, edgecolor='gray',
linewidth=0.3)
# 法線ベクトル(間引いて表示)
u_sparse = np.linspace(0, 2*np.pi, 8, endpoint=False)
v_sparse = np.linspace(np.pi/8, np.pi/2, 4)
for ui in u_sparse:
for vi in v_sparse:
px = np.cos(ui)*np.sin(vi)
py = np.sin(ui)*np.sin(vi)
pz = np.cos(vi)
# 法線 = (px, py, pz)(球面の法線は位置ベクトル方向)
scale = 0.2
ax1.quiver(px, py, pz, px*scale, py*scale, pz*scale,
color='red', arrow_length_ratio=0.3)
ax1.set_xlabel('x'); ax1.set_ylabel('y'); ax1.set_zlabel('z')
ax1.set_title('Hemisphere with normals', fontsize=12)
ax1.view_init(elev=25, azim=135)
# (b) 面積要素 dS = sin(theta) の可視化
ax2 = fig.add_subplot(132)
theta_vals = np.linspace(0, np.pi/2, 100)
dS = np.sin(theta_vals) # R=1 の球面の面積要素
ax2.plot(np.degrees(theta_vals), dS, 'b-', linewidth=2)
ax2.fill_between(np.degrees(theta_vals), 0, dS, alpha=0.3, color='blue')
ax2.set_xlabel(r'$\theta$ (degrees)', fontsize=12)
ax2.set_ylabel(r'$\sin\theta$ (area element factor)', fontsize=12)
ax2.set_title('Surface element on unit sphere', fontsize=12)
ax2.grid(True, alpha=0.3)
ax2.text(50, 0.6, r'$dS = R^2 \sin\theta \, d\theta \, d\phi$',
fontsize=13, color='blue')
# (c) 発散定理の検証
ax3 = fig.add_subplot(133)
# F = (x, y, z)(放射状ベクトル場)
# div F = 3
# 球面 r=R のフラックス = ∫∫ F・n dS = ∫∫ R dS = R * 4πR^2 = 4πR^3
# 体積積分 = ∫∫∫ 3 dV = 3 * (4/3)πR^3 = 4πR^3
R_values = np.linspace(0.5, 3, 50)
flux = 4 * np.pi * R_values**3
vol_integral = 4 * np.pi * R_values**3
ax3.plot(R_values, flux, 'b-', linewidth=2.5, label='Flux (surface integral)')
ax3.plot(R_values, vol_integral, 'r--', linewidth=2,
label='Volume integral of div')
ax3.set_xlabel('Radius R', fontsize=12)
ax3.set_ylabel('Value', fontsize=12)
ax3.set_title("Divergence Theorem: $\\mathbf{F}=(x,y,z)$", fontsize=12)
ax3.legend(fontsize=10)
ax3.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('surface_integral.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから、面積分の基本的な性質が確認できます。
-
左図(半球面と法線ベクトル): 単位半球面上の各点で外向きの法線ベクトル(赤い矢印)が描かれています。球面では法線ベクトルが位置ベクトルの方向を向くため、放射状に広がっています。
-
中央図(面積要素の因子): 球面座標での面積要素の因子 $\sin\theta$ が $\theta$ の関数としてプロットされています。赤道($\theta = 90°$)で最大、極($\theta = 0°$)で最小です。これは極付近の面積が小さいことを反映しています。
-
右図(発散定理の検証): ベクトル場 $\bm{F} = (x,y,z)$ について、球面上のフラックス(面積分)と球内部の発散の体積積分が完全に一致しています。$\nabla \cdot \bm{F} = 3$ なので体積積分は $3 \cdot \frac{4}{3}\pi R^3 = 4\pi R^3$ であり、フラックス $\iint_S \bm{F} \cdot \bm{n} \, dS = R \cdot 4\pi R^2 = 4\pi R^3$ と一致します。
フラックスの数値計算
フラックスを数値的に計算し、ガウスの発散定理を検証します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
# ベクトル場 F = (x^2, y^2, z^2)
# div F = 2x + 2y + 2z
# 単位球面上のフラックスを数値計算
def flux_integrand(phi, theta):
"""球面座標でのフラックスの被積分関数"""
x = np.sin(theta) * np.cos(phi)
y = np.sin(theta) * np.sin(phi)
z = np.cos(theta)
# F = (x^2, y^2, z^2)
Fx, Fy, Fz = x**2, y**2, z**2
# 法線 n = (x, y, z)(単位球面の外向き法線)
# F・n = x^3 + y^3 + z^3
# dS = sin(theta) d(theta) d(phi)
return (Fx*x + Fy*y + Fz*z) * np.sin(theta)
flux_numerical, _ = integrate.dblquad(
flux_integrand, 0, np.pi, 0, 2*np.pi
)
# 体積積分 ∫∫∫ div F dV = ∫∫∫ (2x+2y+2z) dV
# 対称性から ∫∫∫ x dV = ∫∫∫ y dV = ∫∫∫ z dV = 0(奇関数の球上の積分)
# なので体積積分 = 0
# 球面座標で直接計算
def div_integrand(phi, theta, r):
x = r * np.sin(theta) * np.cos(phi)
y = r * np.sin(theta) * np.sin(phi)
z = r * np.cos(theta)
div_F = 2*x + 2*y + 2*z
return div_F * r**2 * np.sin(theta)
vol_numerical, _ = integrate.tplquad(
div_integrand, 0, 1, 0, np.pi, 0, 2*np.pi
)
print(f"フラックス(面積分): {flux_numerical:.8f}")
print(f"体積積分(div F): {vol_numerical:.8f}")
print(f"差: {abs(flux_numerical - vol_numerical):.2e}")
print(f"\n理論的にはどちらも 0(対称性による)")
# 別の例: F = (x, 0, 0), div F = 1
def flux_integrand2(phi, theta):
x = np.sin(theta) * np.cos(phi)
y = np.sin(theta) * np.sin(phi)
z = np.cos(theta)
Fx, Fy, Fz = x, 0, 0
return (Fx*x + Fy*y + Fz*z) * np.sin(theta)
flux2, _ = integrate.dblquad(flux_integrand2, 0, np.pi, 0, 2*np.pi)
vol2 = 4 * np.pi / 3 # ∫∫∫ 1 dV = 4π/3
print(f"\nF = (x, 0, 0):")
print(f"フラックス: {flux2:.8f}")
print(f"体積積分: {vol2:.8f}")
print(f"差: {abs(flux2 - vol2):.2e}")
数値計算の結果、フラックス(面積分)と発散の体積積分が高い精度で一致し、ガウスの発散定理が数値的に検証されました。$\bm{F} = (x^2, y^2, z^2)$ の場合、$\nabla \cdot \bm{F} = 2x + 2y + 2z$ は奇関数であるため、球上の体積積分はゼロとなり、フラックスもゼロです。$\bm{F} = (x, 0, 0)$ の場合、$\nabla \cdot \bm{F} = 1$ であるため体積積分は球の体積 $4\pi/3$ に等しく、フラックスも $4\pi/3$ に一致します。
面積分の具体的な計算例
例1: 放物面上のスカラー場の面積分
放物面 $z = x^2 + y^2$($x^2 + y^2 \leq 1$)上で $f(x,y,z) = z$ の面積分を計算しましょう。
$g(x,y) = x^2 + y^2$ なので $g_x = 2x$, $g_y = 2y$ です。面積要素の因子は
$$ \sqrt{1 + g_x^2 + g_y^2} = \sqrt{1 + 4x^2 + 4y^2} $$
極座標に変換すると $x^2 + y^2 = r^2$, $dA = r\,dr\,d\theta$ なので
$$ \iint_S z \, dS = \int_0^{2\pi}\int_0^1 r^2 \cdot \sqrt{1 + 4r^2} \cdot r \, dr \, d\theta = 2\pi \int_0^1 r^3\sqrt{1 + 4r^2} \, dr $$
$u = 1 + 4r^2$ と置換すると $du = 8r\,dr$, $r^2 = (u-1)/4$ で
$$ = 2\pi \int_1^5 \frac{u-1}{4} \cdot \sqrt{u} \cdot \frac{du}{8} = \frac{\pi}{16}\int_1^5 (u^{3/2} – u^{1/2})\,du $$
各項を積分すると $\frac{\pi}{16}\left[\frac{2}{5}u^{5/2} – \frac{2}{3}u^{3/2}\right]_1^5 = \frac{\pi}{16}\left(\frac{2}{5}(5^{5/2} – 1) – \frac{2}{3}(5^{3/2} – 1)\right)$ が得られます。
例2: 円柱面のフラックス
半径 $a$、高さ $h$ の円柱面を通るベクトル場 $\bm{F} = (x, y, 0)$ のフラックスを計算します。円柱面のパラメータ化は $\bm{r}(\theta, z) = (a\cos\theta, a\sin\theta, z)$ です。
法線ベクトルを計算すると
$$ \frac{\partial\bm{r}}{\partial\theta} \times \frac{\partial\bm{r}}{\partial z} = (-a\sin\theta, a\cos\theta, 0) \times (0, 0, 1) = (a\cos\theta, a\sin\theta, 0) $$
フラックスの被積分関数は $\bm{F} \cdot (\bm{r}_\theta \times \bm{r}_z) = a\cos\theta \cdot a\cos\theta + a\sin\theta \cdot a\sin\theta = a^2$ です。
$$ \Phi = \int_0^h \int_0^{2\pi} a^2 \, d\theta \, dz = a^2 \cdot 2\pi \cdot h = 2\pi a^2 h $$
この結果はガウスの発散定理からも確認できます。$\nabla \cdot \bm{F} = \frac{\partial x}{\partial x} + \frac{\partial y}{\partial y} = 2$ なので、体積積分は $\iiint 2\,dV = 2 \cdot \pi a^2 h = 2\pi a^2 h$ です。上面・下面からのフラックスはゼロ($\bm{F}$ の $z$ 成分が0)なので、側面のフラックスと一致します。
このように発散定理を使った検算は、面積分の計算結果の信頼性を高める重要な手段です。
これら2つの計算例を振り返ると、面積分を実際に計算する際のポイントが見えてきます。まず、曲面のパラメータ化を適切に選ぶことが計算の見通しをよくします。放物面の例では $z = g(x, y)$ の形をそのまま利用し、円柱面の例では角度と高さによるパラメータ化を採用しました。次に、対称性の活用が重要です。円柱面の例では被積分関数が $a^2$(定数)に簡略化されましたが、これは円柱面の対称性とベクトル場の構造が調和していたためです。対称性が良い場合には計算量が大幅に削減されるため、パラメータ化の段階で対称性を意識することが大切です。
まとめ
本記事では、面積分の定義と計算方法について解説しました。
- スカラー場の面積分 $\iint_S f \, dS$ は曲面上の「重み付き面積」を計算する。面積要素 $dS = \|\bm{r}_u \times \bm{r}_v\| \, du \, dv$
- ベクトル場の面積分(フラックス)$\iint_S \bm{F} \cdot d\bm{A}$ は曲面を通り抜ける流量を計算する
- ガウスの発散定理: 閉曲面のフラックス = 内部の発散の体積積分
- ストークスの定理: 曲面上の回転の面積分 = 境界曲線の線積分
- これらは全て「境界上の積分 = 内部の微分量の積分」という統一的な構造を持つ
次のステップとして、以下の記事も参考にしてください。
- 線積分の定義と計算方法を解説する — 線積分との比較
- 重積分の計算方法と座標変換 — 座標変換の基礎