マクスウェル方程式と電磁波 — 変位電流から波動方程式の導出

光が窓から差し込み、Wi-Fiルーターの電波がスマートフォンに届き、電子レンジが食品を温める — これらはすべて 電磁波 の仕業です。しかし、電気と磁気はもともと別々の現象として知られていました。電荷が電場を作り、電流が磁場を作る。ファラデーは「変化する磁場が電場を生む」ことを発見しました。では逆に、「変化する電場が磁場を生む」こともあるのでしょうか?

この問いに答えたのがジェームズ・クラーク・マクスウェルです。彼はアンペールの法則に変位電流という修正項を加え、電場と磁場の対称性を完成させました。その結果として導かれた4本の方程式 — マクスウェル方程式 — から、電磁場が波として空間を伝搬することが数学的に証明されたのです。しかもその速度は、電気と磁気の定数だけで決まり、当時測定されていた光速と一致しました。光は電磁波だったのです。

マクスウェル方程式を理解すると、以下のような幅広い分野への見通しが開けます。

  • 無線通信・レーダー: アンテナからの電磁波の放射と伝搬の基礎理論
  • 光工学: 光ファイバー、レーザー、光学薄膜の設計原理
  • 電磁波シールドと EMC: 導体による電磁波の遮蔽メカニズム(浸透深さ)
  • 相対性理論: 特殊相対性理論はマクスウェル方程式の要請から生まれた

本記事の内容

  • アンペールの法則の矛盾と変位電流の導入
  • マクスウェル方程式4本セット(微分形と積分形)
  • 自由空間での波動方程式の導出
  • 電磁波の性質: 横波性、$\bm{E}$ と $\bm{B}$ の直交関係、光速 $c = 1/\sqrt{\mu_0\epsilon_0}$
  • 平面波解と波動インピーダンス
  • 物質中の電磁波(誘電体中の伝搬、導体中の浸透深さ)
  • Pythonによる電磁波の伝搬可視化と導体中の減衰シミュレーション

前提知識

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

アンペールの法則の矛盾と変位電流

アンペールの法則の復習

アンペールの法則は、定常電流が作る磁場を記述します。微分形では

$$ \nabla \times \bm{B} = \mu_0 \bm{J} $$

積分形では

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

ここで $\bm{J}$ は電流密度、$I_{\text{enc}}$ は閉曲線 $C$ を貫く電流です。この法則は定常電流に対しては完璧に機能しますが、時間変化する電場がある場合に問題が生じます。

コンデンサ回路の矛盾

具体的な矛盾を見てみましょう。平行板コンデンサを充電する回路を考えます。導線を流れる電流 $I$ がコンデンサの極板に電荷を蓄積させています。

アンペールの法則 $\oint \bm{B} \cdot d\bm{l} = \mu_0 I_{\text{enc}}$ を、導線を囲む閉曲線 $C$ に適用します。このとき、$C$ を境界とする面は無数に選べます。

面 $S_1$(導線を貫く平面): この面を電流 $I$ が貫くので $I_{\text{enc}} = I$ です。

面 $S_2$(コンデンサの極板間を通る風船状の面): この面を貫く伝導電流はゼロです(極板間は絶縁されており、電荷は流れない)。したがって $I_{\text{enc}} = 0$ です。

同じ閉曲線 $C$ に対して、面の選び方によって $I_{\text{enc}}$ が異なる値($I$ と $0$)を与えます。これは数学的に矛盾しています。アンペールの法則の左辺は $C$ のみで決まるため、右辺も $C$ のみで決まらなければなりません。

マクスウェルの洞察 — 変位電流

マクスウェルはこの矛盾を解決するために、極板間の電場の変化に注目しました。コンデンサが充電されるとき、極板間の電場 $\bm{E}$ が時間とともに増加します。極板の面積を $A$、電荷を $Q(t)$ とすると

$$ E = \frac{Q}{\epsilon_0 A} $$

電束密度 $\bm{D} = \epsilon_0 \bm{E}$ の時間変化率は

$$ \frac{\partial D}{\partial t} = \frac{1}{A}\frac{dQ}{dt} = \frac{I}{A} $$

面 $S_2$ を通る $\frac{\partial \bm{D}}{\partial t}$ の面積分は

$$ \int_{S_2} \frac{\partial \bm{D}}{\partial t} \cdot d\bm{A} = \frac{\partial D}{\partial t} \cdot A = I $$

これは面 $S_1$ を通る伝導電流 $I$ と等しくなります。そこでマクスウェルは、アンペールの法則に 変位電流密度

$$ \bm{J}_d = \frac{\partial \bm{D}}{\partial t} = \epsilon_0 \frac{\partial \bm{E}}{\partial t} $$

を追加し、修正されたアンペールの法則(アンペール-マクスウェルの法則)を提案しました。

$$ \nabla \times \bm{B} = \mu_0 \bm{J} + \mu_0 \epsilon_0 \frac{\partial \bm{E}}{\partial t} $$

「変位電流」は実際に電荷が流れるわけではありませんが、磁場を生成するという意味では伝導電流と同等の効果を持ちます。この修正により、コンデンサ回路の矛盾は完全に解消されます。どの面を選んでも、伝導電流と変位電流の合計が等しくなるからです。

変位電流の導入は見かけ上は小さな修正ですが、その帰結は革命的でした。電場の変化が磁場を生み、磁場の変化が電場を生む — この相互作用が波として空間を伝搬できることを意味するからです。4本のマクスウェル方程式の全貌を見ていきましょう。

マクスウェル方程式 — 電磁気学の完全な法則

マクスウェル方程式の概観

マクスウェル方程式は、電場 $\bm{E}$ と磁場 $\bm{B}$ のすべての振る舞いを記述する4本の方程式です。ニュートンの運動方程式が力学の全体を支配するように、マクスウェル方程式は電磁気学の全体を支配します。

この4本を理解するための直感的な枠組みを先に示します。電磁場の法則は大きく2つのカテゴリに分かれます。

湧き出し(divergence)の法則: 電場と磁場の「源」を記述する。電場の源は電荷であり、磁場には源がない(磁気単極子は存在しない)。

回転(curl)の法則: 電場と磁場の「渦」を記述する。変動磁場が電場の渦を生み(ファラデー)、電流と変動電場が磁場の渦を生む(アンペール-マクスウェル)。

微分形

$$ \nabla \cdot \bm{E} = \frac{\rho}{\epsilon_0} \quad \text{(ガウスの法則)} $$

$$ \nabla \cdot \bm{B} = 0 \quad \text{(磁場のガウスの法則)} $$

$$ \nabla \times \bm{E} = -\frac{\partial \bm{B}}{\partial t} \quad \text{(ファラデーの法則)} $$

$$ \nabla \times \bm{B} = \mu_0 \bm{J} + \mu_0 \epsilon_0 \frac{\partial \bm{E}}{\partial t} \quad \text{(アンペール-マクスウェルの法則)} $$

各方程式の物理的意味

第1式(ガウスの法則): 電場の湧き出しは電荷密度 $\rho$ に比例します。正電荷は電場の「源」、負電荷は「吸い込み」です。電気力線は正電荷から出て負電荷に入ります。

第2式(磁場のガウスの法則): 磁場の湧き出しはゼロです。これは磁気単極子(N極だけ、またはS極だけの磁石)が存在しないことを意味します。磁力線は必ず閉曲線を描きます。N極から出た磁力線は外部を通ってS極に入り、磁石の内部をN極に戻ります。

第3式(ファラデーの法則): 磁場の時間変化が電場の回転(渦)を生みます。これが電磁誘導の法則であり、発電機やトランスの原理です。

第4式(アンペール-マクスウェルの法則): 電流密度 $\bm{J}$ と電場の時間変化が磁場の回転を生みます。第2項の $\epsilon_0 \frac{\partial \bm{E}}{\partial t}$ がマクスウェルが追加した変位電流であり、この項が電磁波の存在を導きます。

積分形

微分形にガウスの発散定理やストークスの定理を適用すると、積分形が得られます。

$$ \oint_S \bm{E} \cdot d\bm{A} = \frac{Q_{\text{enc}}}{\epsilon_0} $$

$$ \oint_S \bm{B} \cdot d\bm{A} = 0 $$

$$ \oint_C \bm{E} \cdot d\bm{l} = -\frac{d}{dt}\int_S \bm{B} \cdot d\bm{A} $$

$$ \oint_C \bm{B} \cdot d\bm{l} = \mu_0 I_{\text{enc}} + \mu_0 \epsilon_0 \frac{d}{dt}\int_S \bm{E} \cdot d\bm{A} $$

積分形は対称性の高い問題(球対称、円筒対称など)を解くのに便利であり、微分形は一般的な場の方程式を扱うのに適しています。

方程式の対称性

マクスウェル方程式には美しい対称性があります。電荷と電流がない自由空間($\rho = 0$, $\bm{J} = \bm{0}$)では

$$ \nabla \cdot \bm{E} = 0, \quad \nabla \cdot \bm{B} = 0 $$

$$ \nabla \times \bm{E} = -\frac{\partial \bm{B}}{\partial t}, \quad \nabla \times \bm{B} = \mu_0 \epsilon_0 \frac{\partial \bm{E}}{\partial t} $$

第3式と第4式を見比べると、$\bm{E}$ と $\bm{B}$ の役割がほぼ対称です。変化する $\bm{B}$ が $\bm{E}$ の回転を生み、変化する $\bm{E}$ が $\bm{B}$ の回転を生む。この相互作用が空間を伝搬する波 — 電磁波 — を生み出します。次のセクションでは、この波動方程式を実際に導出します。

波動方程式の導出 — 電磁波の数学的証明

導出の戦略

自由空間($\rho = 0$, $\bm{J} = \bm{0}$)のマクスウェル方程式から、$\bm{E}$ と $\bm{B}$ がそれぞれ独立に波動方程式を満たすことを示します。戦略は、2つの回転方程式(ファラデーの法則とアンペール-マクスウェルの法則)を組み合わせて、一方の場を消去することです。

電場の波動方程式

ファラデーの法則の両辺に $\nabla \times$ を作用させます。

$$ \nabla \times (\nabla \times \bm{E}) = -\frac{\partial}{\partial t}(\nabla \times \bm{B}) $$

左辺にはベクトル恒等式を使います。

$$ \nabla \times (\nabla \times \bm{E}) = \nabla(\nabla \cdot \bm{E}) – \nabla^2 \bm{E} $$

自由空間ではガウスの法則より $\nabla \cdot \bm{E} = 0$ なので

$$ \nabla \times (\nabla \times \bm{E}) = -\nabla^2 \bm{E} $$

右辺にはアンペール-マクスウェルの法則($\bm{J} = \bm{0}$)を代入します。

$$ \nabla \times \bm{B} = \mu_0 \epsilon_0 \frac{\partial \bm{E}}{\partial t} $$

これを時間微分すると

$$ -\frac{\partial}{\partial t}(\nabla \times \bm{B}) = -\mu_0 \epsilon_0 \frac{\partial^2 \bm{E}}{\partial t^2} $$

左辺と右辺を等しいとおくと

$$ -\nabla^2 \bm{E} = -\mu_0 \epsilon_0 \frac{\partial^2 \bm{E}}{\partial t^2} $$

整理して

$$ \boxed{\nabla^2 \bm{E} = \mu_0 \epsilon_0 \frac{\partial^2 \bm{E}}{\partial t^2}} $$

これは 電場の波動方程式 です。

磁場の波動方程式

全く同様の手順を、アンペール-マクスウェルの法則から出発して行います。アンペール-マクスウェルの法則の両辺に $\nabla \times$ を作用させます。

$$ \nabla \times (\nabla \times \bm{B}) = \mu_0 \epsilon_0 \frac{\partial}{\partial t}(\nabla \times \bm{E}) $$

左辺にベクトル恒等式を適用し、$\nabla \cdot \bm{B} = 0$ を使うと

$$ -\nabla^2 \bm{B} $$

右辺にファラデーの法則を代入すると

$$ \mu_0 \epsilon_0 \frac{\partial}{\partial t}\left(-\frac{\partial \bm{B}}{\partial t}\right) = -\mu_0 \epsilon_0 \frac{\partial^2 \bm{B}}{\partial t^2} $$

したがって

$$ \boxed{\nabla^2 \bm{B} = \mu_0 \epsilon_0 \frac{\partial^2 \bm{B}}{\partial t^2}} $$

$\bm{E}$ と $\bm{B}$ は全く同じ形の波動方程式を満たします。

電磁波の速度 — 光速の導出

一般的な波動方程式は

$$ \nabla^2 \bm{f} = \frac{1}{v^2}\frac{\partial^2 \bm{f}}{\partial t^2} $$

の形をしており、$v$ が波の伝搬速度です。電磁波の波動方程式と比較すると

$$ \frac{1}{v^2} = \mu_0 \epsilon_0 $$

したがって電磁波の速度は

$$ c = \frac{1}{\sqrt{\mu_0 \epsilon_0}} $$

定数の値を代入します。$\mu_0 = 4\pi \times 10^{-7}\,\text{H/m}$、$\epsilon_0 = 8.854 \times 10^{-12}\,\text{F/m}$ より

$$ c = \frac{1}{\sqrt{4\pi \times 10^{-7} \times 8.854 \times 10^{-12}}} \approx 2.998 \times 10^8\,\text{m/s} $$

これは光速の実測値と完全に一致します。マクスウェルはこの一致から「光は電磁波の一種である」と結論しました。この発見は物理学史上最大の統一の一つです。電気、磁気、光という3つの別々と思われていた現象が、4本の方程式で統一的に記述されたのです。

波動方程式を導出し、電磁波の速度が光速であることがわかりました。次は、この波動方程式の具体的な解の形を見ていきましょう。最もシンプルな解である平面波から出発します。

平面波解と電磁波の性質

平面波の一般形

$x$ 方向に伝搬する平面波を考えます。電場と磁場は $x$ と $t$ のみの関数で、$y$, $z$ には依存しません。電場が $y$ 方向に偏った場合

$$ \bm{E} = E_y(x, t)\, \hat{\bm{y}} $$

波動方程式の $y$ 成分は

$$ \frac{\partial^2 E_y}{\partial x^2} = \mu_0 \epsilon_0 \frac{\partial^2 E_y}{\partial t^2} $$

この偏微分方程式の一般解は、ダランベールの解として知られ

$$ E_y(x, t) = f(x – ct) + g(x + ct) $$

の形をとります。$f(x – ct)$ は $+x$ 方向に速度 $c$ で進む波、$g(x + ct)$ は $-x$ 方向に進む波です。

正弦波(調和波)

最も基本的な平面波解は正弦波です。$+x$ 方向に伝搬する正弦平面波は

$$ E_y(x, t) = E_0 \cos(kx – \omega t + \phi) $$

あるいは複素表示で

$$ \tilde{E}_y(x, t) = E_0 e^{j(kx – \omega t)} $$

と書けます。ここで $k = 2\pi/\lambda$ は波数、$\omega = 2\pi f$ は角周波数、$\lambda$ は波長、$f$ は周波数です。分散関係は

$$ \omega = ck \quad \Leftrightarrow \quad c = \frac{\omega}{k} = f\lambda $$

です。

電磁波の横波性

電磁波が横波であることを示します。$+x$ 方向に伝搬する平面波では、すべての場の量は $e^{j(kx – \omega t)}$ に比例します。$\nabla$ 演算子を作用させると

$$ \nabla \to jk\hat{\bm{x}}, \quad \frac{\partial}{\partial t} \to -j\omega $$

と置き換えられます。ガウスの法則 $\nabla \cdot \bm{E} = 0$ に適用すると

$$ jk\hat{\bm{x}} \cdot \bm{E} = 0 \quad \Rightarrow \quad E_x = 0 $$

同様に $\nabla \cdot \bm{B} = 0$ から $B_x = 0$ です。つまり、電場も磁場も伝搬方向 $x$ の成分を持たない。電磁波は横波です。

$\bm{E}$ と $\bm{B}$ の関係

ファラデーの法則 $\nabla \times \bm{E} = -\frac{\partial \bm{B}}{\partial t}$ を平面波に適用します。$\bm{E} = E_y \hat{\bm{y}}$($E_y = E_0 e^{j(kx – \omega t)}$)の回転は

$$ \nabla \times \bm{E} = \frac{\partial E_y}{\partial x}\hat{\bm{z}} = jkE_y \hat{\bm{z}} $$

一方、右辺は $-\frac{\partial \bm{B}}{\partial t} = j\omega \bm{B}$ なので

$$ jkE_y \hat{\bm{z}} = j\omega B_z \hat{\bm{z}} $$

$z$ 成分を比較すると

$$ B_z = \frac{k}{\omega} E_y = \frac{E_y}{c} $$

この結果から、重要な性質がわかります。

$\bm{E}$, $\bm{B}$, 伝搬方向は互いに直交する: $\bm{E}$ が $\hat{\bm{y}}$ 方向、$\bm{B}$ が $\hat{\bm{z}}$ 方向、伝搬が $\hat{\bm{x}}$ 方向で、右手系を成します。一般に

$$ \bm{B} = \frac{1}{c}\hat{\bm{k}} \times \bm{E} $$

ここで $\hat{\bm{k}}$ は伝搬方向の単位ベクトルです。

振幅の比は光速: $B_0 = E_0/c$ です。SI単位では $E$ は V/m、$B$ は T で、$E_0/B_0 = c \approx 3 \times 10^8$ m/s となります。電場と磁場は同位相で振動し、同時にゼロになり、同時にピークに達します。

ポインティングベクトル — 電磁波のエネルギー流

電磁波はエネルギーを運びます。単位面積・単位時間あたりのエネルギー流束は ポインティングベクトル

$$ \bm{S} = \frac{1}{\mu_0}\bm{E} \times \bm{B} $$

で与えられます。平面波の場合

$$ \bm{S} = \frac{E_0^2}{\mu_0 c}\cos^2(kx – \omega t)\, \hat{\bm{x}} $$

時間平均(1周期にわたる平均)は

$$ \langle S \rangle = \frac{E_0^2}{2\mu_0 c} = \frac{1}{2}\sqrt{\frac{\epsilon_0}{\mu_0}} E_0^2 $$

これが電磁波の 放射強度(W/m$^2$)です。

波動インピーダンス

$\bm{E}$ と $\bm{B}$ の振幅比から、媒質の 波動インピーダンス(intrinsic impedance) が定義されます。

$$ \eta = \frac{E_0}{H_0} = \frac{E_0}{B_0/\mu_0} = \mu_0 c = \sqrt{\frac{\mu_0}{\epsilon_0}} $$

ここで $\bm{H} = \bm{B}/\mu_0$ は磁場強度です。自由空間の波動インピーダンスは

$$ \eta_0 = \sqrt{\frac{\mu_0}{\epsilon_0}} = \frac{4\pi \times 10^{-7}}{1/c} \approx 376.7\,\Omega $$

です。この値は、アンテナ設計や電磁波の境界面での反射・透過の計算で頻繁に使われます。伝送線路のインピーダンスと同じ次元(オーム)を持ち、媒質が電磁波に対して示す「抵抗感」を表します。

自由空間での電磁波の性質が明らかになったところで、次に電磁波が物質中を伝搬する場合を考えましょう。誘電体と導体では、電磁波の振る舞いが大きく異なります。

物質中の電磁波

誘電体中の電磁波

誘電体(絶縁体)中では、$\epsilon_0$ を比誘電率 $\epsilon_r$ を用いて $\epsilon = \epsilon_r \epsilon_0$ に、$\mu_0$ を比透磁率 $\mu_r$ を用いて $\mu = \mu_r \mu_0$ に置き換えます(多くの誘電体では $\mu_r \approx 1$)。

波動方程式は

$$ \nabla^2 \bm{E} = \mu \epsilon \frac{\partial^2 \bm{E}}{\partial t^2} $$

伝搬速度は

$$ v = \frac{1}{\sqrt{\mu \epsilon}} = \frac{c}{\sqrt{\mu_r \epsilon_r}} = \frac{c}{n} $$

ここで $n = \sqrt{\mu_r \epsilon_r}$ は屈折率(refractive index) です。ガラス($\epsilon_r \approx 4$, $\mu_r = 1$)では $n \approx 2$ であり、光速の約半分の速度で伝搬します。水(可視光域で $n \approx 1.33$)、ダイヤモンド($n \approx 2.42$)など、物質によって屈折率が異なるため、電磁波の伝搬速度も異なります。

誘電体中の波動インピーダンスは

$$ \eta = \sqrt{\frac{\mu}{\epsilon}} = \frac{\eta_0}{n} \quad (\mu_r = 1 \text{ の場合}) $$

異なる媒質の境界面でインピーダンスが変化すると、電磁波の一部が反射されます。反射係数は

$$ \Gamma = \frac{\eta_2 – \eta_1}{\eta_2 + \eta_1} $$

で、伝送線路の反射係数と同じ形式です。

導体中の電磁波 — 浸透深さ

導体中では自由電子が電場に応じて電流を作ります。導電率 $\sigma$ の導体でのオームの法則は $\bm{J} = \sigma \bm{E}$ です。アンペール-マクスウェルの法則は

$$ \nabla \times \bm{B} = \mu \sigma \bm{E} + \mu \epsilon \frac{\partial \bm{E}}{\partial t} $$

正弦波 $e^{j\omega t}$ を仮定すると

$$ \nabla \times \bm{B} = (\sigma + j\omega\epsilon)\mu \bm{E} $$

括弧内の第1項(伝導電流)と第2項(変位電流)の比は

$$ \frac{\sigma}{\omega \epsilon} $$

この比が 1 よりはるかに大きい場合を 良導体 と呼びます。金属は通常の周波数でこの条件を満たします。例えば銅($\sigma \approx 5.8 \times 10^7$ S/m)では、1 GHz でも $\sigma / (\omega \epsilon_0) \approx 10^9$ であり、変位電流は完全に無視できます。

良導体近似($\sigma \gg \omega\epsilon$)のもとで波動方程式を解くと、複素波数

$$ \tilde{k} = (1 + j)\sqrt{\frac{\omega \mu \sigma}{2}} $$

が得られます。$+x$ 方向に伝搬する平面波は

$$ \bm{E} = E_0 e^{-x/\delta} \cos(\omega t – x/\delta)\, \hat{\bm{y}} $$

のように、振幅が指数的に減衰しながら伝搬します。減衰定数

$$ \delta = \sqrt{\frac{2}{\omega \mu \sigma}} $$

浸透深さ(skin depth) と呼びます。電磁波の振幅が表面から $\delta$ の深さで $1/e \approx 37\%$ に減衰することを意味します。

浸透深さの特徴をまとめます。

周波数依存性: $\delta \propto 1/\sqrt{f}$ — 周波数が高いほど浸透深さは小さくなります。これが 表皮効果(skin effect) です。高周波電流は導体の表面近くだけを流れます。

導電率依存性: $\delta \propto 1/\sqrt{\sigma}$ — 導電率が高い金属ほど電磁波は深く侵入できません。

具体的な数値例として、銅($\sigma = 5.8 \times 10^7$ S/m, $\mu_r = 1$)の浸透深さは

周波数 浸透深さ
50 Hz 9.3 mm
1 kHz 2.1 mm
1 MHz 66 $\mu$m
1 GHz 2.1 $\mu$m

50 Hz の送電線では浸透深さが約 9 mm あり、導体全体を電流が流れますが、1 GHz のマイクロ波では約 2 $\mu$m しか侵入できず、導体のごく表面だけが関与します。この性質は電磁波シールドの設計に直接利用されます。導体板の厚さが浸透深さの数倍あれば、電磁波は事実上遮蔽されます。

導体中の電磁波のインピーダンス

良導体中の波動インピーダンスは

$$ \eta_c = (1 + j)\frac{1}{\sigma \delta} = (1 + j)\sqrt{\frac{\omega \mu}{2\sigma}} $$

自由空間のインピーダンス $\eta_0 \approx 377\,\Omega$ に比べて非常に小さい値です(銅の場合、1 GHz で $|\eta_c| \approx 0.026\,\Omega$)。このインピーダンスの大きな不整合が、金属表面での電磁波の強い反射($|\Gamma| \approx 1$)の原因です。

物質中の電磁波の振る舞いを理論的に理解したところで、Pythonを使ってこれらの現象を可視化していきましょう。

Pythonでの実装 — 電磁波の可視化

電磁波の伝搬 — $\bm{E}$ と $\bm{B}$ の空間分布

$x$ 方向に伝搬する平面波の電場と磁場を3次元的に可視化し、横波性と直交関係を視覚的に確認します。

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(14, 8))
ax = fig.add_subplot(111, projection='3d')

# パラメータ
wavelength = 1.0  # 波長 [任意単位]
k = 2 * np.pi / wavelength
omega = 2 * np.pi  # 角周波数
E0 = 1.0
B0 = E0  # 可視化のため同スケール
t = 0  # 時刻スナップショット

# 空間軸(伝搬方向: x)
x = np.linspace(0, 2 * wavelength, 500)

# 電場(y方向に偏波)
Ey = E0 * np.cos(k * x - omega * t)

# 磁場(z方向に偏波)
Bz = B0 * np.cos(k * x - omega * t)

# 伝搬方向の軸
ax.plot(x, np.zeros_like(x), np.zeros_like(x), 'k-', linewidth=1, alpha=0.3)

# 電場の波形(x-y平面)
ax.plot(x, Ey, np.zeros_like(x), 'b-', linewidth=2, label='$E_y$ (Electric field)')

# 磁場の波形(x-z平面)
ax.plot(x, np.zeros_like(x), Bz, 'r-', linewidth=2, label='$B_z$ (Magnetic field)')

# 電場と磁場のベクトル矢印(間引きして表示)
arrow_stride = 25
for i in range(0, len(x), arrow_stride):
    # 電場の矢印
    ax.quiver(x[i], 0, 0, 0, Ey[i]*0.9, 0,
              color='blue', alpha=0.4, arrow_length_ratio=0.15, linewidth=0.8)
    # 磁場の矢印
    ax.quiver(x[i], 0, 0, 0, 0, Bz[i]*0.9,
              color='red', alpha=0.4, arrow_length_ratio=0.15, linewidth=0.8)

# 軸設定
ax.set_xlabel('$x$ (propagation direction)', fontsize=11)
ax.set_ylabel('$E_y$', fontsize=11)
ax.set_zlabel('$B_z$', fontsize=11)
ax.set_title('Electromagnetic Plane Wave Propagation', fontsize=14)
ax.legend(fontsize=10, loc='upper left')

ax.view_init(elev=20, azim=-60)
ax.set_xlim(0, 2 * wavelength)
ax.set_ylim(-1.5, 1.5)
ax.set_zlim(-1.5, 1.5)

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

3次元グラフに電磁波の電場(青)と磁場(赤)の空間分布が表示されています。電場 $E_y$ は $x$-$y$ 平面内で、磁場 $B_z$ は $x$-$z$ 平面内で振動しており、互いに直交していることが視覚的に確認できます。両方の場は同位相で振動し、波数ベクトル $\hat{\bm{x}}$ の方向に伝搬しています。矢印は各点での場の方向と大きさを示し、$\bm{E}$, $\bm{B}$, $\hat{\bm{k}}$ が右手系を成していることがわかります。これが電磁波の横波としての基本的な構造です。

電磁波の時間発展 — 伝搬の様子

複数の時刻における電磁波のスナップショットを並べ、波の伝搬を視覚化します。

import numpy as np
import matplotlib.pyplot as plt

wavelength = 1.0
k = 2 * np.pi / wavelength
c = 1.0  # 光速 [任意単位]
omega = c * k
T = 2 * np.pi / omega  # 周期

x = np.linspace(0, 3 * wavelength, 500)

# 6つの時刻でのスナップショット
fig, axes = plt.subplots(3, 2, figsize=(14, 10), sharex=True, sharey=True)
times = [0, T/6, T/3, T/2, 2*T/3, 5*T/6]

for idx, t in enumerate(times):
    ax = axes[idx // 2][idx % 2]

    Ey = np.cos(k * x - omega * t)
    Bz = np.cos(k * x - omega * t)

    ax.plot(x / wavelength, Ey, 'b-', linewidth=2, label='$E_y$')
    ax.plot(x / wavelength, Bz, 'r--', linewidth=2, label='$B_z$')

    # 波の移動を示す矢印(波頭の位置)
    phase_pos = (omega * t) / k
    ax.axvline(x=phase_pos / wavelength, color='green', linestyle=':', alpha=0.5)

    ax.set_ylabel('Amplitude', fontsize=10)
    ax.set_title(f'$t = {t/T:.2f}\\,T$', fontsize=11)
    ax.legend(fontsize=8, loc='upper right')
    ax.grid(True, alpha=0.3)
    ax.set_ylim(-1.3, 1.3)
    ax.axhline(y=0, color='k', linewidth=0.5)

axes[2, 0].set_xlabel('$x / \\lambda$', fontsize=11)
axes[2, 1].set_xlabel('$x / \\lambda$', fontsize=11)

plt.suptitle('Electromagnetic Wave Propagation (Time Snapshots)', fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig('em_wave_propagation.png', dpi=150, bbox_inches='tight')
plt.show()

6つのパネルで、1周期 $T$ の中での電磁波の伝搬を時系列で示しています。$t = 0$ から $t = 5T/6$ まで、波形が $+x$ 方向に移動していく様子が明確に見えます。緑の破線は等位相面(波頭)の位置を追跡しており、時間とともに右に移動しています。電場 $E_y$(青実線)と磁場 $B_z$(赤破線)は常に同位相で振動し、同時にゼロを通過します。1周期で波は1波長分 $\lambda$ だけ進み、$c = \lambda / T = f\lambda$ の関係が成り立っていることが確認できます。

導体中の電磁波の減衰 — 浸透深さの可視化

導体表面に入射した電磁波が、内部で指数的に減衰する様子を可視化します。複数の金属について浸透深さを比較します。

import numpy as np
import matplotlib.pyplot as plt

# 物理定数
mu0 = 4 * np.pi * 1e-7  # 真空透磁率 [H/m]

# 金属の導電率 [S/m]
metals = {
    'Copper (Cu)': {'sigma': 5.8e7, 'color': '#B87333'},
    'Aluminum (Al)': {'sigma': 3.77e7, 'color': '#C0C0C0'},
    'Iron (Fe)': {'sigma': 1.03e7, 'mu_r': 1000, 'color': '#444444'},
    'Stainless Steel': {'sigma': 1.45e6, 'color': '#888888'},
}

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

# 左図: 周波数に対する浸透深さ
ax = axes[0]
freq = np.logspace(1, 10, 500)  # 10 Hz ~ 10 GHz

for name, props in metals.items():
    sigma = props['sigma']
    mu_r = props.get('mu_r', 1)
    mu = mu_r * mu0
    delta = np.sqrt(2 / (2 * np.pi * freq * mu * sigma))
    ax.loglog(freq, delta * 1000, color=props['color'], linewidth=2, label=name)

ax.set_xlabel('Frequency [Hz]', fontsize=11)
ax.set_ylabel('Skin depth $\\delta$ [mm]', fontsize=11)
ax.set_title('Skin Depth vs Frequency', fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3, which='both')
ax.set_xlim(10, 1e10)

# 周波数帯域の注釈
ax.axvspan(50, 60, alpha=0.1, color='blue')
ax.text(55, 0.001, 'AC\n50/60Hz', fontsize=7, ha='center', color='blue')
ax.axvspan(1e6, 30e6, alpha=0.1, color='green')
ax.text(5e6, 0.001, 'HF', fontsize=7, ha='center', color='green')
ax.axvspan(1e9, 10e9, alpha=0.1, color='red')
ax.text(3e9, 0.001, 'Microwave', fontsize=7, ha='center', color='red')

# 右図: 導体中の電磁波の振幅減衰
ax = axes[1]
f_demo = 1e6  # 1 MHz
x_max_mm = 2.0  # 表面からの深さ [mm]
x = np.linspace(0, x_max_mm, 500)

for name, props in metals.items():
    sigma = props['sigma']
    mu_r = props.get('mu_r', 1)
    mu = mu_r * mu0
    delta = np.sqrt(2 / (2 * np.pi * f_demo * mu * sigma)) * 1000  # mm

    amplitude = np.exp(-x / delta)
    ax.plot(x, amplitude, color=props['color'], linewidth=2,
            label=f'{name} ($\\delta = {delta*1000:.1f}\\,\\mu$m)')

ax.axhline(y=1/np.e, color='k', linestyle='--', alpha=0.5, label='$1/e$ level')
ax.set_xlabel('Depth from surface [mm]', fontsize=11)
ax.set_ylabel('$|E| / E_0$', fontsize=11)
ax.set_title(f'Wave Attenuation at $f = {f_demo/1e6:.0f}$ MHz', fontsize=12)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
ax.set_xlim(0, x_max_mm)
ax.set_ylim(0, 1.05)

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

左図は、4種類の金属の浸透深さを周波数の関数として両対数プロットで示しています。すべての金属で浸透深さは周波数の平方根に反比例し($\delta \propto 1/\sqrt{f}$)、対数スケールで傾き $-1/2$ の直線になっています。鉄(黒線)は比透磁率 $\mu_r = 1000$ のため他の金属より大幅に小さい浸透深さを示し、同じ周波数で比較すると銅やアルミニウムの約 $1/\sqrt{1000} \approx 1/30$ 倍です。このため鉄は低周波の電磁シールドに特に有効です。右図は、1 MHz の電磁波が各金属に入射したときの振幅減衰を示しています。銅とアルミニウムでは表面からわずか 0.2 mm 程度で振幅がほぼゼロに減衰し、ステンレス鋼では減衰がやや緩やかです。鉄は $\mu_r$ が大きいため、極めて急速に減衰します。黒の破線は $1/e$ レベルを示しており、この深さが浸透深さ $\delta$ に対応します。

導体中の電磁波の場の振動と減衰

導体内部での電磁波の空間振動と指数減衰を同時に示します。

import numpy as np
import matplotlib.pyplot as plt

mu0 = 4 * np.pi * 1e-7
sigma_cu = 5.8e7  # 銅の導電率
f = 100e6  # 100 MHz
omega = 2 * np.pi * f
delta = np.sqrt(2 / (omega * mu0 * sigma_cu))

# 深さ方向
x = np.linspace(0, 8 * delta, 1000)

# 電場の瞬時値(複数の時刻)
fig, axes = plt.subplots(2, 1, figsize=(12, 8), sharex=True)

# 上: 複数時刻のスナップショット
ax = axes[0]
n_times = 8
t_values = np.linspace(0, 2*np.pi/omega, n_times, endpoint=False)
colors = plt.cm.viridis(np.linspace(0, 1, n_times))

for i, t in enumerate(t_values):
    Ey = np.exp(-x / delta) * np.cos(x / delta - omega * t)
    ax.plot(x / delta, Ey, color=colors[i], linewidth=1.5,
            alpha=0.7, label=f'$\\omega t = {omega*t/(np.pi):.1f}\\pi$')

# エンベロープ
envelope_pos = np.exp(-x / delta)
envelope_neg = -np.exp(-x / delta)
ax.plot(x / delta, envelope_pos, 'k--', linewidth=2, label='Envelope $\\pm e^{-x/\\delta}$')
ax.plot(x / delta, envelope_neg, 'k--', linewidth=2)

ax.set_ylabel('$E_y / E_0$', fontsize=12)
ax.set_title(f'EM Wave in Copper at {f/1e6:.0f} MHz ($\\delta = {delta*1e6:.2f}\\,\\mu$m)',
             fontsize=13)
ax.legend(fontsize=7, ncol=3, loc='upper right')
ax.grid(True, alpha=0.3)
ax.set_ylim(-1.2, 1.2)

# 下: エネルギー密度(時間平均)
ax = axes[1]
u_avg = np.exp(-2 * x / delta)  # |E|^2の時間平均は指数の2乗
u_db = 10 * np.log10(np.maximum(u_avg, 1e-20))

ax.plot(x / delta, u_db, 'r-', linewidth=2)
ax.set_xlabel('Depth $x / \\delta$', fontsize=12)
ax.set_ylabel('Energy density [dB]', fontsize=12)
ax.set_title('Time-averaged Energy Density', fontsize=13)
ax.grid(True, alpha=0.3)
ax.set_ylim(-70, 5)

# 浸透深さの目安線
for n_delta in [1, 2, 3, 5]:
    ax.axvline(x=n_delta, color='gray', linestyle=':', alpha=0.5)
    loss_db = 10 * np.log10(np.exp(-2*n_delta))
    ax.text(n_delta + 0.1, -5, f'{n_delta}$\\delta$\n({loss_db:.1f} dB)',
            fontsize=8, color='gray')

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

print(f"浸透深さ (100 MHz, Cu): {delta*1e6:.2f} um")
print(f"1 delta での減衰: {20*np.log10(np.exp(-1)):.1f} dB")
print(f"5 delta での減衰: {20*np.log10(np.exp(-5)):.1f} dB")

上のパネルでは、銅の内部での電磁波の瞬時電場を8つの時刻でプロットしています。波は表面($x = 0$)から内部に進むにつれて指数関数的に減衰し、黒の破線のエンベロープ $\pm e^{-x/\delta}$ に囲まれています。深さ $1\delta$ で振幅が 37% に、$3\delta$ で 5% に、$5\delta$ で 0.7% にまで減衰します。波長は自由空間での波長 $\lambda_0 = c/f = 3$ m とは全く異なり、$\lambda_c = 2\pi\delta$ と非常に短くなっています。下のパネルでは、時間平均のエネルギー密度をデシベルスケールで示しています。エネルギー密度は $e^{-2x/\delta}$ に比例するため、深さ $1\delta$ あたり約 8.7 dB の減衰です。$5\delta$ の深さでは約 43 dB(電力で2万分の1以下)に減衰しており、実用上は完全に遮蔽されています。EMCの設計指針として「シールド厚は浸透深さの5倍以上」と言われる根拠がこのグラフから理解できます。

マクスウェル方程式から求めた光速の検証

最後に、$\mu_0$ と $\epsilon_0$ の値から光速を計算し、実測値と比較するシンプルなコードを示します。

import numpy as np

# 物理定数
mu0 = 4 * np.pi * 1e-7   # 真空透磁率 [H/m]
epsilon0 = 8.854187817e-12  # 真空誘電率 [F/m]

# マクスウェル方程式から導かれる電磁波の速度
c_maxwell = 1 / np.sqrt(mu0 * epsilon0)

# 光速の実測値(定義値)
c_measured = 299792458  # [m/s]

print("=== Maxwell's Prediction of the Speed of Light ===")
print(f"mu_0 = {mu0:.6e} H/m")
print(f"epsilon_0 = {epsilon0:.6e} F/m")
print(f"c (Maxwell) = 1/sqrt(mu_0 * epsilon_0) = {c_maxwell:.6f} m/s")
print(f"c (measured) = {c_measured} m/s")
print(f"Relative error = {abs(c_maxwell - c_measured)/c_measured * 100:.6f} %")

# 自由空間の波動インピーダンス
eta0 = np.sqrt(mu0 / epsilon0)
print(f"\nFree-space impedance eta_0 = {eta0:.2f} Ohm")

# 各媒質中の電磁波速度
print("\n=== Speed in Different Media ===")
media = {
    'Vacuum': (1.0, 1.0),
    'Air': (1.0006, 1.0),
    'Glass': (4.0, 1.0),
    'Water': (80.0, 1.0),
    'Diamond': (5.87, 1.0),
}

for name, (eps_r, mu_r) in media.items():
    n = np.sqrt(eps_r * mu_r)
    v = c_measured / n
    print(f"{name:15s}: n = {n:.3f}, v = {v/1e8:.4f} x 10^8 m/s")

このコードの出力から、$\mu_0$ と $\epsilon_0$ という電気と磁気の基本定数だけで計算した速度 $c = 1/\sqrt{\mu_0\epsilon_0}$ が、光速の定義値 $299792458$ m/s と極めて高い精度で一致することが確認できます。この一致はマクスウェルの理論の正しさを裏付けるものであり、光が電磁波であることの決定的な証拠です。また、自由空間の波動インピーダンスは約 $376.7\,\Omega$ であり、各媒質の屈折率に応じて電磁波の速度が変わることも示されています。水の比誘電率は約 80 と大きいため、水中での電磁波の速度は真空中の約 1/9 にまで低下します。

電磁波のエネルギー — ポインティングベクトルの可視化

電場と磁場のエネルギー密度およびポインティングベクトルを可視化します。

import numpy as np
import matplotlib.pyplot as plt

# 物理定数
mu0 = 4 * np.pi * 1e-7
epsilon0 = 8.854187817e-12
c = 1 / np.sqrt(mu0 * epsilon0)
eta0 = np.sqrt(mu0 / epsilon0)

# 正弦波パラメータ
E0 = 100  # 電場振幅 [V/m]
B0 = E0 / c
f = 1e9  # 1 GHz
omega = 2 * np.pi * f
k = omega / c
T = 1 / f

# 空間軸(1波長分)
wavelength = c / f
x = np.linspace(0, 2 * wavelength, 1000)

# 時刻 t = 0 でのスナップショット
Ey = E0 * np.cos(k * x)
Bz = B0 * np.cos(k * x)

# エネルギー密度
u_E = 0.5 * epsilon0 * Ey**2  # 電場のエネルギー密度
u_B = 0.5 * Bz**2 / mu0       # 磁場のエネルギー密度
u_total = u_E + u_B

# ポインティングベクトル
S = Ey * Bz / mu0  # = (1/mu0) * E x B

# 可視化
fig, axes = plt.subplots(3, 1, figsize=(12, 10), sharex=True)

# 電場と磁場
ax = axes[0]
ax.plot(x / wavelength, Ey / E0, 'b-', linewidth=2, label='$E_y / E_0$')
ax.plot(x / wavelength, Bz / B0, 'r--', linewidth=2, label='$B_z / B_0$')
ax.set_ylabel('Normalized amplitude', fontsize=11)
ax.set_title('Electric and Magnetic Fields', fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

# エネルギー密度
ax = axes[1]
ax.plot(x / wavelength, u_E * 1e6, 'b-', linewidth=2, label='$u_E$ (electric)')
ax.plot(x / wavelength, u_B * 1e6, 'r--', linewidth=2, label='$u_B$ (magnetic)')
ax.plot(x / wavelength, u_total * 1e6, 'k-', linewidth=2, label='$u_{total}$')
ax.axhline(y=np.mean(u_total)*1e6, color='gray', linestyle=':', alpha=0.7,
           label=f'$\\langle u \\rangle = {np.mean(u_total)*1e6:.3f}\\,\\mu$J/m$^3$')
ax.set_ylabel('Energy density [$\\mu$J/m$^3$]', fontsize=11)
ax.set_title('Electromagnetic Energy Density', fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# ポインティングベクトル
ax = axes[2]
ax.plot(x / wavelength, S, 'm-', linewidth=2, label='$S_x = E_y B_z / \\mu_0$')
S_avg = E0**2 / (2 * mu0 * c)
ax.axhline(y=S_avg, color='k', linestyle='--', linewidth=1.5,
           label=f'$\\langle S \\rangle = {S_avg:.2f}$ W/m$^2$')
ax.axhline(y=0, color='gray', linewidth=0.5)
ax.set_xlabel('$x / \\lambda$', fontsize=11)
ax.set_ylabel('Poynting vector [W/m$^2$]', fontsize=11)
ax.set_title('Poynting Vector (Energy Flux)', fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.suptitle(f'EM Wave Energy ($E_0 = {E0}$ V/m, $f = {f/1e9:.0f}$ GHz)',
             fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig('poynting_vector.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"E0 = {E0} V/m, B0 = {B0:.4e} T")
print(f"Average energy density = {np.mean(u_total):.4e} J/m^3")
print(f"Average Poynting vector = {S_avg:.2f} W/m^2")

3つのパネルで電磁波のエネルギー輸送を示しています。上段の電場と磁場は同位相で振動しています。中段のエネルギー密度では、電場のエネルギー密度 $u_E = \frac{1}{2}\epsilon_0 E^2$(青)と磁場のエネルギー密度 $u_B = \frac{B^2}{2\mu_0}$(赤)が常に等しいことが確認できます。これは電磁波の重要な性質であり、電気エネルギーと磁気エネルギーが均等に分配されることを意味します。合計エネルギー密度(黒)は $\cos^2$ の形で空間変動し、灰色の破線はその時間平均値です。下段のポインティングベクトルは常にゼロ以上であり、電磁波のエネルギーが常に伝搬方向($+x$)に流れていることを示しています。時間平均のポインティングベクトル(エネルギーフラックス)$\langle S \rangle = E_0^2 / (2\mu_0 c)$ は約 13.3 W/m$^2$ であり、これが電磁波の放射強度に対応します。

まとめ

本記事では、マクスウェル方程式と電磁波について体系的に解説しました。

  • 変位電流: $\bm{J}_d = \epsilon_0 \frac{\partial \bm{E}}{\partial t}$ — アンペールの法則のコンデンサ回路での矛盾を解消し、「変化する電場が磁場を生む」という電磁場の対称性を完成させた
  • マクスウェル方程式: 4本の方程式(ガウスの法則、磁場のガウスの法則、ファラデーの法則、アンペール-マクスウェルの法則)で電磁気学の全体を記述。電気、磁気、光を統一する
  • 波動方程式: 自由空間で $\nabla^2 \bm{E} = \mu_0\epsilon_0 \frac{\partial^2 \bm{E}}{\partial t^2}$ が導かれ、電磁場が波として伝搬することが数学的に証明された
  • 光速の導出: $c = 1/\sqrt{\mu_0\epsilon_0} \approx 3 \times 10^8$ m/s — 電気と磁気の定数だけで光速が決まる。光は電磁波の一種
  • 電磁波の性質: 横波、$\bm{E} \perp \bm{B} \perp \hat{\bm{k}}$(右手系)、$B_0 = E_0/c$、ポインティングベクトルでエネルギーを輸送
  • 波動インピーダンス: $\eta_0 = \sqrt{\mu_0/\epsilon_0} \approx 377\,\Omega$ — 媒質が電磁波に対して示す特性インピーダンス
  • 物質中の伝搬: 誘電体では $v = c/n$(屈折率 $n = \sqrt{\epsilon_r \mu_r}$)。導体では浸透深さ $\delta = \sqrt{2/(\omega\mu\sigma)}$ で指数減衰(表皮効果)

マクスウェル方程式は電磁気学の完結した体系であると同時に、現代物理学への入り口でもあります。アインシュタインの特殊相対性理論は、マクスウェル方程式が示す光速の不変性を出発点として構築されました。また、電磁波の偏波、回折、干渉といった波動現象や、アンテナからの電磁波の放射は、すべてマクスウェル方程式から導かれます。

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