Skip to content

필사 모드: 工業数学完全攻略4: ベクトル微積分 - グリーンの定理からストークスの定理まで

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

工業数学完全攻略4: ベクトル微積分

ベクトル微積分(Vector Calculus)は、物理学・電磁気学・流体力学から現代の機械学習に至るまで、あらゆる工学分野で不可欠な数学ツールです。本記事では、勾配(gradient)・発散(divergence)・回転(curl)の概念を基礎に、グリーンの定理、ガウスの発散定理、ストークスの定理へと体系的に解説します。

1. ベクトル関数とベクトル場

ベクトル値関数

ベクトル値関数(vector-valued function)はスカラーパラメータ $t$ を受け取り、空間ベクトルを返す関数です。

$$\mathbf{r}(t) = x(t)\,\mathbf{i} + y(t)\,\mathbf{j} + z(t)\,\mathbf{k}$$

代表例として螺旋曲線(helix)があります。

$$\mathbf{r}(t) = \cos t\,\mathbf{i} + \sin t\,\mathbf{j} + t\,\mathbf{k}$$

接線ベクトルと法線ベクトル

曲線 $\mathbf{r}(t)$ の接線ベクトルは微分によって求まります。

$$\mathbf{r}'(t) = \frac{d\mathbf{r}}{dt} = \left(\frac{dx}{dt},\, \frac{dy}{dt},\, \frac{dz}{dt}\right)$$

単位接線ベクトルは $\mathbf{T}(t) = \dfrac{\mathbf{r}'(t)}{|\mathbf{r}'(t)|}$ であり、主法線ベクトルは $\mathbf{N}(t) = \dfrac{\mathbf{T}'(t)}{|\mathbf{T}'(t)|}$ です。

ベクトル場

ベクトル場(vector field)は空間の各点にベクトルを対応させる関数です。

$$\mathbf{F}(x, y, z) = P(x,y,z)\,\mathbf{i} + Q(x,y,z)\,\mathbf{j} + R(x,y,z)\,\mathbf{k}$$

**代表的なベクトル場の例:**

- 重力場: $\mathbf{g} = -g\,\mathbf{k}$

- 電場: $\mathbf{E} = k_e \dfrac{q}{r^2}\hat{\mathbf{r}}$

- 流体速度場: $\mathbf{v}(x,y,z)$

2D ベクトル場の可視化

x = np.linspace(-2, 2, 15)

y = np.linspace(-2, 2, 15)

X, Y = np.meshgrid(x, y)

回転ベクトル場: F = (-y, x)

U = -Y

V = X

fig, ax = plt.subplots(figsize=(6, 6))

ax.quiver(X, Y, U, V, color='steelblue', alpha=0.8)

ax.set_title('Rotational Vector Field F = (-y, x)')

ax.set_xlabel('x')

ax.set_ylabel('y')

plt.tight_layout()

plt.show()

2. スカラー場と勾配(Gradient)

方向微分

スカラー場 $f(x,y,z)$ における単位ベクトル $\hat{\mathbf{u}}$ 方向の方向微分は次のように定義されます。

$$D_{\hat{u}} f = \nabla f \cdot \hat{\mathbf{u}}$$

勾配ベクトル

勾配(gradient)はスカラー場が最も急激に増加する方向とその大きさを表します。

$$\nabla f = \frac{\partial f}{\partial x}\,\mathbf{i} + \frac{\partial f}{\partial y}\,\mathbf{j} + \frac{\partial f}{\partial z}\,\mathbf{k}$$

**幾何学的・物理的意味:**

- $\nabla f$ の方向: $f$ が最も急速に増加する方向

- $|\nabla f|$: その方向の変化率

- 等位面(level surface)$f = c$ に対して常に垂直

**例:** $f(x,y) = x^2 + y^2$ のとき $\nabla f = (2x, 2y)$

SymPy による勾配計算

x_s, y_s = sp.symbols('x y')

f = x_s**2 + y_s**2 + x_s * y_s

grad_x = sp.diff(f, x_s)

grad_y = sp.diff(f, y_s)

print("grad_x =", grad_x) # 2x + y

print("grad_y =", grad_y) # x + 2y

NumPy による可視化

x = np.linspace(-2, 2, 20)

y = np.linspace(-2, 2, 20)

X, Y = np.meshgrid(x, y)

f_val = X**2 + Y**2

U = 2 * X

V = 2 * Y

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

c = axes[0].contourf(X, Y, f_val, 20, cmap='viridis')

axes[0].contour(X, Y, f_val, 10, colors='white', alpha=0.5)

plt.colorbar(c, ax=axes[0])

axes[0].set_title('f(x,y) = x² + y² (等高線)')

axes[1].quiver(X, Y, U, V, color='red', alpha=0.7)

axes[1].set_title('勾配 ∇f = (2x, 2y)')

plt.tight_layout()

plt.show()

3. 発散(Divergence)

定義

ベクトル場 $\mathbf{F} = (P, Q, R)$ の発散(divergence)はスカラー値です。

$$\text{div}\,\mathbf{F} = \nabla \cdot \mathbf{F} = \frac{\partial P}{\partial x} + \frac{\partial Q}{\partial y} + \frac{\partial R}{\partial z}$$

物理的意味

発散は単位体積あたりの流体の正味流出量を表します。

- $\nabla \cdot \mathbf{F} > 0$: その点が**ソース(source)** — 流体が外へ出る

- $\nabla \cdot \mathbf{F} < 0$: その点が**シンク(sink)** — 流体が内へ入る

- $\nabla \cdot \mathbf{F} = 0$: **非圧縮性流れ(incompressible flow)** — 流体が保存される

**例:** $\mathbf{F} = (x^2, y^2, z^2)$ のとき $\nabla \cdot \mathbf{F} = 2x + 2y + 2z$

非圧縮性の例: $\mathbf{F} = (-y, x, 0)$ では $\nabla \cdot \mathbf{F} = 0$

x, y, z = sp.symbols('x y z')

P = x**2

Q = y**2

R = z**2

divergence = sp.diff(P, x) + sp.diff(Q, y) + sp.diff(R, z)

print("div F =", divergence) # 2*x + 2*y + 2*z

4. 回転(Curl)

定義

ベクトル場 $\mathbf{F} = (P, Q, R)$ の回転(curl)はベクトル値です。

$$\text{curl}\,\mathbf{F} = \nabla \times \mathbf{F} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ \partial/\partial x & \partial/\partial y & \partial/\partial z \\ P & Q & R \end{vmatrix}$$

展開すると

$$\nabla \times \mathbf{F} = \left(\frac{\partial R}{\partial y} - \frac{\partial Q}{\partial z}\right)\mathbf{i} - \left(\frac{\partial R}{\partial x} - \frac{\partial P}{\partial z}\right)\mathbf{j} + \left(\frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y}\right)\mathbf{k}$$

物理的意味と保存場

- 回転は流体粒子の局所的な**渦度(vorticity)**を表します。

- $\nabla \times \mathbf{F} = \mathbf{0}$ ならば**非回転(irrotational)**または**保存場(conservative field)**

- 保存場にはポテンシャル関数 $\phi$ が存在して $\mathbf{F} = \nabla \phi$ が成立します。

マクスウェル方程式との関係

ファラデーの電磁誘導法則:

$$\nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t}$$

アンペール-マクスウェルの法則:

$$\nabla \times \mathbf{B} = \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}$$

x, y, z = sp.symbols('x y z')

F = (yz, xz, xy) — 保存場の例

P = y * z

Q = x * z

R = x * y

curl_x = sp.diff(R, y) - sp.diff(Q, z)

curl_y = sp.diff(P, z) - sp.diff(R, x)

curl_z = sp.diff(Q, x) - sp.diff(P, y)

print("curl F =", (curl_x, curl_y, curl_z))

結果: (0, 0, 0) => 保存場

5. 線積分(Line Integrals)

スカラー関数の線積分

曲線 $C$ を $\mathbf{r}(t)$, $a \le t \le b$ でパラメータ化すると

$$\int_C f\,ds = \int_a^b f(\mathbf{r}(t))\,|\mathbf{r}'(t)|\,dt$$

ベクトル場の線積分(仕事)

力場 $\mathbf{F}$ が粒子を曲線 $C$ に沿って動かす際に行う**仕事(work)**:

$$W = \int_C \mathbf{F} \cdot d\mathbf{r} = \int_a^b \mathbf{F}(\mathbf{r}(t)) \cdot \mathbf{r}'(t)\,dt$$

経路独立性

$\mathbf{F} = \nabla \phi$ である保存場では、線積分は経路に依らず端点のみに依存します。

$$\int_C \mathbf{F} \cdot d\mathbf{r} = \phi(\mathbf{r}(b)) - \phi(\mathbf{r}(a))$$

from scipy.integrate import quad

F = (2x, 2y), 経路: r(t) = (t, t^2), t in [0,1]

def work_integrand(t):

x_t = t

y_t = t**2

Fx = 2 * x_t

Fy = 2 * y_t

dx = 1

dy = 2 * t

return Fx * dx + Fy * dy

work, _ = quad(work_integrand, 0, 1)

print(f"仕事 W = {work:.4f}") # = 2.0; phi = x^2+y^2, phi(1,1)-phi(0,0) = 2

6. 面積分(Surface Integrals)

スカラー面積分

パラメータ曲面 $\mathbf{r}(u,v)$ の上のスカラー面積分:

$$\iint_S f\,dS = \iint_D f(\mathbf{r}(u,v))\,|\mathbf{r}_u \times \mathbf{r}_v|\,dA$$

フラックス(Flux)

ベクトル場 $\mathbf{F}$ が曲面 $S$ を通過する**フラックス**(単位時間に曲面を通過する流体の体積):

$$\Phi = \iint_S \mathbf{F} \cdot d\mathbf{S} = \iint_D \mathbf{F}(\mathbf{r}(u,v)) \cdot (\mathbf{r}_u \times \mathbf{r}_v)\,dA$$

7. グリーンの定理(Green's Theorem)

定理

単純閉曲線 $C$(反時計回り)とそれが囲む領域 $D$ において、$P$, $Q$ が連続な偏微分を持てば

$$\oint_C P\,dx + Q\,dy = \iint_D \left(\frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y}\right) dA$$

面積の計算

グリーンの定理を利用すると、閉曲線が囲む面積を境界線の積分で求められます。

$$A = \frac{1}{2} \oint_C (x\,dy - y\,dx)$$

これは多角形の面積を頂点座標から計算する**シューレース公式(shoelace formula)**の基礎です。

流体力学への応用

2次元流れにおいて、閉曲線に沿う循環(circulation)と囲まれた領域内の渦度(vorticity)を結びつけます。

from scipy.integrate import dblquad

グリーンの定理の数値検証

P = -y, Q = x => dQ/dx - dP/dy = 2

単位円板上の二重積分: 2 * pi

result, _ = dblquad(

lambda y, x: 2.0,

-1, 1,

lambda x: -np.sqrt(max(0.0, 1 - x**2)),

lambda x: np.sqrt(max(0.0, 1 - x**2))

)

print(f"二重積分 = {result:.5f}") # ≈ 6.28318 = 2*pi

print(f"2*pi = {2*np.pi:.5f}")

8. ガウスの発散定理(Divergence Theorem)

定理

体積 $V$ とその境界面 $S = \partial V$(外向き法線)において、$\mathbf{F}$ が連続偏微分を持てば

$$\oiint_S \mathbf{F} \cdot \hat{\mathbf{n}}\,dS = \iiint_V (\nabla \cdot \mathbf{F})\,dV$$

物理的意味

閉じた曲面を通る総フラックス = 内部における発散の総量

困難な曲面積分を体積積分(またはその逆)に変換できます。

電場のガウスの法則

$$\oiint_S \mathbf{E} \cdot d\mathbf{A} = \frac{Q_{enc}}{\varepsilon_0}$$

これは発散定理と $\nabla \cdot \mathbf{E} = \rho/\varepsilon_0$ の直接応用です。球・円柱・平面などの高対称電荷分布の電場計算に使われます。

x, y, z = sp.symbols('x y z')

F = (x^3, y^3, z^3), 単位球上で積分

P, Q, R = x**3, y**3, z**3

div_F = sp.diff(P, x) + sp.diff(Q, y) + sp.diff(R, z)

print("div F =", div_F) # 3*x**2 + 3*y**2 + 3*z**2

単位球上の積分 = 3 * (4*pi/5) = 12*pi/5

print("期待される総フラックス =", sp.Rational(12, 1) * sp.pi / 5)

9. ストークスの定理(Stokes' Theorem)

定理

向きが与えられた曲面 $S$ とその境界曲線 $C = \partial S$ において

$$\oint_C \mathbf{F} \cdot d\mathbf{r} = \iint_S (\nabla \times \mathbf{F}) \cdot \hat{\mathbf{n}}\,dS$$

- 左辺: $C$ 上の線積分(循環)

- 右辺: $\text{curl}\,\mathbf{F}$ の $S$ 上の面積分

グリーンの定理との関係

$S$ が $xy$ 平面上の領域 $D$ で $\hat{\mathbf{n}} = \mathbf{k}$ のとき、ストークスの定理はグリーンの定理に帰着します。

$$\oint_C \mathbf{F} \cdot d\mathbf{r} = \iint_D \left(\frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y}\right) dA$$

アンペールの法則との対応

$$\oint_C \mathbf{B} \cdot d\mathbf{l} = \mu_0 I_{enc}$$

ストークスの定理によって、この積分形は微分形 $\nabla \times \mathbf{B} = \mu_0 \mathbf{J}$ に変換されます。

ストークスの定理の数値検証

F = (-y, x, 0), 単位半球 S, 境界 C: 単位円

curl F = (0, 0, 2)

面積分: 2 * pi(投影面積 * 2)

線積分: 2*pi(循環)

R = 1.0

t = np.linspace(0, 2 * np.pi, 10000)

x_c = R * np.cos(t)

y_c = R * np.sin(t)

dx = np.gradient(x_c, t)

dy = np.gradient(y_c, t)

F_dot_dr = (-y_c) * dx + x_c * dy

line_integral = np.trapz(F_dot_dr, t)

print(f"線積分 ≈ {line_integral:.5f}")

print(f"2*pi = {2*np.pi:.5f}")

10. 工学・AI への応用

計算流体力学(CFD)

非圧縮性ナビエ-ストークス方程式はベクトル微積分の演算子を核心としています。

$$\rho\left(\frac{\partial \mathbf{v}}{\partial t} + (\mathbf{v} \cdot \nabla)\mathbf{v}\right) = -\nabla p + \mu \nabla^2 \mathbf{v} + \mathbf{f}$$

非圧縮条件: $\nabla \cdot \mathbf{v} = 0$

マクスウェル方程式

| 法則 | 微分形 | 物理的意味 |

| ----------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------ |

| ガウスの法則(電場) | $\nabla \cdot \mathbf{E} = \rho/\varepsilon_0$ | 電荷が電場のソース |

| ガウスの法則(磁場) | $\nabla \cdot \mathbf{B} = 0$ | 磁気単極子は存在しない |

| ファラデーの法則 | $\nabla \times \mathbf{E} = -\partial\mathbf{B}/\partial t$ | 変化する磁束が電場を誘起 |

| アンペール-マクスウェル | $\nabla \times \mathbf{B} = \mu_0\mathbf{J} + \mu_0\varepsilon_0\,\partial\mathbf{E}/\partial t$ | 電流と変化する電場が磁場を生成 |

コンピュータグラフィックス

3Dレンダリングにおける照明計算では、曲面の法線ベクトルを $\mathbf{r}_u \times \mathbf{r}_v$ として計算します。これはベクトル微積分の面積分の理論そのものであり、フォンシェーディング、バンプマッピングなどに直接利用されます。

機械学習の勾配降下法

損失関数の勾配 $\nabla_\theta \mathcal{L}$ の逆方向にパラメータを更新します。

$$\theta_{n+1} = \theta_n - \eta\,\nabla_\theta \mathcal{L}(\theta_n)$$

これは高次元パラメータ空間へのベクトル微積分の直接応用です。AdamやRMSPropなどの手法は勾配の履歴を利用した適応的なスケーリングを行います。

Physics-Informed Neural Networks (PINNs)

PINNsは損失関数に物理方程式(発散・回転・勾配を含むPDE)を組み込み、自動微分によって微分演算子を計算します。

$$\mathcal{L} = \mathcal{L}_{data} + \lambda\,\mathcal{L}_{physics}$$

$\mathcal{L}_{physics}$ の例: $\|\nabla \cdot \mathbf{v}\|^2$(非圧縮条件違反のペナルティ)

11. Python 総合実装例

from scipy.integrate import dblquad, quad

print("=== ベクトル微積分 Python 計算例 ===\n")

--- 1. 勾配の計算 ---

x_s, y_s, z_s = sp.symbols('x y z')

f = x_s**3 + y_s**2 * z_s - x_s * y_s

grad = [sp.diff(f, v) for v in (x_s, y_s, z_s)]

print("1. 勾配(Gradient)")

print(f" f = {f}")

print(f" grad f = {grad}\n")

--- 2. 発散の計算 ---

P = x_s**2 * y_s

Q = y_s**2 * z_s

R = z_s**2 * x_s

div_F = sp.diff(P, x_s) + sp.diff(Q, y_s) + sp.diff(R, z_s)

print("2. 発散(Divergence)")

print(f" F = ({P}, {Q}, {R})")

print(f" div F = {div_F}\n")

--- 3. 回転の計算 ---

curl_x = sp.diff(R, y_s) - sp.diff(Q, z_s)

curl_y = sp.diff(P, z_s) - sp.diff(R, x_s)

curl_z = sp.diff(Q, x_s) - sp.diff(P, y_s)

print("3. 回転(Curl)")

print(f" curl F = ({sp.simplify(curl_x)}, {sp.simplify(curl_y)}, {sp.simplify(curl_z)})\n")

--- 4. グリーンの定理の数値検証 ---

result, _ = dblquad(

lambda y, x: 2.0,

-1, 1,

lambda x: -np.sqrt(max(0, 1 - x**2)),

lambda x: np.sqrt(max(0, 1 - x**2))

)

print("4. グリーンの定理の検証")

print(f" 二重積分 ≈ {result:.5f}, 2*pi ≈ {2*np.pi:.5f}\n")

--- 5. ベクトル場の可視化 ---

x_arr = np.linspace(-2, 2, 20)

y_arr = np.linspace(-2, 2, 20)

X, Y = np.meshgrid(x_arr, y_arr)

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

axes[0].quiver(X, Y, 2*X, 2*Y, color='crimson', alpha=0.7)

axes[0].set_title('勾配場 grad(x²+y²)')

axes[1].quiver(X, Y, -Y, X, color='steelblue', alpha=0.7)

axes[1].set_title('回転場 (-y, x)')

axes[2].quiver(X, Y, X, Y, color='forestgreen', alpha=0.7)

axes[2].set_title('発散場 (x, y)')

plt.tight_layout()

plt.savefig('vector_fields_ja.png', dpi=120)

plt.show()

12. クイズ

**答え**: 等位面に垂直(法線)方向を向いています。

**解説**: 勾配 ∇f は f が最も急速に増加する方向を指します。等位面上の任意の接線ベクトル t に対して、方向微分 D_t f = ∇f · t = 0 が成立するため(等位面上では f は一定)、∇f はすべての接線方向に直交し、等位面の法線方向となります。この性質はコンピュータグラフィックスの法線計算や最適化の降下方向の決定に活用されます。

**答え**: 非圧縮性流れ(incompressible flow)またはソレノイダル(solenoidal)ベクトル場と呼びます。

**解説**: ∇·F = 0 は、単位体積あたりの正味流出入がゼロ、すなわち流体の生成も消滅もないことを意味します。液体(低圧縮性)の流れや磁場 B(∇·B = 0 — 磁気単極子の不在を表すガウスの磁気法則)が代表例です。CFD における圧力-速度連成アルゴリズム(SIMPLE法など)は、この条件の維持を中心課題としています。

**答え**: P = -y/2, Q = x/2 と置けば ∂Q/∂x - ∂P/∂y = 1 となり、A = (1/2) ∮C (x dy - y dx) によって面積が得られます。

**解説**: 二重積分の被積分関数が 1 になるよう P, Q を選ぶことが鍵です。これにより面積計算が内部の積分ではなく境界曲線の一周だけで完結します。多角形の面積を頂点座標から計算するシューレース公式はこの離散版であり、コンピュータグラフィックス・測量・GISなど幅広い分野で使われています。

**答え**: 0 になります。

**解説**: curl F = ∇×F = 0 のとき右辺の面積分は ∬S 0·n dS = 0 となります。これは F が保存場(conservative field)であることを意味し、ポテンシャル関数 φ が存在して F = ∇φ が成立します。よって ∫C F·dr = φ(B) - φ(A) となり経路によらず端点のみに依存します。静電場では ∇×E = 0 から E = -∇V(V は電位)が導かれます。

**答え**: ガウスの電気法則の積分形 ∯S E·dA = Q_enc/ε₀ と発散定理 ∯S E·dA = ∭V (∇·E) dV を組み合わせることで、微分形 ∇·E = ρ/ε₀ が導かれます。

**解説**: 発散定理は曲面フラックス積分を体積積分(内部の電荷密度 ρ の積分)に変換します。半径 r の球に囲まれた総電荷 Q について、球の対称性から曲面積分が簡略化され 4πr²E = Q/ε₀ → E = Q/(4πε₀r²)(クーロンの法則)が直ちに得られます。この定理は有限要素法・有限体積法による計算電磁気学の理論基盤でもあります。

参考文献

- **Kreyszig, E.** — _Advanced Engineering Mathematics_ (第10版), Wiley. 工業数学の標準教科書。

- **MIT OCW 18.02** — Multivariable Calculus (Denis Auroux). [ocw.mit.edu](https://ocw.mit.edu/courses/18-02-multivariable-calculus-fall-2007/)

- **Stewart, J.** — _Calculus: Early Transcendentals_ (第9版), Cengage. 線積分・面積分・ベクトル定理の章。

- **Griffiths, D.J.** — _Introduction to Electrodynamics_ (第4版), Cambridge University Press. マクスウェル方程式とベクトル微積分の物理応用。

- **SciPy ドキュメント** — `scipy.integrate` による数値多重積分. [scipy.org](https://scipy.org)

- **SymPy ドキュメント** — 記号微分・積分ライブラリ. [sympy.org](https://www.sympy.org)

- **Raissi, M. et al.** — "Physics-informed neural networks," _Journal of Computational Physics_, 2019. 深層学習におけるベクトル微積分の応用(PINNs)。

현재 단락 (1/228)

ベクトル微積分(Vector Calculus)は、物理学・電磁気学・流体力学から現代の機械学習に至るまで、あらゆる工学分野で不可欠な数学ツールです。本記事では、勾配(gradient)・発散(div...

작성 글자: 0원문 글자: 11,634작성 단락: 0/228