從物理學的機制出發,波動模型相對於光線模型,顯然更加接近光的本質;但是從物理學的發展來說,波動光學旨在解決幾何光學無法解決的問題,可謂光線模型的一種升級。從編程的角度來說,波動光學在某些情況下可以簡單地理解爲在光線模型的基礎上,引入一個相位項。
波動模型
一般來說,三個特徵可以確定空間中的波場:頻率、振幅和相位,故光波場可表示爲:
E=Acos(ωt−kr)
其中,A爲振幅,ω=2πf=T2π爲角頻率,k=λ2π,爲波數。由上式可知,當時間固定時,光在傳播方向上有一個正弦波的外形;而對於空間中任意一點,沿着振幅方向則進行簡諧運動。
其中,振幅、波數以及空間位置均爲矢量,當座標比較混亂的時候,也可以寫成E=Acos(ωt−kr);有時爲了計算方便,也可以寫成指數形式
E=Ae−i(ωt−kr)
對於平面波來說,其發散角爲0,即光場中的所有點,都具有統一的傳播方向,且振幅相等。設其傳播方向爲z,則可寫爲
E=Acos(ωt−kz)
球面波則相對複雜,令r爲空間中任意一點到點光源的距離,則對於a、b兩點來說,其單位面積的光通量之比爲IbIa=ra2rb2,則振幅之比爲EaEb=rbra。這說明球面波振幅反比于波陣面到光源距離,即
E=rAe−i(ωt−kr)
通過截取xOz平面,假設光波長爲532nm,則可以畫出這一截面處的光波振幅圖。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
z = np.arange(15,200)*10
x = np.arange(15,200)*10
x,z = np.meshgrid(x,z)
E = 1/np.sqrt(x**2+z**2)*np.cos(2*np.pi*np.sqrt(x**2+z**2)/(532*1e-9))
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x,z,E)
plt.show()
其結果如圖所示
相速度
經典的光波公式E=Acos(ωt−kr)表示一個在空間中沿着一個方向傳播的簡諧波。如果現有多個頻率相同的光波共同傳播,那麼由於不同光波之間可能存在相位差,雖然在任意一點上仍舊有着簡諧運動的形式,但在任意時刻,其波峯波谷的位置顯然不同。故可以寫爲
E=A(r)cos(ωt−g(r))
指數形式爲
E=A(r)eig(r)e−iωt
其中,g(r)爲常數,被稱爲等相位面,等相面並不重合的光波叫做非均勻波,即非均勻波可能在空間上不具備可計算的週期性。除非ωt−g(r)的全微分爲0,即ωdt−gradgdr=0。
→dtdr=gradgω
當r的方向垂直於等相面時,上式數值最小,爲
vp(r)=∣gradg∣ω
該式表示各等相位面前進的速度,爲相速度。
羣速度
對於平面波來說,g(r)=k⋅r−δ,則
vp=kω=εμc
當光波是由一羣頻率不同的光的疊加時,相速度便難以衡量光束的傳播特性,也幾乎是不可測的。而真實的光波往往是不同頻率單色波的疊加
E(r,t)=∫0∞Aω(r)[ωt−gω(r)]
對於兩個平面單色波來說,如果二者頻率和相位都比較相近,振幅相同,且都沿着z軸傳播,則對振幅進行歸一化,上式可以簡化爲
aE(z,t)=→=→其中cos(ωt−kz)+cos[(ω+δω)t−(k+δk)z]e−i(ωt−kz)+e−i[(ω+δω)t−(k+δk)z]2cos[21(tδω−zδk)]e−i(ωˉt−kˉz)2cos[21(tδω−zδk)]cos(ωˉt−kˉz)ωˉ=ω+21δω,kˉ=k+21δk
假設兩列波的波長分別爲532nm和600nm,則在同一時刻,不同位置處的光波振幅可通過python畫出
def wavePacket(d = [532e-9,600e-9]):
d = np.array(d)
k = 2*np.pi/d
dk = k[0]-k[1]
bk = k[1]+dk/2
z = np.arange(10000)/1e9
E0 = np.cos(-k[0]*z)
E1 = np.cos(-k[1]*z)
E = E0+E1
fig = plt.figure()
plt.plot(z,E0,'--',color='red',label='E0')
plt.plot(z,E1,'--',color='blue',label='E1')
plt.plot(z,E,'-',color='green',label='E')
plt.legend()
plt.show()
可見每間隔一段距離或者時間就會出現一個比較大的振幅,其極大間隔可以通過表達式求出
δt=ωˉ2πδz=kˉ2π
則定義
vg=δtδz=kˉωˉ
爲羣速度,表示波包的傳播速度。