電場と磁場の中を運動する荷電粒子にはローレンツ力が作用します。この力は電磁気学の最も基本的な法則の一つであり、加速器、プラズマ物理学、宇宙環境中の荷電粒子の振る舞いを理解する鍵です。
本記事の内容
- ローレンツ力の定義
- 一様磁場中のサイクロトロン運動
- 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$(電荷に依存しない)
次のステップとして、以下の記事も参考にしてください。