Professional Documents
Culture Documents
(一) 電磁波概論
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):一種是計算電磁場的常用方
法。將空間與時間分成多個格點,並由已知格點推演出下一格點,最後得出整個場
的分布情形
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
由上列程式碼我們可以得到下列結果
(圖四:模擬結果,資料來源:自己)
(圖五(左)、圖六(右):模擬結果(因結果為動畫,故只挑選兩張貼上,資料來源:自己)
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()
(圖八(左)、圖九(上):模擬結果資料來源:自己)