「磁場の中に粒子を放つと、なぜ勝手にくるくる回りだすの?」
この疑問、物理を学んだ人なら一度は抱いたことがあるはずです。しかも、回るだけじゃない。電荷や質量、磁場の強さを変えると円の大きさが変わり、磁場と平行な速度成分があればらせん運動になり、電場を加えると中心ごと流れていく——。
今回は、ブラウザで動く無料シミュレーター「NovaSolver」の磁場中荷電粒子シミュレーターを題材に、ローレンツ力の本質から数式、実装、現実の応用まで一気に解説します。
▶ 今回のシミュレーター: 磁場中の荷電粒子シミュレーター (ブラウザで動作・登録不要)
導入——「力が仕事をしない」という驚き
力学の基本を思い出してください。物体に力を加え続ければ、その物体は加速します。ところが磁場が荷電粒子に及ぼすローレンツ力は、常に速度に対して垂直。つまり、仕事をまったくしないんです。
「え?力を加えているのにエネルギーが変わらないの?」
そうなんです。磁場は粒子の向きだけを変え、速さは変えない。これが円運動が生まれる根源的な理由。逆に言えば、粒子を加速したいなら磁場だけではダメで、電場が必要——この違いが、実は加速器やプラズマ閉じ込めの設計で極めて重要になります。
ざっくり本質——「横から押し続ける」イメージ
「磁場は粒子の横っ面を押し続ける。だからぐるぐる回る」
イメージしてみてください。あなたが自転車に乗ってまっすぐ進んでいるとします。誰かが常に進行方向と直角に、あなたの体を横から押し続けたらどうなるか?——そう、円を描いて回り始めますよね。速さは変わらず、進む方向だけが曲げられる。
ローレンツ力もまったく同じ。磁場 $B$ の中を速度 $v$ で動く電荷 $q$ には、両方に垂直な力 $F = qv \times B$ が働きます。「×」はベクトルの外積。つまり力の向きは、速度と磁場の両方に垂直。これが「横から押す」に対応します。
数式で理解する——サイクロトロン運動の核心
まず基本の式から。
ローレンツ力
\mathbf{F} = q\,\mathbf{v}\times\mathbf{B}
- $F$: 力 [N](ニュートン)
- $q$: 電荷 [C](クーロン)
- $v$: 速度 [m/s]
- $B$: 磁束密度 [T](テスラ)
この力が常に速度に垂直なので、運動エネルギー $ \frac{1}{2}mv^2 $ は変化しません。等速円運動の条件——向心力が一定で、速度に垂直——を満たすわけです。
サイクロトロン半径・周波数・周期
円運動の向心力 = ローレンツ力 と置くと:
\frac{mv^2}{r} = |q|vB
これを $r$ について解くと:
r = \frac{mv}{|q|B},\qquad f = \frac{|q|B}{2\pi m},\qquad T = \frac{2\pi m}{|q|B}
ここで超重要なポイント:周波数 $f$ は速度 $v$ に依存しません。つまり、速い粒子ほど大きな円を描くけど、一周するのにかかる時間は同じ。これがサイクロトロン加速器の原理そのものです。
E×B ドリフト
磁場に直交する電場 $E$ を加えると、円運動の中心(案内中心)が流れ出します。
v_d = \frac{E}{B}\quad(\text{向きは }\mathbf{E}\times\mathbf{B}\text{ 方向、電荷の符号によらない})
「電荷の符号によらない」——これがポイント。プラズマ中では電子もイオンも同じ方向にドリフトするので、電流が生まれない。この性質が核融合炉のプラズマ閉じ込めで使われます。
コードで実装する ★最重要★
さあ、ここからが本番。シミュレーターの中身を再現するコードを書きます。
ローレンツ力を数値積分するには、速度ベルレ法(または leapfrog法)が定番。今回はシンプルにオイラー法で実装します(精度は落ちるが、原理理解には十分)。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 物理パラメータ
q = 1.0e-19 # 電荷 [C](陽子相当)
m = 1.67e-27 # 質量 [kg]
B = np.array([0, 0, 1.0]) # 磁場 [T](z方向)
E = np.array([0, 0, 0]) # 電場 [V/m](今回は0)
# 初期条件
r = np.array([0.0, 0.0, 0.0]) # 初期位置 [m]
v = np.array([1.0e5, 0.0, 2.0e4]) # 初期速度 [m/s](z成分あり→らせん運動)
# シミュレーション設定
dt = 1.0e-10 # 時間刻み [s]
steps = 5000 # ステップ数
# 軌跡保存用
positions = np.zeros((steps, 3))
positions[0] = r
# メインループ:オイラー法でローレンツ力を計算
for i in range(1, steps):
# ローレンツ力 F = q(E + v×B)
# 外積 v×B を計算
cross_product = np.cross(v, B)
F = q * (E + cross_product)
# 加速度 a = F/m
a = F / m
# 速度更新(オイラー法)
v = v + a * dt
# 位置更新
r = r + v * dt
# 保存
positions[i] = r
# 3Dプロット
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot(positions[:, 0], positions[:, 1], positions[:, 2], 'b-', linewidth=1)
ax.set_xlabel('x [m]')
ax.set_ylabel('y [m]')
ax.set_zlabel('z [m]')
ax.set_title('荷電粒子のらせん運動(磁場中)')
plt.show()
# 理論値と比較
v_perp = np.sqrt(v[0]**2 + v[1]**2) # 磁場に垂直な速度成分
r_theory = m * v_perp / (abs(q) * np.linalg.norm(B))
f_theory = abs(q) * np.linalg.norm(B) / (2 * np.pi * m)
T_theory = 2 * np.pi * m / (abs(q) * np.linalg.norm(B))
print(f"理論サイクロトロン半径: {r_theory:.3e} [m]")
print(f"理論サイクロトロン周波数: {f_theory:.3e} [Hz]")
print(f"理論周期: {T_theory:.3e} [s]")
このコードのポイント:
-
np.cross(v, B)で外積計算。これがローレンツ力の核心 - 初期速度にz成分(磁場と平行)を入れると、らせん運動になる
- 理論値と比較できるように、最後にサイクロトロン半径・周波数を計算
実際に動かすと、z方向に進みながらxy平面でくるくる回る軌跡が描かれます。
数値例で確かめる
実際の値を入れて、理論値とシミュレーション結果を比較してみましょう。
条件:
- 粒子:陽子($q = 1.602 \times 10^{-19}$ C, $m = 1.673 \times 10^{-27}$ kg)
- 磁場:$B = 1.0$ T(z方向)
- 初期速度:$v = (1.0 \times 10^5, 0, 2.0 \times 10^4)$ m/s
理論計算:
まず磁場に垂直な速度成分:
v_{\perp} = \sqrt{(1.0\times10^5)^2 + 0^2} = 1.0\times10^5 \text{ m/s}
サイクロトロン半径:
r = \frac{mv_{\perp}}{|q|B} = \frac{1.673\times10^{-27} \times 1.0\times10^5}{1.602\times10^{-19} \times 1.0} = 1.044\times10^{-3} \text{ m} \approx 1.04 \text{ mm}
サイクロトロン周波数:
f = \frac{|q|B}{2\pi m} = \frac{1.602\times10^{-19} \times 1.0}{2\pi \times 1.673\times10^{-27}} = 1.524\times10^7 \text{ Hz} \approx 15.2 \text{ MHz}
周期:
T = \frac{1}{f} = 6.56\times10^{-8} \text{ s} \approx 65.6 \text{ ns}
コードを実行すると、プロットから読み取れる半径は約1.04 mm、周期は約65 nsで、理論値と一致します。数値積分が正しくローレンツ力を再現していることが確認できました。
シミュレーターで遊ぶ——3つの実験
実験1:電荷の符号を反転させる
NovaSolverのシミュレーターで、電荷 $q$ の値を正から負に変えてみましょう。すると回転の向きが逆になります。
なぜ?ローレンツ力 $F = qv \times B$ に $q$ が掛かっているから。$q$ が負なら力の向きが反転し、結果として円の回転方向が逆になるんです。
実験2:磁場を強くするとどうなる?
スライダーで $B$ を 0.5 T → 2.0 T に増やしてみてください。ライブ数値の $r$ が1/4に減少するはず。
理論通り:$r = mv/|q|B$ なので、$B$ が2倍になれば半径は1/2、4倍になれば1/4。逆に周波数 $f = |q|B/2\pi m$ は4倍に増加します。
実験3:「E×B ドリフト」プリセットを試す
プリセットを切り替えて、電場を加えた状態を観察。円運動の中心が一定方向に流れていく様子が見えます。
ドリフト速度は $v_d = E/B$。例えば $E = 1000$ V/m, $B = 1$ T なら、$v_d = 1000$ m/s。この値は電荷の符号によらないので、プラズマ中では電子とイオンが同じ方向に流れ、電流が発生しません。
現場でハマるポイント
1. 磁場は「仕事をしない」——加速には電場が必要
「磁場で粒子を加速できる」と誤解する人がいますが、できません。ローレンツ力は常に速度に垂直なので、エネルギーを増やせない。粒子を加速したいなら、電場(または電磁誘導)が必要。この違いを理解していないと、サイクロトロン加速器の設計で迷子になります。
2. 一様磁場の仮定は現実では稀
NovaSolverのシミュレーターは一様磁場を仮定しています。しかし現実の磁場(磁石の周り、トカマク型核融合炉など)は空間的に変化します。その場合、粒子の軌道はより複雑になり、断熱不変量(磁気モーメントなど)を使って解析する必要が出てきます。
3. 数値積分の誤差に注意
上のコードで使ったオイラー法は単純ですが、エネルギーが保存しないという欠点があります。実際のシミュレーションでは、エネルギー保存が保証されるシンプレクティック積分(速度ベルレ法など)を使うべき。特に長期間の軌道計算では誤差が累積し、粒子が勝手に加速されたり減速されたりします。
まとめ——3つの要点
-
ローレンツ力 $F = qv \times B$ は速度に垂直 → 等速円運動が生まれる
- 半径 $r = mv/|q|B$、周波数 $f = |q|B/2\pi m$(速度に依存しない!)
-
磁場と平行な速度成分があればらせん運動、電場を加えればE×Bドリフト
- ドリフト速度 $v_d = E/B$、電荷の符号によらない
-
磁場単独では粒子を加速できない——加速には電場が必要
- この原理が加速器やプラズマ閉じ込めの設計基盤
実際に手を動かして理解したい方は、ぜひNovaSolverのシミュレーターで遊んでみてください。スライダーを動かすたびに、数式が目の前で動き出します。
▶ 磁場中の荷電粒子シミュレーター — ブラウザで即動作、登録不要
NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら