You are on page 1of 7

二、正文

(一) 電磁波概論

1. 馬克士威方程組(Maxwell's equations):為一組方程式是一組描述電場、磁場
與電荷密度、電流密度之間關係的偏微分方程式

(圖一:馬克斯威爾四大方程式,資料來源:
https://zh.wikipedia.org/wiki/%E9%A6%AC%E5%85%8B%E5%A3%AB
%E5%A8%81%E6%96%B9%E7%A8%8B%E7%B5%84)

2. 電磁波: 電磁波是指同相振盪且互相垂直的電場與磁場,在空間中以波的形式
傳遞能量和動量,其傳播方向垂直於電場與磁場的振盪方向。可以由馬克斯
威爾方程組推導出不同情況下得電磁波

(圖二:電磁波,資料來源:
https://zh.wikipedia.org/wiki/%E7%94%B5%E7%A3%81%E6%B3%A2#/media/File:O
nde_electromagn%C3%A9tique.png)
(二) 有限時域差分法(Finite-Difference Time-Domain, FDTD):一種是計算電磁場的常用方
法。將空間與時間分成多個格點,並由已知格點推演出下一格點,最後得出整個場
的分布情形

(三) 以 FDTD 方法並撰寫程式以模擬電磁波傳播

1. 一維電磁波的模擬

(1) 理論推導

由馬克斯威方程組可得在自由空間中,電磁波方程組為:
−d φ B −∂ φB  ∂ E −∂ B
∮ E ∙ dl= dt
=
∂t ∂X
=
∂t
−d φE −∂ φ E  ∂ B −∂ E
∮ B ∙ dl= dt
=
∂t ∂X
=
∂t
將第一式對 x 偏微分,第二式對 t 偏微分,並將兩式合併可得:
∂ 2 E −∂2 E
=
∂ X2 ∂ t2
此式即為電磁波方程式,之後,我們將上式改寫為下列兩式,以利於程式的
撰寫。
En+0.5
x ( k )−En−0.5
x ( k ) 1 Bny ( k + 0.5 )−Bny ( k−0.5 )
=
Δt −ε 0 Δx
B n+1 n n+0.5 n+0.5
y ( k +0.5 ) −B y ( k + 0.5 ) 1 E x ( k +1 )−E x ( k )
=
Δt μ0 Δx

(圖三:FDTD 基本概念,資料來源:Electromagnetic Simulation Simulation Using The FDTD


Method)

有了上列兩式後,我們以 python 撰寫一為電磁波模擬的程式碼:


(2)
import numpy as np
import matplotlib.pyplot as plt
KE = 200
ex = np.zeros(KE)
hy = np.zeros(KE)
t0 = 40
T=0
kc = KE / 2
spread = 12
k=0
for T in range(200):
print(T)
for k in range(KE):
ex[k] = ex[k] + 0.5 * (hy[k - 1] - hy[k])
pulse = np.exp(-0.5 * ((t0 - T) / spread) ** 2)
ex[int(kc)] = pulse
print(str(t0 - T) + str(ex[int(kc)]))
for k in range(KE - 1):
hy[k] = hy[k] + 0.5 * (ex[k] - ex[k + 1])
plt.plot(ex)
plt.pause(0.0003)
plt.cla()
for k in range(KE): print(k, ex[k], hy[k])

由上列程式碼我們可以得到下列結果

(圖四:模擬結果,資料來源:自己)
(圖五(左)、圖六(右):模擬結果(因結果為動畫,故只挑選兩張貼上,資料來源:自己)

2. 二維電磁波模擬
(1) 理論推導
由馬克斯威爾方程組,我們可以進而推導出下列三式:
Dn+0.5
x ( i, j )−Dn−0.5
x ( i, j ) 1
= ¿]
Δt √ ε0 μ 0
H n+0.5
x ( i, j+ 0.5 )−H n−0.5
x ( i, j+ 0.5 ) −1 Enz +0.5 (i , j+1 )−E n+0.5 z ( i, j )
=
Δt √ ε 0 μ0 Δx
H n+0.5 ( i+ 0.5 , j )−H n−0.5 n +0.5 n+0.5
y y ( i+ 0.5 , j ) 1 E z (i +1 , j )−E z ( i, j )
=
Δt √ ε 0 μ0 Δx
(圖七:二維 FDTD 概念,資料來源:Electromagnetic Simulation Simulation Using
The FDTD Method)

(2) 程式
import numpy as np
import matplotlib.pyplot as plt

iE =60
jE=60
GB=[[0]*60 for iE in range(60)]
dz=[[0]*60 for iE in range(60)]
ez=[[0]*60 for iE in range(60)]
hx=[[0]*60 for iE in range(60)]
hy=[[0]*60 for iE in range(60)]
ic =int(iE/2)
jc = int(jE/2)
spread = 12
k=0
for j in range(jE):
for i in range(iE):
dz[i][j]=0
ez[i][j]=0
hx[i][j]=0
hy[i][j]=0
GB[i][j]=1.0
t0=20
T=0
pulse=0
for T in range(200):
T=T+1
for j in range(jE):
for i in range(iE):
dz[i][j]=dz[i][j]+0.5*(hy[i][j]-hy[i-1][j]-hx[i][j-1])
pulse=np.exp(0.5*(t0-T/spread)**2)
dz[ic][jc]=pulse
for j in range(jE-1):
for i in range(iE):
ez[i][j]=GB[i][j]*dz[i][j]
for j in range(jE-1):
for i in range(iE):
hx[i][j]=hx[i][j]+0.5*(ez[i][j]-ez[i][j+1])
for j in range(jE):
for i in range(iE-1):
hy[i][j]=hy[i][j]+0.5*(ez[i][j]-ez[i+1][j])
plt.imshow(ez,cmap="seismic")
plt.colorbar()
plt.show()
(圖八(左)、圖九(上):模擬結果資料來源:自己)

You might also like