我是靠谱客的博主 威武信封,最近开发中收集的这篇文章主要介绍Python光的干涉仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 双缝干涉原理
    • Python代码
    • 其他干涉模型

双缝干涉原理

干涉即两束光在叠加过程中出现的强度周期性变化情况,其最简单的案例即为杨氏双缝干涉。

在这里插入图片描述

如图所示,光从 S S S点发出,通过两个狭缝 S 1 , S 2 S_1,S_2 S1,S2,最终汇聚在右侧的干涉屏上,在不同位置处将会产生不同的相位差。

设狭缝到干涉屏的距离为 a a a,狭缝距离为 d d d,取狭缝所在直线为 x x x轴,垂直纸面为 y y y轴,则对于干涉屏上任意一点 P ( x , y ) P(x,y) P(x,y),产生的光程差为

Δ S = n ⋅ ( S 1 P − S 2 P ) = n ⋅ ( a 2 + y 2 + ( x + d 2 ) 2 − a 2 + y 2 + ( x − d 2 ) 2 ) = n ⋅ ( x + d 2 ) 2 − ( x − d 2 ) 2 a 2 + y 2 + ( x − d 2 ) 2 + a 2 + y 2 + ( x + d 2 ) 2 ≈ n x d a begin{aligned} Delta S=&ncdot (S_1P-S_2P)\ =&ncdot(sqrt{a^2+y^2+(x+frac{d}{2})^2}-sqrt{a^2+y^2+(x-frac{d}{2})^2})\ =&ncdot frac{(x+frac{d}{2})^2-(x-frac{d}{2})^2}{sqrt{a^2+y^2+(x-frac{d}{2})^2}+sqrt{a^2+y^2+(x+frac{d}{2})^2}}\ approx&frac{nxd}{a} end{aligned} ΔS===n(S1PS2P)n(a2+y2+(x+2d)2 a2+y2+(x2d)2 )na2+y2+(x2d)2 +a2+y2+(x+2d)2 (x+2d)2(x2d)2anxd

则相位差为

δ = 2 π n x d λ 0 a delta=frac{2pi nxd}{lambda_0 a} δ=λ0a2πnxd

两束光混合之后的强度公式为

I = E 2 = ( E 1 + E 2 ) 2 = E 1 2 + E 2 2 + 2 E 1 E 2 = I 1 + I 2 + 2 ⋅ E 10 e − i δ 1 ( E 20 e − i δ 2 ) ∗ = I 1 + I 2 + 2 I 1 I 2 e i ( δ 2 − δ 1 ) = I 1 + I 2 + 2 I 1 I 2 cos ⁡ δ begin{aligned} I=&mathbf{E^2}=(mathbf{E_1}+mathbf{E_2})^2\ =&mathbf{E_1}^2+mathbf{E_2}^2+2mathbf{E_1}mathbf{E_2}\ =&I_1+I_2+2cdot E_{10}e^{-idelta_1} (E_{20}e^{-idelta_2})^*\ =&I_1+I_2+2sqrt{I_1I_2}e^{i(delta_2-delta_1)}\ =&I_1+I_2+2sqrt{I_1I_2}cosdelta end{aligned} I=====E2=(E1+E2)2E12+E22+2E1E2I1+I2+2E10eiδ1(E20eiδ2)I1+I2+2I1I2 ei(δ2δ1)I1+I2+2I1I2 cosδ

Python代码

import numpy as np
import matplotlib.pyplot as plt
#两束光叠加
waveAdd = lambda I1,I2,theta : I1+I2+2*np.sqrt(I1*I2)*np.cos(theta)

#同一束光经过小孔之后的光程差,dSlit为小孔间距,dWave为波长
#point为衍射屏上某点,theta为衍射屏相对小孔所在直线倾角
def interSlit(dSlit,point=(1,1,1),n=1,dWave=1.06e-6):
    pVar = sum(np.array(point)**2) + 0.25*dSlit**2
    delt = 2*np.pi*n/dWave*(
        np.sqrt(pVar+point[0]*dSlit)-
        np.sqrt(pVar-point[0]*dSlit))
    return delt

#杨氏干涉,只考虑x方向
#dSlit:小孔间距;dScreen:衍射屏距离
#nGrid:网格个数;dGrid:网格间距
def interYang(dSlit=1e-3,dScreen=1,n=1,I1=1,I2=1,
              dWave=1.06e-6,nGrid=500,dGrid=1e-5):
    xAxis = np.arange(-nGrid,nGrid+1)*dGrid
    I = [waveAdd(I1,I2,interSlit(
            dSlit,(x,0,dScreen),n,dWave)) 
            for x in xAxis]
    plt.plot(xAxis,I)
    plt.show()

得到的干涉强度图为

在这里插入图片描述

其他干涉模型

双缝干涉是一个非常实用的模型,可以应用到许多光学装置中,例如Fresnel双面镜,Fresnel双棱镜,Lloyds镜,Billet剖开透镜等等。其中Frenel双面镜如图所示

在这里插入图片描述

光源入射到双面镜之后在镜后产生了两个像点 P , Q P,Q P,Q,二者相当于一对小孔,于是可以在右侧的干涉屏上产生干涉。

其仿真过程与杨氏干涉只差一个小孔的转换,图像亦如出一辙。

#alpha为双镜锐角,dSA为光源到劈点距离,dScreen为S像点连线到干涉屏距离
def lensFresnel(alpha=0.1,dSA=1e-3,dScreen=1,
                n=1,I1=1,I2=1,dWave=1.06e-6,
                nGrid=500,dGrid=1e-4):
    dSlit = 2*dSA*np.sin(alpha)
    interYang(dSlit,dScreen,n,I1,I2,dWave,nGrid,dGrid)

最后

以上就是威武信封为你收集整理的Python光的干涉仿真的全部内容,希望文章能够帮你解决Python光的干涉仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部