博客專欄

        EEPW首頁 > 博客 > 30行Python代碼模擬物理光學現象:雙縫干涉

        30行Python代碼模擬物理光學現象:雙縫干涉

        發布人:芯語芯事 時間:2022-07-22 來源:工程師 發布文章

        1 雙縫干涉概念

        單色光照射到具有兩條狹縫的擋板上,這狹縫相距很近,通常在微米量級。從兩條狹縫****出來的光波相位差恒定,頻率相同。兩束光在檔板后的空間相互疊加而發生干涉現象,在屏上產生了明暗相間的干涉條紋。當屏上的某點與兩縫的光程差是半波長的偶數倍時,形成亮條紋,是半個波長的奇數倍時,出現暗條紋。

        30行Python代碼模擬物理光學現象:雙縫干涉


        2 定態的干涉光波

        實驗室通常采用波長約為589nm的鈉黃光作為干涉光源,上圖中的a點就是光源所在處。鈉光燈可以看做是點光源,其****的光波為球面波。球面波在一個平面上的傳播方程可以簡單寫為:A=A0 * cos(w(t-r/v)+q) ,其中A為振幅,w為角頻率,r為某點離光源的距離,t為傳播時間,q為初始相位。為了方便計算空間各點的振幅,該公式可以用python定義為一個函數方便重復調用:

        def func_A(t,q,x,y,x0,y0):
        r = ((x - x0) ** 
        + (y - y0) ** 2) ** 0.5
        A=np.cos(w*(t-r/v)+q)
        return A

        當光波到達b,c兩條狹縫時,根據惠更斯原理,b,c兩點會成為新的“子波源”,因此,b,c兩個波源****的光波具有相同的頻率,恒定的相位差,成為相干光。假設兩波源的初始相位都為零,根據上述python語言的函數定義,b,c兩點的光波傳播函數分別為:

        b_A = func_A(t,0,x, y, 0, 2)c_A = func_A(t,0, x, y, 0, -2)

        根據光強的計算公式,可以得到光強是正比于振幅A的平方。干涉場空間各點的振幅為兩振幅的疊加,也就是b_A+c_A,所以空間的各點光強定義為函數:

        def f(t,x, y):
        
            A1 = func_A(t, 0,x, y, 0, 2)
        
            A2 = func_A(t,0, x, y, 0, -2)
        
            return ((A1+A2)**2)

        在某時刻干涉光場的解為f(0,x, y),采用matplotlib繪圖庫將干涉場各點的光強顯示出來。執行ax.imshow(f(0,x, y)),就可以看到等間距的明暗光波疊加的效果。

        30行Python代碼模擬物理光學現象:雙縫干涉


        3 動態的光波效果

        計算多個時刻的定態光波干涉場,然后將這些圖像制作為視頻或動畫就可以看到動態光波的效果,下圖就是干涉光波傳播的效果動畫。

        30行Python代碼模擬物理光學現象:雙縫干涉


        4 在現實中人眼看見的效果

        我們上面介紹了光波的定態和動態效果圖,但并不代表人眼所看到的就是明暗相間的散點。我們人眼所看到的效果是長時間光照射的疊加效果,比如,我們在看電風扇轉動時,你只能看見一個圓盤,而不會看到三個葉片。再比如,顯示屏是逐行掃描的,而我們看到的卻是一幅圖像。這一切都是由于視覺暫留效應,我們人眼并不能分辨出很短時間內的圖像變化。干涉場也是這樣,光波都是在飛秒時間內變化,我們無法分辨短時間光明暗的變化。在干涉場內,如果一個地方時亮時暗,我們看起來就是亮;如果一個地方一直暗看起來才會是暗。用Python模擬這種效果,就是簡單將各個時刻的光波場疊加,就可以看到明暗相間的條紋。

        z=f(0,x, y)for i in range(1,10):
        
            z=f(i*0.3,x, y)+z
        30行Python代碼模擬物理光學現象:雙縫干涉


        關于雙縫干涉的python模擬先介紹到這里,最后附上源碼:

        import numpy as npimport matplotlib.pyplot as pltimport randomv=3*(10**8)*(10**6)*(10**(-15)) L=0.589w=2*np.pi*v/Ldef func_A(t,q,x,y,x0,y0):
        
            r = ((x - x0) ** 2 + (y - y0) ** 2) ** 0.5
        
            A=np.cos(w*(t-r/v)+q)
        
            return Afig, ax = plt.subplots()ax.set_xticks([])ax.set_yticks([])def f(t,x, y):
        
            A1 = func_A(t, 0,x, y, 0, 2)
        
            A2 = func_A(t,0, x, y, 0, -2)
        
            return ((A1+A2)**2)x = np.linspace(0, 8, 1000)y = np.linspace(-5, 5, 1000).reshape(-1, 1)ax.imshow(f(0,x, y))plt.show()


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 干涉 光波

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 自治县| 商水县| 防城港市| 临漳县| 龙泉市| 潼南县| 额济纳旗| 柞水县| 洮南市| 定结县| 吴忠市| 温州市| 韶关市| 隆化县| 繁昌县| 安义县| 自治县| 凭祥市| 黄平县| 隆安县| 大英县| 钟祥市| 湘乡市| 泗水县| 山东省| 佛教| 板桥市| 普格县| 阿鲁科尔沁旗| 昌乐县| 交城县| 醴陵市| 永年县| 永城市| 游戏| 辽宁省| 象山县| 新津县| 留坝县| 旬阳县| 盐池县|