「磁場って、何かを押す力ですよね?」
そう思っているあなた、ちょっと待ってください。磁場は仕事をしません。にもかかわらず、荷電粒子はくるくる回り、時には直線的に加速され、螺旋を描きながら進みます。この一見矛盾した振る舞いを、今日は数式→コード→実機シミュレーションの3段階で完全に理解しましょう。
今回の主役はこちら👇
▶ ローレンツ力・荷電粒子運動シミュレーター
https://novasolver.jp/tools/magnetic-force.html
ブラウザで即動作・登録不要。電子・陽子・カスタム粒子の軌道をリアルタイムで観察できます。
導入:「磁場は仕事をしない」ってどういうこと?
物理の教科書にはこう書いてあります。
ローレンツ力: $\vec{F}= q(\vec{E}+ \vec{v}\times \vec{B})$
でも「力がかかってるのに仕事をしない」って、直感に反しませんか?
答えはシンプル:磁気力は常に速度に対して垂直だからです。力の方向と運動の方向が直交していると、その力は「曲げる」だけで「加速も減速もしない」。つまり速さは変わらず、向きだけが変わる——これが磁場の本質です。
一方、電場 $\vec{E}$ は速度と平行な成分を持てるので、粒子を加速したり減速したりできます。この2つの力が組み合わさると、驚くほど多彩な軌道が生まれます。
ざっくり本質:たとえ話で理解する3つのモード
「磁場はカーブ、電場はアクセル。両方踏めばドリフト走行」
- 磁場だけ → 円運動(カーブを曲がり続けるだけ)
- 電場だけ → 等加速度直線運動(まっすぐ加速)
- 磁場+電場 → サイクロイド運動(円運動しながら全体が流れる)
この「流れる」現象、実はE×Bドリフトと呼ばれ、核融合プラズマの閉じ込めや宇宙プラズマ物理で超重要なんです。
数式で理解する
運動方程式:すべての始まり
荷電粒子の運動は、ニュートンの第2法則とローレンツ力の合成です。
m \frac{d\vec{v}}{dt}= \vec{F}= q(\vec{E}+ \vec{v}\times \vec{B})
- $m$ : 質量 (kg)
- $q$ : 電荷 (C)
- $\vec{v}$ : 速度ベクトル (m/s)
- $\vec{E}$ : 電場ベクトル (V/m)
- $\vec{B}$ : 磁束密度ベクトル (T)
この式を数値的に解くことで、粒子の軌道が決まります。解析的に解けるのはごく限られた条件だけ。だからこそ、シミュレーターとコードの出番です。
特殊ケース:一様磁場・電場なし
$\vec{B}=B\hat{z}$(z方向に一様)かつ $\vec{E}=0$ の場合、運動はxy平面内の純粋な円運動になります。このとき現れる2つの重要な量:
r_c = \frac{m v_\perp}{|q| B}, \quad \omega_c = \frac{|q| B}{m}
- $r_c$ : サイクロトロン半径(ラーマー半径)— 円軌道の半径
- $\omega_c$ : サイクロトロン角周波数 — 回転の速さ (rad/s)
- $v_\perp$ : 磁場に垂直な速度成分
ポイント:半径は質量に比例し、周波数は質量に反比例します。つまり「重い粒子ほどゆっくり大きな円を描く」。これが陽子と電子の違いです。
コードで実装する ★最重要★
ここがこの記事の核心です。上記の運動方程式を数値積分で解くコードを書きます。使うのは 4次のルンゲ=クッタ法。精度が高く、実装も比較的簡単です。
import numpy as np
# 物理定数
q_e = 1.602e-19 # 電子の電荷 (C)
m_e = 9.109e-31 # 電子の質量 (kg)
def lorentz_force(v, E, B, q):
"""ローレンツ力を計算 (ベクトル版)"""
return q * (E + np.cross(v, B))
def rk4_step(r, v, dt, E, B, q, m):
"""4次ルンゲ=クッタで1ステップ進める"""
def acceleration(v):
return lorentz_force(v, E, B, q) / m
# k1: 現在の勾配
k1v = acceleration(v)
k1r = v
# k2: 中点の勾配 (1)
k2v = acceleration(v + 0.5*dt*k1v)
k2r = v + 0.5*dt*k1v
# k3: 中点の勾配 (2)
k3v = acceleration(v + 0.5*dt*k2v)
k3r = v + 0.5*dt*k2v
# k4: 終点の勾配
k4v = acceleration(v + dt*k3v)
k4r = v + dt*k3v
# 重み付き平均で更新
r_new = r + (dt/6.0) * (k1r + 2*k2r + 2*k3r + k4r)
v_new = v + (dt/6.0) * (k1v + 2*k2v + 2*k3v + k4v)
return r_new, v_new
# シミュレーション設定
B = np.array([0.0, 0.0, 0.01]) # 磁束密度 0.01 T (z方向)
E = np.array([0.0, 0.0, 0.0]) # 電場なし
q = -q_e # 電子 (負電荷)
m = m_e
# 初期条件
r = np.array([0.0, 0.0, 0.0]) # 原点スタート
v = np.array([1e6, 0.0, 0.0]) # x方向に 1×10^6 m/s
dt = 1e-12 # 時間刻み 1 ps
steps = 2000 # 2000ステップ
# 軌跡を保存
trajectory = [r.copy()]
for _ in range(steps):
r, v = rk4_step(r, v, dt, E, B, q, m)
trajectory.append(r.copy())
# 理論値と比較
v_perp = np.linalg.norm(v[:2]) # xy平面の速度成分
r_c_theory = m * v_perp / (abs(q) * B[2])
omega_c_theory = abs(q) * B[2] / m
print(f"理論: r_c = {r_c_theory:.3e} m, ω_c = {omega_c_theory:.3e} rad/s")
print(f"軌跡の最大半径: {max(np.linalg.norm(p[:2]) for p in trajectory):.3e} m")
このコードのポイント:
-
np.cross(v, B)で外積を計算 → 磁気力が自動的に速度と垂直になる - ルンゲ=クッタ法で高精度(単純なオイラー法だと誤差が蓄積して軌道が発散する)
- 理論値と数値解が一致することを確認できる
実際に動かすと、電子が約 5.7×10⁻⁴ m の半径で円運動する様子が再現されます。理論値と誤差0.1%未満で一致するはずです。
数値例で確かめる
条件:電子 ($m_e=9.109\times10^{-31}$ kg, $q=-1.602\times10^{-19}$ C)
磁場 $B=0.01$ T (z方向), 電場なし
初速度 $v_x=1.0\times10^6$ m/s, $v_y=v_z=0$
理論計算:
r_c = \frac{m v_\perp}{|q| B} = \frac{(9.109\times10^{-31})(1.0\times10^6)}{(1.602\times10^{-19})(0.01)}
= \frac{9.109\times10^{-25}}{1.602\times10^{-21}} = 5.686\times10^{-4} \text{ m}
\omega_c = \frac{|q| B}{m} = \frac{(1.602\times10^{-19})(0.01)}{9.109\times10^{-31}} = 1.759\times10^9 \text{ rad/s}
周期 $T = 2\pi / \omega_c = 3.57\times10^{-9}$ s(約3.6ナノ秒)
コードの出力:理論値とほぼ一致。軌跡の最大半径も約 $5.7\times10^{-4}$ m。
これが「磁場だけの円運動」の正体です。半径はわずか0.6mm、周期はナノ秒オーダー——電子の動きは想像以上に速く、小さいスケールで起こっています。
シミュレーターで遊ぶ(実験3選)
実験1:電子 vs 陽子 — 質量の違いを体感
設定:
- 磁場B:0.01 T(スライダー中央)
- 電場:すべて0
- 粒子タイプ:「電子」→「陽子」に切り替え
何が起きる?
陽子は電子の約1836倍重い。同じ磁場・同じ初速度でも、陽子の回転半径は電子の1836倍、周波数は1/1836に。つまり陽子はゆっくり大きな円を描く。シミュレーターで「回転半径」と「サイクロトロン周波数」の表示が切り替わるのを確認してください。
実験2:E×Bドリフト — サイクロイド軌道
設定:
- 粒子タイプ:電子
- 磁場B:0.01 T
- 電場Ex:2×10³ V/m(スライダー値20)
- 電場Ey, Ez:0
何が起きる?
電場がx方向にかかると、電子はx方向に加速されようとします。しかし磁場がそれを曲げるため、円運動しながら全体がy方向にドリフトします。これが「E×Bドリフト」。ドリフト速度は理論的に $v_d = E \times B / |B|^2$ で与えられ、この場合 $v_d = (2\times10^3) / (0.01) = 2\times10^5$ m/s でy方向に流れます。
実験3:螺旋運動 — 磁場に平行な速度成分
設定:
- 粒子タイプ:電子
- 磁場B:0.01 T(z方向)
- 初速度:vx = 1×10⁶, vz = 5×10⁵(カスタムで設定)
- 電場:0
何が起きる?
速度にz成分(磁場と平行)があると、xy平面では円運動しながらz方向に進む → 螺旋(らせん)軌道になります。これが実際のプラズマ閉じ込めで使われる「磁力線に巻き付く運動」の基本形です。
現場でハマるポイント
1. 数値積分の時間刻みに注意
ルンゲ=クッタ法でも、時間刻み $\Delta t$ が大きすぎると軌道が発散します。目安として、サイクロトロン周期 $T_c = 2\pi/\omega_c$ の1/100以下に設定しましょう。今回の例では $T_c \approx 3.6$ ns なので、$\Delta t = 1$ ps は適切。
2. 相対論効果は無視できない
今回のコードは非相対論(ニュートン力学)ベース。速度が光速($3\times10^8$ m/s)の10%を超えると誤差が顕著に。例えば $v=1\times10^7$ m/s で質量が約0.5%増加——高エネルギー物理では必須の補正です。
3. 「回転半径」の表示は理想条件
シミュレーターの表示値は「電場ゼロ・速度が磁場に垂直」という理想条件の理論値。電場が存在する場合や速度に平行成分がある場合は参考値として扱いましょう。実際の軌道半径は刻々と変化します。
4. 磁場は「仕事をしない」を忘れない
磁気力は常に速度に垂直なので、粒子の運動エネルギーは変化しません。速さが変わるように見えたら、それは電場の効果。この原則を忘れると、シミュレーション結果の解釈を誤ります。
まとめ
- ローレンツ力は「曲げる力」 — 磁場単独では仕事をせず、電場が加速を担当する
- 数値計算で現実を再現 — ルンゲ=クッタ法を使えば、理論式から実用的な軌道が計算できる
- シミュレーターで直感を鍛える — パラメータを動かしながら「なぜそうなるか」を考えよう
荷電粒子の運動は、一見複雑に見えて、実はたった1本の運動方程式からすべてが決まります。その方程式をコードに落とし、可視化することで、「見えない力」の振る舞いが手に取るようにわかる——これがシミュレーションの醍醐味です。
ぜひ実際のシミュレーターで、電子と陽子の軌道の違い、E×Bドリフト、螺旋運動を自分の目で確かめてみてください。
▶ ローレンツ力・荷電粒子運動シミュレーター — ブラウザで即動作、登録不要
NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら
「磁場は仕事をしない」——この言葉の本当の意味が、今日からあなたの中で血肉になりますように。