方位磁針が北を指すのはなぜでしょうか。また、MRI(磁気共鳴画像法)はどうやって体内の画像を得ているのでしょうか。これらの現象と技術の背後には、電流が周囲の空間に磁場を形成するという物理法則があります。1820年にエルステッドが「電流を流すと近くの方位磁針が振れる」ことを発見し、電気と磁気が密接に結びついていることが明らかになりました。
ビオ・サバールの法則と磁場を理解すると、次のような幅広い応用が見えてきます。
- モーターと発電機の設計: コイルに流れる電流が作る磁場がローターを回し、逆にローターの回転が電場を生みます。磁場の分布を正確に計算することがモーターの効率向上に直結します
- MRI(磁気共鳴画像法): 超伝導コイルが生成する均一な強磁場(1.5〜3 T)の中で水素原子核の磁気共鳴を利用して画像を作ります。ソレノイドの磁場計算はMRIの基本設計に不可欠です
- 電磁両立性(EMC): 電子回路の配線パターンが作る磁場が他の回路に干渉する問題を解析するために、ビオ・サバールの法則による磁場計算が使われます
本記事の内容
- 磁場 $\bm{B}$ の基礎 — 磁気力とローレンツ力
- ビオ・サバールの法則の定式化と物理的意味
- 応用例: 直線電流、円形ループ、ソレノイドの磁場計算
- アンペールの法則(積分形と微分形)
- 磁束密度と磁場の関係
- Pythonによるビオ・サバール積分の数値計算と磁力線の3D可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
また、ベクトルの外積とベクトル解析の基礎(回転: $\nabla \times$)の知識があると理想的です。
磁場の基礎 — 磁気力とローレンツ力
磁場とは何か
電場が「電荷に力を及ぼす空間の性質」であったのと同様に、磁場(magnetic field) は「動いている電荷(= 電流)に力を及ぼす空間の性質」です。静止した電荷は磁場から力を受けませんが、動いている電荷は磁場から力を受けます。この違いは電場と磁場の根本的な違いの一つです。
日常的なイメージで言えば、磁石の周りにある「目に見えない力の場」が磁場です。鉄粉を磁石の周りに撒くと美しい曲線模様が浮かび上がりますが、これが磁力線(磁場の方向を示す線)を可視化したものです。
ローレンツ力
磁場 $\bm{B}$ の中を速度 $\bm{v}$ で運動する電荷 $q$ に働く力は
$$ \bm{F}_{\text{mag}} = q\bm{v} \times \bm{B} $$
です。電場による力 $q\bm{E}$ と合わせると、荷電粒子に働く全電磁力は
$$ \bm{F} = q(\bm{E} + \bm{v} \times \bm{B}) $$
となります。これが ローレンツ力(Lorentz force) です。
磁気力 $q\bm{v} \times \bm{B}$ の重要な特徴は、力が速度に常に垂直であることです。外積の定義から、$\bm{F}_{\text{mag}} \perp \bm{v}$ が常に成り立ちます。速度に垂直な力は速さを変えず方向だけを変えるため、磁場は荷電粒子の運動エネルギーを変化させません。すなわち、磁場は荷電粒子に仕事をしません。これは電場($\bm{F} = q\bm{E}$)が粒子を加速してエネルギーを与えるのとは対照的です。
一様な磁場中で電場がゼロの場合、荷電粒子は円運動(サイクロトロン運動)をします。この原理は粒子加速器やプラズマの閉じ込めに応用されています。
電流に働く力
電流は電荷の流れですから、電流が流れる導線も磁場から力を受けます。長さ $d\bm{l}$ の微小な導線要素に電流 $I$ が流れているとき、この要素に働く力は
$$ d\bm{F} = I \, d\bm{l} \times \bm{B} $$
です。導線全体に働く力は、これを導線に沿って線積分すれば得られます。
$$ \bm{F} = I \int d\bm{l} \times \bm{B} $$
2本の平行な導線に同方向の電流を流すと互いに引き合い、逆方向だと反発します。この力はかつてアンペアの定義(1 A = 1 m 離れた2本の無限直線電流間に $2 \times 10^{-7}$ N/m の力が働く電流値)の基礎でした。
ここまでで、磁場が電流(動く電荷)に力を及ぼすことがわかりました。では逆に、電流はどのような磁場を周囲に作るのでしょうか。その答えがビオ・サバールの法則です。
ビオ・サバールの法則
直感的な理解
直線電流の周りに方位磁針を配置すると、磁針は電流を中心とする同心円の接線方向を向きます。これは「電流が同心円状の磁場を作る」ことを意味します。右手の親指を電流の方向に向けると、残りの4本の指が磁場の回転方向を示す — これが 右ねじの法則 です。
ビオ・サバールの法則は、この「電流が作る磁場」を、導線の微小要素ごとの寄与として定量的に計算する法則です。クーロンの法則が点電荷の電場を与えるのと同様に、ビオ・サバールの法則は電流要素の磁場を与えます。
数学的定式化
電流 $I$ が流れる導線の微小要素 $d\bm{l}$ が、位置 $\bm{r}$ に作る微小磁場 $d\bm{B}$ は
$$ d\bm{B} = \frac{\mu_0}{4\pi} \frac{I \, d\bm{l} \times \hat{\bm{r}}’}{r’^2} $$
で与えられます。ここで
- $\mu_0 = 4\pi \times 10^{-7}$ H/m: 真空の透磁率
- $\bm{r}’ = \bm{r} – \bm{r}_s$: 電流要素の位置 $\bm{r}_s$ から観測点 $\bm{r}$ への変位ベクトル
- $r’ = |\bm{r}’|$: その大きさ
- $\hat{\bm{r}}’ = \bm{r}’/r’$: その単位ベクトル
導線全体が作る磁場は、全ての微小要素からの寄与を足し合わせて
$$ \bm{B}(\bm{r}) = \frac{\mu_0}{4\pi} \int_C \frac{I \, d\bm{l} \times \hat{\bm{r}}’}{r’^2} $$
と書けます。ここで $C$ は電流が流れる経路です。
ビオ・サバールの法則の特徴
ビオ・サバールの法則から読み取れる重要な性質をまとめます。
外積の構造: $d\bm{l} \times \hat{\bm{r}}’$ という外積が含まれるため、磁場は電流の方向($d\bm{l}$)と観測方向($\hat{\bm{r}}’$)の両方に垂直です。これは電場が電荷と観測点を結ぶ方向を向くのとは対照的です。電場は「放射状」、磁場は「回転的」という性格の違いがここに現れています。
距離依存性: クーロンの法則と同じく $1/r’^2$ で減衰します。これは3次元空間での広がりに由来する普遍的な特徴です。
電流の方向性: $d\bm{l}$ にはベクトルとしての方向があるため、磁場の向きが電流の向きに依存します。電流の向きを反転すると磁場も反転します。
$\bm{B}$ の発散がゼロ: ビオ・サバールの法則から導かれる磁場は必ず $\nabla \cdot \bm{B} = 0$ を満たします。これは「磁気単極子(磁荷)が存在しない」ことに対応し、磁力線は必ず閉曲線を描きます。電場のように湧き出しや吸い込みがないのです。
ビオ・サバールの法則の一般的な形がわかったところで、具体的な電流配置に対して磁場を計算してみましょう。3つの重要な例 — 直線電流、円形ループ、ソレノイド — を順に扱います。
応用例1: 無限直線電流の磁場
問題設定
$z$ 軸に沿って電流 $I$ が $+z$ 方向に流れる無限に長い直線導線が作る磁場を計算します。
ビオ・サバールの法則による計算
電流要素は $d\bm{l} = dz’ \hat{\bm{z}}$ で、$z’$ 軸上の位置 $(0, 0, z’)$ にあります。観測点を $(\rho, 0, 0)$($z$ 軸から距離 $\rho$ の点)とすると、電流要素から観測点への変位ベクトルは
$$ \bm{r}’ = (\rho, 0, -z’) $$
その大きさは $r’ = \sqrt{\rho^2 + z’^2}$ です。外積を計算すると
$$ d\bm{l} \times \hat{\bm{r}}’ = dz’ \hat{\bm{z}} \times \frac{(\rho, 0, -z’)}{r’} = \frac{\rho \, dz’}{r’} \hat{\bm{\phi}} $$
ここで $\hat{\bm{\phi}}$ は円筒座標の方位角方向の単位ベクトルです。外積の結果が $\hat{\bm{\phi}}$ 方向のみを向くことは、右ねじの法則と一致しています。
ビオ・サバールの法則に代入すると
$$ \bm{B} = \frac{\mu_0 I}{4\pi} \int_{-\infty}^{\infty} \frac{\rho \, dz’}{(\rho^2 + z’^2)^{3/2}} \hat{\bm{\phi}} $$
この積分を実行するために、$z’ = \rho \tan\theta$ と置換します。すると $dz’ = \rho \sec^2\theta \, d\theta$ であり、$(\rho^2 + z’^2)^{3/2} = \rho^3 \sec^3\theta$ なので
$$ B = \frac{\mu_0 I}{4\pi} \int_{-\pi/2}^{\pi/2} \frac{\rho \cdot \rho \sec^2\theta \, d\theta}{\rho^3 \sec^3\theta} = \frac{\mu_0 I}{4\pi\rho} \int_{-\pi/2}^{\pi/2} \cos\theta \, d\theta $$
$\cos\theta$ の積分を $-\pi/2$ から $\pi/2$ まで実行すると $[\sin\theta]_{-\pi/2}^{\pi/2} = 1 – (-1) = 2$ となるので
$$ B = \frac{\mu_0 I}{2\pi\rho} $$
すなわち
$$ \bm{B} = \frac{\mu_0 I}{2\pi\rho} \hat{\bm{\phi}} $$
これが無限直線電流の磁場です。電場のガウスの法則の応用で求めた線電荷の電場 $E = \lambda/(2\pi\varepsilon_0\rho)$ と数学的に同じ $1/\rho$ 依存性を示していることに注目してください。
磁場は電流を中心とする同心円状で、距離に反比例して減衰します。右ねじの法則に従い、$I > 0$($+z$ 方向)のとき磁場は反時計回り($+\hat{\bm{\phi}}$ 方向)です。
直線電流の磁場がわかったところで、次は電流が円形のループを描く場合の磁場を計算しましょう。円形電流ループはコイルやソレノイドの基本構成要素であり、磁気双極子の原型でもあります。
応用例2: 円形電流ループの軸上磁場
問題設定
半径 $a$ の円形ループに電流 $I$ が流れているとき、ループの軸上($z$ 軸上)の磁場を計算します。
ビオ・サバールの法則による計算
ループを $xy$ 平面上に、中心を原点に配置します。ループ上の微小要素の位置を角度 $\phi’$ でパラメータ化すると
$$ \bm{r}_s = (a\cos\phi’, a\sin\phi’, 0) $$
$$ d\bm{l} = a(-\sin\phi’, \cos\phi’, 0) \, d\phi’ $$
軸上の観測点 $\bm{r} = (0, 0, z)$ への変位ベクトルは
$$ \bm{r}’ = (-a\cos\phi’, -a\sin\phi’, z) $$
その大きさは $r’ = \sqrt{a^2 + z^2}$($\phi’$ に依存しないことに注意)です。
外積 $d\bm{l} \times \hat{\bm{r}}’$ を計算します。成分ごとに書き下すと
$$ d\bm{l} \times \bm{r}’ = a \, d\phi’ \begin{vmatrix} \hat{\bm{x}} & \hat{\bm{y}} & \hat{\bm{z}} \\ -\sin\phi’ & \cos\phi’ & 0 \\ -a\cos\phi’ & -a\sin\phi’ & z \end{vmatrix} $$
$z$ 成分を計算すると $a\sin^2\phi’ + a\cos^2\phi’ = a$ となります。$x$ 成分と $y$ 成分は $\phi’$ で 0 から $2\pi$ まで積分するとゼロになります(対称性による相殺)。
したがって、軸上では $z$ 成分のみが残り
$$ B_z = \frac{\mu_0 I}{4\pi} \int_0^{2\pi} \frac{a^2 \, d\phi’}{(a^2 + z^2)^{3/2}} = \frac{\mu_0 I a^2}{2(a^2 + z^2)^{3/2}} $$
まとめると
$$ \bm{B}(0, 0, z) = \frac{\mu_0 I a^2}{2(a^2 + z^2)^{3/2}} \hat{\bm{z}} $$
特別な場合の確認
ループの中心 ($z = 0$):
$$ B_z(0) = \frac{\mu_0 I}{2a} $$
これは円形ループの中心磁場として知られた結果です。電流が大きいほど、半径が小さいほど中心の磁場は強くなります。
遠方 ($|z| \gg a$):
$(a^2 + z^2)^{3/2} \approx |z|^3$ と近似すると
$$ B_z \approx \frac{\mu_0 I a^2}{2|z|^3} = \frac{\mu_0}{4\pi} \frac{2m}{|z|^3} $$
ここで $m = I\pi a^2 = IA$ は 磁気双極子モーメント(電流 $\times$ ループ面積)です。遠方では磁場が $1/z^3$ で減衰し、これは磁気双極子の特徴的な振る舞いです。電気双極子の電場が $1/r^3$ で減衰するのと全く同じ指数であり、双極子としての普遍的な性質が現れています。
円形ループの磁場を理解したところで、このループを多数重ねた構造 — ソレノイド — の磁場に進みましょう。ソレノイドは実用上最も重要な磁場発生装置の一つです。
応用例3: ソレノイドの磁場
直感的な理解
ソレノイド は、細い導線を密に螺旋状に巻いたコイルです。イメージとしては、バネのような形をした長いコイルを思い浮かべてください。ソレノイドの内部には驚くほど一様な磁場が生じます。これがソレノイドが電磁石やMRIなどの磁場発生装置に使われる理由です。
なぜ一様な磁場が生じるかを直感的に理解するには、各ループの磁場を重ね合わせることを考えます。ソレノイドの中央付近では、左右のループからの磁場が足し合わさって強め合い、軸方向に一様な磁場が生まれます。一方、ソレノイドの外部では、隣接するループの磁場が互いに打ち消し合い、磁場はほぼゼロになります。
アンペールの法則による磁場計算
無限に長いソレノイド(単位長さあたりの巻数 $n$、電流 $I$)の磁場は、アンペールの法則(後述)を使うと簡単に求まります。ここでは結果を先に示し、アンペールの法則の詳細は次のセクションで扱います。
ソレノイドの内部:
$$ \bm{B} = \mu_0 n I \hat{\bm{z}} $$
ソレノイドの外部:
$$ \bm{B} = \bm{0} $$
内部磁場は位置に依存しない一定値であり、電流 $I$ と巻数密度 $n$ に比例します。外部磁場がゼロであることと合わせて、ソレノイドは「磁場を内部に閉じ込める」装置と言えます。
有限長ソレノイドの場合
実際のソレノイドは有限の長さ $L$ を持つため、端部で磁場が弱まります。長さ $L$、巻数 $N$ のソレノイドの軸上中心の磁場は
$$ B_{\text{center}} = \frac{\mu_0 n I}{\sqrt{1 + (2a/L)^2}} $$
で近似されます($a$ はソレノイドの半径)。$L \gg a$ であれば $B_{\text{center}} \approx \mu_0 n I$ となり、無限長の結果に収束します。端部での磁場は中心の約半分($B_{\text{end}} \approx \mu_0 n I / 2$)になります。
ソレノイドの内部磁場を求める際に「アンペールの法則」を使いましたが、まだ詳しく説明していませんでした。次のセクションでアンペールの法則を体系的に導入しましょう。アンペールの法則はガウスの法則の磁場版とも言える基本法則であり、対称性を活用した磁場計算の強力な道具です。
アンペールの法則
直感的な理解
ガウスの法則が「閉曲面を貫く電束 = 内部電荷」という法則でしたが、アンペールの法則 は「閉曲線に沿った磁場の線積分 = 閉曲線を貫く電流」という法則です。ガウスの法則が面積分と電荷を結びつけるのに対し、アンペールの法則は線積分と電流を結びつけます。
これは、電場が「湧き出し」(発散)型の場であるのに対し、磁場が「渦」(回転)型の場であることに対応しています。電荷が電場の源であるように、電流が磁場の渦の源なのです。
アンペールの法則(積分形)
任意の閉曲線 $C$ に沿った磁場 $\bm{B}$ の線積分は、その閉曲線を貫く全電流 $I_{\text{enc}}$ に等しい:
$$ \oint_C \bm{B} \cdot d\bm{l} = \mu_0 I_{\text{enc}} $$
電流の向きと線積分の向きは右ねじの関係にあります。右手の指を線積分の方向に巻いたとき、親指の方向が電流の正の方向です。
直線電流への適用
アンペールの法則の威力を確認するために、無限直線電流の磁場を求めてみましょう。電流 $I$ が $z$ 軸に沿って流れているとき、対称性から磁場は $\hat{\bm{\phi}}$ 方向のみで、$\rho$ のみに依存します。
電流を中心とする半径 $\rho$ の円を閉曲線 $C$ に選ぶと、$\bm{B} \cdot d\bm{l} = B_\phi \rho \, d\phi$ は円周上で一定なので
$$ \oint_C \bm{B} \cdot d\bm{l} = B_\phi \times 2\pi\rho $$
閉曲線を貫く電流は $I_{\text{enc}} = I$ なので
$$ B_\phi \times 2\pi\rho = \mu_0 I $$
$B_\phi$ について解くと
$$ B_\phi = \frac{\mu_0 I}{2\pi\rho} $$
ビオ・サバールの法則で苦労して導いた結果が、アンペールの法則を使えばわずか数行で得られます。対称性がある場合のアンペールの法則の強力さがわかります。
ソレノイドへの適用
無限長ソレノイドの内部磁場を求めます。ソレノイドの軸を $z$ 軸とし、単位長さあたり $n$ ターンの巻線に電流 $I$ が流れています。
対称性から、ソレノイドの内部では $\bm{B} = B \hat{\bm{z}}$(軸方向一様)、外部では $\bm{B} = \bm{0}$ です。アンペールの閉曲線として、一辺の長さ $L$ の長方形をソレノイドの壁をまたぐように配置します。この長方形は、ソレノイド内部に平行な辺、外部に平行な辺、それらを結ぶ垂直な辺2本からなります。
線積分の各辺の寄与を計算します。
- 内部の水平辺: $\bm{B} \cdot d\bm{l} = BL$($\bm{B}$ と $d\bm{l}$ が同方向)
- 外部の水平辺: $\bm{B} = 0$ なので寄与はゼロ
- 2本の垂直辺: $\bm{B} \perp d\bm{l}$ なので寄与はゼロ
したがって
$$ \oint_C \bm{B} \cdot d\bm{l} = BL $$
長方形を貫く電流は $I_{\text{enc}} = nLI$($nL$ ターン分の電流)なので
$$ BL = \mu_0 nLI $$
$B$ について解くと
$$ B = \mu_0 nI $$
前のセクションで述べた結果が、アンペールの法則から自然に導かれました。
アンペールの法則(微分形)
ガウスの法則に発散定理を適用して微分形が得られたのと同様に、アンペールの法則に ストークスの定理
$$ \oint_C \bm{B} \cdot d\bm{l} = \int_S (\nabla \times \bm{B}) \cdot d\bm{S} $$
を適用すると
$$ \int_S (\nabla \times \bm{B}) \cdot d\bm{S} = \mu_0 \int_S \bm{J} \cdot d\bm{S} $$
が得られます。ここで $I_{\text{enc}} = \int_S \bm{J} \cdot d\bm{S}$($\bm{J}$ は電流密度ベクトル)を使いました。この等式が任意の面 $S$ について成り立つためには
$$ \nabla \times \bm{B} = \mu_0 \bm{J} $$
でなければなりません。これがアンペールの法則の 微分形 です。「磁場の回転(curl)が電流密度に比例する」と読めます。
この式はマクスウェル方程式の第4式(ただし変位電流項を含まない静磁場の場合)です。時間変化する電場がある場合は、マクスウェルが追加した変位電流項 $\mu_0\varepsilon_0 \partial\bm{E}/\partial t$ が右辺に加わり、電磁波の存在を予言する完全な形になります。
アンペールの法則を積分形・微分形の両方で理解したところで、磁場に関連するもう一つの重要な量 — 磁束密度と磁場の強さの関係 — を整理しておきましょう。
磁束密度と磁場の強さ
$\bm{B}$ と $\bm{H}$ の関係
ここまで「磁場」として扱ってきた $\bm{B}$ は、正確には 磁束密度(magnetic flux density) と呼ばれます。単位はT(テスラ)です。これとは別に 磁場の強さ $\bm{H}$(単位: A/m)が定義されます。
真空中では
$$ \bm{B} = \mu_0 \bm{H} $$
の関係があり、磁性体中では
$$ \bm{B} = \mu_0 \mu_r \bm{H} = \mu \bm{H} $$
です。ここで $\mu_r$ は比透磁率、$\mu$ は透磁率です。
$\bm{D}$ と $\bm{E}$ の関係と全く同じ構造であることに気づくでしょう。電場では $\bm{D} = \varepsilon \bm{E}$ で、$\bm{D}$ が自由電荷のみをソースとしました。磁場では $\bm{B} = \mu \bm{H}$ で、$\bm{H}$ が自由電流のみをソースとします。
$$ \nabla \times \bm{H} = \bm{J}_f $$
ここで $\bm{J}_f$ は自由電流密度です。磁性体の磁化電流は $\bm{H}$ のソースに含まれないため、磁性体がある場合のアンペールの法則は $\bm{H}$ で書く方が便利です。
磁性体の分類
物質の比透磁率 $\mu_r$ によって、磁性体は3つに分類されます。
常磁性体($\mu_r > 1$、わずかに): アルミニウム、白金など。外部磁場の方向に弱く磁化されます。$\mu_r$ は 1 に非常に近い値です。
反磁性体($\mu_r < 1$、わずかに): 銅、水、ビスマスなど。外部磁場と逆方向にごくわずかに磁化されます。超伝導体は完全反磁性($\mu_r = 0$、マイスナー効果)を示します。
強磁性体($\mu_r \gg 1$): 鉄、コバルト、ニッケルなど。$\mu_r$ は数百から数万に達し、強い磁場を内部に集中させます。鉄心入りの電磁石やトランスで利用されます。
磁束密度と磁場の関係を整理したところで、いよいよ Python を使ってビオ・サバールの法則を数値的に計算し、磁場を可視化してみましょう。
Pythonでの実装 — ビオ・サバール積分の数値計算
直線電流の磁場の可視化
まず、直線電流が作る磁場を2次元断面で可視化します。
import numpy as np
import matplotlib.pyplot as plt
# 直線電流(z軸方向)の磁場を xy平面で計算
x = np.linspace(-3, 3, 200)
y = np.linspace(-3, 3, 200)
X, Y = np.meshgrid(x, y)
# 直線電流の磁場: B = mu0*I/(2*pi*rho) * phi_hat
# phi_hat = (-sin(phi), cos(phi)) = (-y/rho, x/rho)
rho = np.sqrt(X**2 + Y**2)
rho = np.maximum(rho, 0.1) # ゼロ除算防止
# 規格化(mu0*I/(2*pi) = 1 とする)
Bx = -Y / rho**2
By = X / rho**2
B_mag = np.sqrt(Bx**2 + By**2)
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# 左: ストリームプロット
ax = axes[0]
strm = ax.streamplot(X, Y, Bx, By, color=np.log10(B_mag), cmap='coolwarm',
density=2, linewidth=1.5)
ax.plot(0, 0, 'ko', markersize=15, zorder=5)
ax.annotate('$I$ (out of page)', xy=(0, 0), xytext=(0.3, 0.5),
fontsize=10, arrowprops=dict(arrowstyle='->', color='black'))
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title('Magnetic Field of a Straight Current', fontsize=13)
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
ax.set_aspect('equal')
fig.colorbar(strm.lines, ax=ax, label='$\\log_{10}|B|$')
# 右: B の大きさ vs 距離
ax = axes[1]
rho_plot = np.linspace(0.1, 3, 300)
B_theory = 1.0 / rho_plot # 規格化
ax.plot(rho_plot, B_theory, 'b-', linewidth=2.5, label='$B \\propto 1/\\rho$')
ax.set_xlabel('Distance from wire $\\rho$', fontsize=12)
ax.set_ylabel('$|B|$ [normalized]', fontsize=12)
ax.set_title('Magnetic Field Magnitude vs Distance', fontsize=13)
ax.legend(fontsize=12)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('straight_wire_field.png', dpi=150, bbox_inches='tight')
plt.show()
左図のストリームプロットでは、直線電流(黒丸、紙面から手前に向かう)を中心とする同心円状の磁力線が描かれています。磁力線が反時計回りに巻いており、右ねじの法則と一致しています。色の濃淡は磁場の強さの対数値で、電流に近いほど赤(磁場が強い)、遠いほど青(磁場が弱い)です。右図は磁場の大きさの距離依存性を示し、理論通りの $1/\rho$ 特性が確認できます。
円形電流ループの磁場(ビオ・サバール数値積分)
次に、ビオ・サバールの法則を数値的に積分して、円形電流ループの磁場を$xz$ 平面内で計算します。
import numpy as np
import matplotlib.pyplot as plt
def biot_savart_loop(a, I, X, Z, n_segments=500):
"""円形電流ループ(xy平面、半径a)のビオ・サバール数値積分
X, Z: 観測点のメッシュグリッド(xz平面, y=0)
"""
Bx = np.zeros_like(X)
Bz = np.zeros_like(Z)
dphi = 2 * np.pi / n_segments
phi_arr = np.linspace(0, 2 * np.pi, n_segments, endpoint=False)
for phi in phi_arr:
# 電流要素の位置
xs = a * np.cos(phi)
ys = a * np.sin(phi)
zs = 0.0
# 電流要素 dl = a*(-sin(phi), cos(phi), 0) * dphi
dlx = -a * np.sin(phi) * dphi
dly = a * np.cos(phi) * dphi
dlz = 0.0
# 変位ベクトル(電流要素 → 観測点)
Rx = X - xs
Ry = 0.0 - ys # y=0 平面
Rz = Z - zs
R_mag = np.sqrt(Rx**2 + Ry**2 + Rz**2)
R_mag = np.maximum(R_mag, 0.05)
# dl x R の計算(外積)
cross_x = dly * Rz - dlz * Ry
cross_y = dlz * Rx - dlx * Rz
cross_z = dlx * Ry - dly * Rx
# ビオ・サバール: dB = (mu0/(4pi)) * I * (dl x R_hat) / R^2
# = (mu0/(4pi)) * I * (dl x R) / R^3
factor = I / R_mag**3 # mu0/(4pi)は規格化で省略
Bx += factor * cross_x
Bz += factor * cross_z
# By成分はy=0平面の対称性によりゼロ
return Bx, Bz
# グリッド生成
x = np.linspace(-3, 3, 150)
z = np.linspace(-3, 3, 150)
X, Z = np.meshgrid(x, z)
# 円形ループ(半径a=1, 電流I=1)の磁場計算
Bx, Bz = biot_savart_loop(a=1.0, I=1.0, X=X, Z=Z)
B_mag = np.sqrt(Bx**2 + Bz**2)
fig, ax = plt.subplots(figsize=(10, 8))
# ストリームプロット
strm = ax.streamplot(X, Z, Bx, Bz, color=np.log10(B_mag + 1e-10),
cmap='inferno', density=2.5, linewidth=1.2)
# ループの断面を表示
theta_loop = np.array([-1, 1])
ax.plot(theta_loop, [0, 0], 'ro', markersize=15, zorder=5, label='Current loop')
ax.set_xlabel('x', fontsize=13)
ax.set_ylabel('z (axis)', fontsize=13)
ax.set_title('Magnetic Field of a Circular Current Loop (Biot-Savart)', fontsize=14)
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
ax.set_aspect('equal')
ax.legend(fontsize=11)
fig.colorbar(strm.lines, ax=ax, label='$\\log_{10}|B|$')
plt.tight_layout()
plt.savefig('loop_field_biot_savart.png', dpi=150, bbox_inches='tight')
plt.show()
$xz$ 平面内の円形電流ループの磁場が描かれています。ループは $x = \pm 1$ の位置に赤丸で示された断面を持ちます。磁力線はループの内側では上向き($+z$)に走り、ループを通過した後は外側を回って下方から戻ってくる閉曲線を描いています。この磁力線パターンは棒磁石の周りの磁力線と非常に似ており、円形電流ループが「磁気双極子」として振る舞うことを視覚的に確認できます。ループの中心付近で磁力線が密集しているのは、中心の磁場が最も強いことに対応しています。
円形ループの軸上磁場: 理論値と数値解の比較
ビオ・サバールの数値積分が正しいかを、解析解と比較して検証します。
import numpy as np
import matplotlib.pyplot as plt
a = 1.0 # ループ半径
I = 1.0 # 電流
# 解析解(軸上磁場)
z_axis = np.linspace(-5, 5, 500)
Bz_theory = 0.5 * a**2 / (a**2 + z_axis**2)**1.5 # mu0*I/(4pi)で規格化
# 数値解(ビオ・サバール積分)
def biot_savart_on_axis(a, I, z_points, n_seg=1000):
"""軸上(x=0, y=0)でのビオ・サバール数値積分"""
Bz_num = np.zeros_like(z_points)
dphi = 2 * np.pi / n_seg
phi_arr = np.linspace(0, 2 * np.pi, n_seg, endpoint=False)
for phi in phi_arr:
xs = a * np.cos(phi)
ys = a * np.sin(phi)
dlx = -a * np.sin(phi) * dphi
dly = a * np.cos(phi) * dphi
Rx = -xs
Ry = -ys
Rz = z_points
R_mag = np.sqrt(Rx**2 + Ry**2 + Rz**2)
R_mag = np.maximum(R_mag, 1e-10)
# dl x R のz成分: dlx*Ry - dly*Rx
cross_z = dlx * Ry - dly * Rx
Bz_num += I * cross_z / R_mag**3
return Bz_num
Bz_numerical = biot_savart_on_axis(a, I, z_axis)
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# 左: 磁場分布
ax = axes[0]
ax.plot(z_axis, Bz_theory, 'b-', linewidth=2.5, label='Theory (analytic)')
ax.plot(z_axis[::10], Bz_numerical[::10], 'ro', markersize=5,
label='Biot-Savart (numerical)', alpha=0.7)
ax.axhline(y=0.5, color='gray', linestyle=':', linewidth=1,
label=f'$B_z(0) = \\mu_0 I / 2a$')
ax.set_xlabel('$z / a$', fontsize=12)
ax.set_ylabel('$B_z$ [normalized]', fontsize=12)
ax.set_title('On-axis Magnetic Field of Circular Loop', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# 右: 相対誤差
ax = axes[1]
relative_error = np.abs(Bz_numerical - Bz_theory) / (np.abs(Bz_theory) + 1e-20) * 100
ax.semilogy(z_axis, relative_error, 'g-', linewidth=1.5)
ax.set_xlabel('$z / a$', fontsize=12)
ax.set_ylabel('Relative error [%]', fontsize=12)
ax.set_title('Numerical vs Analytical: Error', fontsize=13)
ax.grid(True, alpha=0.3)
ax.set_ylim(1e-4, 10)
plt.tight_layout()
plt.savefig('loop_on_axis_verification.png', dpi=150, bbox_inches='tight')
plt.show()
左図では、円形ループの軸上磁場の解析解(青実線)と数値解(赤丸)がほぼ完全に重なっていることが確認できます。中心($z = 0$)で最大値 0.5(規格化単位)を取り、$z$ が増加するに従って急速に減衰します。$|z| > 3a$ では磁場は中心値の数パーセント以下まで低下しています。右図の相対誤差は、ほとんどの範囲で 0.01% 以下であり、1000 分割のビオ・サバール数値積分が十分な精度を持つことがわかります。$z \approx 0$ 付近でわずかに誤差が大きくなるのは、電流ループに近いほど被積分関数の変化が急なためです。
ヘルムホルツコイルの磁場
2つの同一の円形ループを間隔 $d = a$(半径に等しい間隔)で配置した ヘルムホルツコイル は、中央付近に非常に一様な磁場を生成します。ビオ・サバールの数値積分でこれを確認しましょう。
import numpy as np
import matplotlib.pyplot as plt
def biot_savart_loop_field(a, I, z_center, X, Z, n_seg=500):
"""z=z_centerに配置された円形ループの磁場をxz平面で計算"""
Bx = np.zeros_like(X)
Bz = np.zeros_like(Z)
dphi = 2 * np.pi / n_seg
phi_arr = np.linspace(0, 2 * np.pi, n_seg, endpoint=False)
for phi in phi_arr:
xs = a * np.cos(phi)
ys = a * np.sin(phi)
dlx = -a * np.sin(phi) * dphi
dly = a * np.cos(phi) * dphi
Rx = X - xs
Ry = 0.0 - ys
Rz = Z - z_center
R_mag = np.sqrt(Rx**2 + Ry**2 + Rz**2)
R_mag = np.maximum(R_mag, 0.05)
cross_x = dly * Rz
cross_z = dlx * Ry - dly * Rx
factor = I / R_mag**3
Bx += factor * cross_x
Bz += factor * cross_z
return Bx, Bz
a = 1.0
d = a # ヘルムホルツ条件: d = a
x = np.linspace(-2.5, 2.5, 120)
z = np.linspace(-2.5, 2.5, 120)
X, Z = np.meshgrid(x, z)
# 2つのループの磁場を重ね合わせ
Bx1, Bz1 = biot_savart_loop_field(a, 1.0, -d/2, X, Z)
Bx2, Bz2 = biot_savart_loop_field(a, 1.0, +d/2, X, Z)
Bx_total = Bx1 + Bx2
Bz_total = Bz1 + Bz2
B_mag = np.sqrt(Bx_total**2 + Bz_total**2)
fig, axes = plt.subplots(1, 2, figsize=(15, 7))
# 左: 2Dストリームプロット
ax = axes[0]
strm = ax.streamplot(X, Z, Bx_total, Bz_total, color=np.log10(B_mag + 1e-10),
cmap='inferno', density=2.5, linewidth=1.2)
ax.plot([-a, a], [-d/2, -d/2], 'ro', markersize=12)
ax.plot([-a, a], [+d/2, +d/2], 'ro', markersize=12)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('z', fontsize=12)
ax.set_title('Helmholtz Coil Magnetic Field', fontsize=14)
ax.set_aspect('equal')
fig.colorbar(strm.lines, ax=ax, label='$\\log_{10}|B|$')
# 右: 軸上の磁場分布(1ループ vs ヘルムホルツ)
ax = axes[1]
z_axis = np.linspace(-3, 3, 500)
# 1ループの軸上磁場
Bz_single = 0.5 * a**2 / (a**2 + z_axis**2)**1.5
# ヘルムホルツコイルの軸上磁場
Bz_helm = (0.5 * a**2 / (a**2 + (z_axis - d/2)**2)**1.5 +
0.5 * a**2 / (a**2 + (z_axis + d/2)**2)**1.5)
ax.plot(z_axis, Bz_single, 'b--', linewidth=2, label='Single loop', alpha=0.7)
ax.plot(z_axis, Bz_helm, 'r-', linewidth=2.5, label='Helmholtz coil')
# 一様性の範囲を示す
B_center = Bz_helm[len(z_axis)//2]
ax.axhline(y=B_center, color='gray', linestyle=':', linewidth=1)
ax.fill_between(z_axis, B_center*0.99, B_center*1.01,
where=(np.abs(z_axis) < 0.5*a), alpha=0.2, color='green',
label='1% uniformity region')
ax.set_xlabel('$z / a$', fontsize=12)
ax.set_ylabel('$B_z$ [normalized]', fontsize=12)
ax.set_title('On-axis Field: Single Loop vs Helmholtz', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('helmholtz_coil.png', dpi=150, bbox_inches='tight')
plt.show()
左図のストリームプロットでは、2つのループ(赤丸)の間の領域で磁力線がほぼ平行かつ等間隔になっていることが確認できます。これが一様磁場の視覚的な特徴です。右図の軸上磁場分布を見ると、単一ループ(青破線)では中心がピークの山なりの分布ですが、ヘルムホルツコイル(赤実線)では2つのコイルの中央付近で磁場がフラットになっています。緑色の帯は 1% の一様性範囲を示しており、コイル中心から $\pm 0.5a$ 程度の範囲で高い一様性が得られることがわかります。ヘルムホルツコイルの条件 $d = a$ は、軸上磁場の2次微分がゼロになる条件から導かれ、磁場の一様性を最大化するものです。
ソレノイドの磁場の3D可視化
最後に、ソレノイドの磁場をビオ・サバール積分で計算し、3次元的に可視化します。
import numpy as np
import matplotlib.pyplot as plt
def solenoid_field(a, L, n_turns, I, X, Z, n_seg_per_turn=100):
"""ソレノイドの磁場をxz平面で計算(ビオ・サバール積分)"""
Bx = np.zeros_like(X)
Bz = np.zeros_like(Z)
total_segments = n_turns * n_seg_per_turn
dphi = 2 * np.pi * n_turns / total_segments
for i in range(total_segments):
phi = 2 * np.pi * n_turns * i / total_segments
z_s = -L/2 + L * i / total_segments
xs = a * np.cos(phi)
ys = a * np.sin(phi)
dlx = -a * np.sin(phi) * dphi
dly = a * np.cos(phi) * dphi
dlz = L / total_segments # z方向の微小変位
Rx = X - xs
Ry = 0.0 - ys
Rz = Z - z_s
R_mag = np.sqrt(Rx**2 + Ry**2 + Rz**2)
R_mag = np.maximum(R_mag, 0.08)
# dl x R
cross_x = dly * Rz - dlz * Ry
cross_z = dlx * Ry - dly * Rx
factor = I / R_mag**3
Bx += factor * cross_x
Bz += factor * cross_z
return Bx, Bz
# パラメータ
a = 0.5 # 半径
L = 4.0 # 長さ
n_turns = 40 # 巻数
I = 1.0
x = np.linspace(-2, 2, 100)
z = np.linspace(-4, 4, 100)
X, Z = np.meshgrid(x, z)
Bx, Bz = solenoid_field(a, L, n_turns, I, X, Z, n_seg_per_turn=50)
B_mag = np.sqrt(Bx**2 + Bz**2)
fig, axes = plt.subplots(1, 2, figsize=(15, 7))
# 左: ストリームプロット
ax = axes[0]
strm = ax.streamplot(X, Z, Bx, Bz, color=np.log10(B_mag + 1e-10),
cmap='inferno', density=2.5, linewidth=1.2)
# ソレノイドの輪郭を描画
ax.plot([-a, -a], [-L/2, L/2], 'c-', linewidth=3)
ax.plot([a, a], [-L/2, L/2], 'c-', linewidth=3)
ax.plot([-a, a], [-L/2, -L/2], 'c-', linewidth=1.5, alpha=0.5)
ax.plot([-a, a], [L/2, L/2], 'c-', linewidth=1.5, alpha=0.5)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('z', fontsize=12)
ax.set_title(f'Solenoid Field (L={L}, a={a}, N={n_turns})', fontsize=13)
ax.set_xlim(-2, 2)
ax.set_ylim(-4, 4)
ax.set_aspect('equal')
fig.colorbar(strm.lines, ax=ax, label='$\\log_{10}|B|$')
# 右: 軸上磁場分布
ax = axes[1]
z_axis = np.linspace(-4, 4, 500)
# 数値計算(軸上)
Bx_axis, Bz_axis = solenoid_field(a, L, n_turns, I,
np.zeros_like(z_axis), z_axis,
n_seg_per_turn=50)
# 理論値(無限長ソレノイド)
n_density = n_turns / L
B_inf = n_density * I # mu0は規格化で省略
ax.plot(z_axis, Bz_axis, 'b-', linewidth=2.5, label='Numerical (finite)')
ax.axhline(y=B_inf, color='r', linestyle='--', linewidth=2,
label=f'$\\mu_0 n I$ (infinite solenoid)')
ax.axvline(x=-L/2, color='gray', linestyle=':', linewidth=1)
ax.axvline(x=L/2, color='gray', linestyle=':', linewidth=1)
ax.fill_betweenx([0, B_inf*1.1], -L/2, L/2, alpha=0.08, color='cyan',
label='Solenoid region')
ax.set_xlabel('$z$', fontsize=12)
ax.set_ylabel('$B_z$ [normalized]', fontsize=12)
ax.set_title('On-axis Field of Finite Solenoid', fontsize=13)
ax.legend(fontsize=10, loc='upper right')
ax.grid(True, alpha=0.3)
ax.set_xlim(-4, 4)
plt.tight_layout()
plt.savefig('solenoid_field.png', dpi=150, bbox_inches='tight')
plt.show()
左図のストリームプロットでは、ソレノイド(シアン色の輪郭)の内部に密集した平行な磁力線が走り、外部では磁力線が大きく膨らんで戻ってくる様子が描かれています。ソレノイド内部の磁力線がほぼ平行で等間隔であることは、磁場が一様であることを意味します。外部の磁力線パターンは棒磁石と同様であり、ソレノイドが磁気双極子として振る舞うことが確認できます。右図の軸上磁場分布では、ソレノイド中央部の磁場が理論値 $\mu_0 nI$(赤破線)にほぼ一致し、端部では約半分に低下していることがわかります。有限長のソレノイドでは端部効果により磁場が理想値から外れますが、長さが半径の8倍($L/a = 8$)であるこの例では、中央部分の磁場は理論値から数パーセント以内に収まっています。
まとめ
本記事では、電流が作る磁場の基礎であるビオ・サバールの法則から、アンペールの法則、そして具体的な磁場計算と数値検証まで体系的に解説しました。
- ローレンツ力: 磁場中を動く電荷に $\bm{F} = q\bm{v} \times \bm{B}$ の力が働く。力は速度に常に垂直であり、磁場は荷電粒子に仕事をしない
- ビオ・サバールの法則: 電流要素 $Id\bm{l}$ が作る微小磁場は $d\bm{B} = (\mu_0/4\pi) I d\bm{l} \times \hat{\bm{r}}’ / r’^2$。磁場は電流方向と観測方向の両方に垂直(外積の構造)
- 直線電流: $B = \mu_0 I / (2\pi\rho)$。距離に反比例する同心円状の磁場
- 円形ループ: 軸上磁場 $B_z = \mu_0 I a^2 / [2(a^2 + z^2)^{3/2}]$。遠方では $1/z^3$(磁気双極子)の振る舞い
- ソレノイド: 内部磁場 $B = \mu_0 nI$(一様)、外部はほぼゼロ。ヘルムホルツコイル($d = a$)で高い一様性を実現
- アンペールの法則: 積分形 $\oint \bm{B} \cdot d\bm{l} = \mu_0 I_{\text{enc}}$、微分形 $\nabla \times \bm{B} = \mu_0 \bm{J}$。対称性のある問題で磁場を効率的に求める
- $\bm{B}$ と $\bm{H}$: $\bm{B} = \mu\bm{H}$。磁性体中では $\bm{H}$ が自由電流のみをソースとし、アンペールの法則が簡潔になる
ここまでで、静電場(ガウスの法則)と静磁場(アンペールの法則)の基礎が揃いました。しかし、これらは「時間的に変化しない」場合の法則です。ファラデーは「磁場の時間変化が電場を生む」ことを発見し(ファラデーの法則)、マクスウェルは「電場の時間変化が磁場を生む」こと(変位電流)を理論的に予言しました。この2つの効果を加えると、電場と磁場が互いに誘起し合いながら空間を伝搬する 電磁波 が存在することが示されます。
次のステップとして、以下の記事も参考にしてください。