ローレンツ力と荷電粒子の運動

電場と磁場の中を運動する荷電粒子にはローレンツ力が作用します。この力は電磁気学の最も基本的な法則の一つであり、加速器、プラズマ物理学、宇宙環境中の荷電粒子の振る舞いを理解する鍵です。

本記事の内容

  • ローレンツ力の定義
  • 一様磁場中のサイクロトロン運動
  • E×Bドリフト
  • ホール効果
  • Pythonでの3次元軌道可視化

前提知識

ローレンツ力

電場 $\bm{E}$ と磁場 $\bm{B}$ の中を速度 $\bm{v}$ で運動する電荷 $q$ の粒子に作用する力:

$$ \boxed{\bm{F} = q(\bm{E} + \bm{v} \times \bm{B})} $$

電場による力(クーロン力)は速度によらず $q\bm{E}$、磁場による力は速度に垂直で $q\bm{v} \times \bm{B}$ です。磁場の力は仕事をしません($\bm{F}_B \cdot \bm{v} = q(\bm{v}\times\bm{B})\cdot\bm{v} = 0$)。

一様磁場中の円運動(サイクロトロン運動)

$\bm{E} = 0$、$\bm{B} = B\hat{z}$($z$方向の一様磁場)で $\bm{v}$ が $xy$平面内にある場合を考えます。

運動方程式:

$$ m\frac{d\bm{v}}{dt} = q\bm{v} \times \bm{B} $$

磁場の力は常に速度に垂直なので、粒子は等速円運動をします。

サイクロトロン半径

遠心力と磁場の力の釣り合い $qvB = mv^2/r$ から:

$$ \boxed{r_c = \frac{mv}{qB}} $$

サイクロトロン周波数

$$ \boxed{\omega_c = \frac{qB}{m}} $$

周波数は速度に依存しないことが重要です(サイクロトロンの原理)。

E×Bドリフト

$\bm{E}$ と $\bm{B}$ が直交する場合、荷電粒子は両方に垂直な方向へドリフトします:

$$ \boxed{\bm{v}_D = \frac{\bm{E} \times \bm{B}}{B^2}} $$

ドリフト速度は電荷の符号に依存しません

Pythonでの可視化

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# サイクロトロン運動 + E×Bドリフトのシミュレーション
q = 1.6e-19   # 電子の電荷
m = 9.1e-31   # 電子の質量
B = np.array([0, 0, 1e-3])  # 磁場 [T]
E = np.array([0, 100, 0])    # 電場 [V/m]

dt = 1e-10; N = 5000
pos = np.zeros((N, 3)); vel = np.zeros((N, 3))
vel[0] = [1e5, 0, 3e4]  # 初速度

for i in range(N-1):
    F = q * (E + np.cross(vel[i], B))
    vel[i+1] = vel[i] + F / m * dt
    pos[i+1] = pos[i] + vel[i+1] * dt

fig = plt.figure(figsize=(16, 5))

# (1) 3D軌道
ax1 = fig.add_subplot(131, projection='3d')
ax1.plot(pos[:,0]*1e3, pos[:,1]*1e3, pos[:,2]*1e3, 'b-', lw=0.5)
ax1.set_xlabel('x [mm]'); ax1.set_ylabel('y [mm]'); ax1.set_zlabel('z [mm]')
ax1.set_title('3D trajectory')

# (2) xy平面への射影
ax2 = fig.add_subplot(132)
ax2.plot(pos[:,0]*1e3, pos[:,1]*1e3, 'b-', lw=0.5)
ax2.set_xlabel('x [mm]'); ax2.set_ylabel('y [mm]')
ax2.set_title('xy projection (E×B drift)'); ax2.set_aspect('equal')
ax2.grid(True, alpha=0.3)

# (3) サイクロトロン半径 vs 磁場
B_range = np.linspace(0.1e-3, 10e-3, 200)
v0 = 1e5
r_c = m * v0 / (q * B_range)
ax3 = fig.add_subplot(133)
ax3.plot(B_range*1e3, r_c*1e3, 'r-', lw=2.5)
ax3.set_xlabel('$B$ [mT]'); ax3.set_ylabel('$r_c$ [mm]')
ax3.set_title('Cyclotron radius vs B'); ax3.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

まとめ

  • ローレンツ力: $\bm{F} = q(\bm{E} + \bm{v}\times\bm{B})$
  • サイクロトロン半径: $r_c = mv/(qB)$
  • サイクロトロン周波数: $\omega_c = qB/m$(速度に依存しない)
  • E×Bドリフト: $\bm{v}_D = \bm{E}\times\bm{B}/B^2$(電荷に依存しない)

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