09.2 Lorentz 變換#
本節目標#
- 從狹義相對論的兩條公設(相對性原理與光速不變原理)出發,用 SymPy 求解線性變換,導出 Lorentz 變換。
- 認識 \(\gamma = 1/\sqrt{1-v^2/c^2}\) ,並快速推導時間收縮與長度收縮。
- 從 Minkowski 幾何看 Lorentz 變換:它是 \((ct, x)\) 平面上的雙曲旋轉,參數為快度(rapidity) \(\varphi\) 。
- 用 SymPy 驗證 Lorentz 變換保持間隔不變量 \(s^2\) 。
- 動手實驗:用快度加法證明速度合成 \(v = 0.5c + 0.5c \ne c\) 。
兩條公設#
- 相對性原理:在所有慣性參考系中物理定律形式相同。
- 光速不變原理:真空光速 \(c\) 與光源或觀察者的運動無關。
若參考系 \(S'\) 以速度 \(v\) 沿 \(x\) 方向相對 \(S\) 運動,最一般情形變換是線性的(空間時間均勻):
用 SymPy 解出變換係數#
兩個約束:光速不變 ⇒ 光錐 \(x = \pm ct\) 上的點變換後仍在光錐上;原點 \(x'=0\) 滿足 \(x = vt\) ⇒ \(D\,c + E\,v = 0\) 。
import sympy as sp
A, B, D, E, v, c, ct, x = sp.symbols('A B D E v c ct x', nonnegative=True)
# 未知:A, B, D, E。兩約束:
# (1) 光線 x = ct 經變換後仍滿足 x' = c t'
# ct' = A*ct + B*x = (A + B)*ct ;x' = D*ct + E*x = (D + E)*ct
# ⇒ D + E = A + B
# (2) x' 對 (x = v t) 點為零: 代入 x = v*ct/c ⇒ ct' 軸 → x' = D*(ct) + E*(v*ct/c) = 0
eq1 = sp.Eq(D + E, A + B)
eq2 = sp.Eq(D + E*v/c, 0)
# 再加「原點在 S' 看來以 -v 運動」的對稱性:B*(ct) + A*(-v*ct/c) = 0
eq3 = sp.Eq(B - A*v/c, 0)
sol = sp.solve([eq1, eq2, eq3], [B, D, E], dict=True)
print(sol)
SymPy 給出 \(B = -\gamma v/c,\ D = -\gamma v/c,\ E = \gamma\) (其中 \(A=\gamma\) 待定之參數)。剩下 \(\gamma\) 由間隔不變性決定:
最終 Lorentz 變換(沿 \(x\) 方向,速度 \(v\) ):
與 \(y'=y,\ z'=z\) 一起,即完整四維變換。
時間收縮與長度收縮(快速推導)#
時間膨脹(動鐘變慢):同一地點的兩事件在 \(S'\) 中 \(\Delta x'=0\) ,用逆變換可得
長度收縮(動尺變短):同一參考系中同時 \(\Delta t=0\) 量 rod 兩端,在 \(S\) 看
g = sp.symbols('gamma', positive=True)
v, c = sp.symbols('v c', positive=True)
g_expr = 1/sp.sqrt(1 - v**2/c**2)
print(sp.limit(g_expr, v, c, dir='+')) # +oo :速度趨近光速,因子發散
print(g_expr.subs(v, 0.6*c).evalf()) # 1.25
print(g_expr.subs(v, 0.8*c).evalf()) # 1.6667
Minkowski 觀點:雙曲旋轉與快度#
定義快度 \(\varphi\) :
則 Lorentz 變換可寫成矩陣:
這非常像歐氏旋轉矩陣 \(\begin{pmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{pmatrix}\) ,只是 \(\cos \to \cosh,\ \sin \to -\sinh\) ,三角函數被雙曲函數取代,因此叫「雙曲旋轉」。角度 \(\varphi\) 直接把速度「線性化」了:
快度的美妙之處:速度合成在快度之下就是加法!兩個速度 \(v_1 = c\tanh\varphi_1\) 與 \(v_2 = c\tanh\varphi_2\) 合成後的快度 \(\varphi = \varphi_1 + \varphi_2\) 。
SymPy 驗證:變換保 \(s^2\)#
import sympy as sp
v, c, ct, x, y, z = sp.symbols('v c ct x y z', positive=True)
beta, phi = sp.symbols('beta phi', positive=True)
# 定義 Minkowski 度量函數
def interval(vec):
eta = sp.diag(-1, 1, 1, 1)
return (vec.T * eta * vec)[0]
# Lorentz 變換矩陣(沿 x 方向,以 beta 表示)
g = 1/sp.sqrt(1 - beta**2)
L = sp.Matrix([
[g, -g*beta, 0, 0],
[-g*beta, g, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
])
X = sp.Matrix([ct, x, y, z])
Xp = L * X
s2_old = interval(X)
s2_new = interval(Xp)
diff = sp.simplify(sp.expand(s2_new - s2_old))
print(diff) # 0 :間隔不變!
輸出是 0,即 \(s'^2 = s^2\) 。這就是狹義相對論的核心不變量:所有慣性觀察者對兩事件間隔的測量一致——就像歐氏幾何中所有旋轉對應的「長度」一致一樣。
(驗證矩陣恆等式也有幫助: \(L^T \eta L = \eta\) 。)
eta = sp.diag(-1, 1, 1, 1)
print(sp.simplify((L.T * eta * L) - eta)) # 零矩陣 → Λ 是「Minkowski 正交」矩陣
動手實驗:快度加法與速度合成#
實驗: \(v_1 = 0.5c,\ v_2 = 0.5c\) ,合成速度是多少?
import sympy as sp
c = sp.symbols('c', positive=True)
def velocity_from_rapidity(phi):
return c * sp.tanh(phi)
def rapidity_from_velocity(v):
return sp.atanh(v/c)
# 兩段快度
phi1 = rapidity_from_velocity(0.5*c)
phi2 = rapidity_from_velocity(0.5*c)
phi_total = phi1 + phi2
v_total = velocity_from_rapidity(phi_total)
print(sp.simplify(v_total/c)) # 4/5 = 0.8,不是 1.0 !
結果: \(v = 0.8c\) ,不是 \(c\) ! 這就是狹義相對論速度合成公式
可用 SymPy 推導這個公式:
v1, v2 = sp.symbols('v1 v2', real=True)
v_sum = (v1 + v2)/(1 + v1*v2/c**2)
print(sp.simplify(sp.tanh(sp.atanh(v1/c) + sp.atanh(v2/c)) * c - v_sum))
# 0 :速度合成公式與雙曲加法等價!
畫出快度 \(\varphi\) 與速度 \(v\) 的關係圖,觀察 \(\varphi\to\infty\) 時 \(v\to c\) 但永不超過:
import numpy as np
import matplotlib.pyplot as plt
phi = np.linspace(0, 5, 200)
v = np.tanh(phi) # 以 c 為單位
plt.figure(figsize=(6, 4))
plt.plot(phi, v, lw=2)
plt.axhline(1, color='r', ls='--', label='$v=c$(漸近線)')
plt.xlabel('快度 $\\varphi$'); plt.ylabel('$v/c$')
plt.title('$v = c\\,\\tanh\\varphi$')
plt.legend(); plt.grid(alpha=0.3)
plt.show()
小結與練習#
本節重點
- 從兩公設推 Lorentz 變換,本質是把 \((ct,x)\) 平面視為 Minkowski 平面。
- \(\gamma = 1/\sqrt{1-v^2/c^2}\) ;時間膨脹 \(\Delta t = \gamma\Delta\tau\) ,長度收縮 \(L = L_0/\gamma\) 。
- Lorentz 變換 \(=\) 雙曲旋轉,角度為快度 \(\varphi\) ,速度 \(v = c\tanh\varphi\) 。
- 間隔 \(s^2\) 是所有慣性觀察者共享的不變量,SymPy 驗證 \(L^T\eta L = \eta\) 與 \(\Delta s^2 = 0\) 。
- 速度合成 \(=\) 快度相加,自動解決超光速問題。
練習
- 用 SymPy 求證 \(\gamma^2(1 - v^2/c^2) = 1\) ,並算出 \(v=0.9c\) 時的 \(\gamma\) 與 \(L/L_0\) 、 \(T/T_0\) 。
- 寫出四維 Lorentz 變換矩陣(含 \(y,z\) ),用 SymPy 驗證 \(L^T\eta L=\eta\) 。
- 一束光在 \(S\) 中沿 \(x\) 方向 \(v=c\) 行進。用 Lorentz 變換證明在任意參考系中仍以 \(c\) 行進。
- 反向變換:把 \(L\) 中 \(\beta \to -\beta\) 應該得 \(L^{-1}\) ,用 SymPy 乘一乘確認。
- 快度加法實驗延伸: \(v_1 = v_2 = 0.9c\) ,合成速度多少?是否仍 \(<c\) ?用 SymPy 數值驗證。