[Matplotlab] 以Waterfall Plot呈現FDTD模擬一維高斯波的傳遞

做FDTD的練習時,需用Waterfall Plot顯示Gaussian模擬結果。

Matplotlab的網站裡面有範例如下,
















但要套用到目前模擬的數值原先的程式碼要做調整。




1. 宣告需要的函式







2. 設定相關函數。
    imp0:free space的characteristic impedance
    tSIZE:設定800個時間單位
    SPACE:設定300個空間單位
    ez_value:一維空間和時間的電場強度矩陣
    ez和hy:分別是某個時間點的電場和磁場。

    for loop:
      這是FDTD運算的本體。
      在這用ez和hy做運算,算完後把數值存到ez_value中
      在loop最後一行輸入高斯波















3. 得到運算結果後,為了作圖漂亮,把時間軸最後一排的數值全部改成0




沒有將數值設定成0的結果
時間數值收成0


4. 在後面(第5步)的PolyCollection,要餵資料形式是[(x1,y1), (x2,y2), ........]
    而原本的資料是xs=[x1, x2, x3, .....]和 ys=[y1, y2, y3, .....] ,
    因此用zip這個語法把xs和ys的數值合起來
    (這裡xs是時間軸、ys是某個點在各時間對應的電場值ez)

    空間總共有300個單位,
    zs的設定是產生一個0到300的list,每個元素間隔20單位的。
    for loop會依據zs去取數值,
    這例子中總共會取15組數值,
    也就會畫出15條線  











5. 這裡幾乎都是照原始的程式碼複製貼上。
    唯獨在PolyCollection中的facecolors。
    這例子中不介意顏色,因此全部都設定成藍色cc('b'),
    而每條線都要設定一次,所以就把設定複製成zs的數量。
    (應該有更好的方法,但只是為了堪用,所以用這個暴力解)











6. 最後就是圖的基本設定,上下界、標題之類的。接著最後plt.show()產生圖形










這就是成圖了,是電場的傳遞。



















這個波包從0點開始出發。
在空間上最後一點,因為我們設定是磁場為0,
邊界條件(boundary condition)是完美磁導(Perfect Magnetic Conductor, PMC),
所以反射波的磁場方向相反,而電場方向不變。

然而當反射波回到起始點時,
起始點的電場為0,因為起始點的電場數值是設定為高斯波,
到此時已幾乎等於0了
因此這裡的邊界條件(boundary condition)是完美電導(Perfect Electric Conductor, PEC)
所以電場方向相反,而磁場方向不變。
從圖中可以看到,第二次反射的電場和入射相反

Code:







留言