Python光学仿真:深入解析光的干涉现象与模型实现
本文基于Python深入解析光的干涉原理,通过杨氏双缝干涉模型展示光波叠加产生的强度周期性变化。文章提供了完整的Python仿真代码,涵盖从基础双缝到Fresnel双面镜、双棱镜等复杂光学装置的干涉计算,帮助读者理解相位差、光程差及衍射强度分布的实际应用。
光的干涉
干涉是指两束或多束光波在空间叠加时,由于相位关系导致的强度出现周期性分布变化的现象。这一物理过程最经典的实验案例便是杨氏双缝干涉实验,它直观地展示了光的波动性。

如示意图所示,光源从点S发出,光线穿过两个狭窄的狭缝S1和S2。这两束光在传播过程中发生衍射,最终投射到右侧的干涉屏上。由于光程的不同,干涉屏上不同位置的光波会产生不同的相位差,从而形成明暗相间的干涉条纹。

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双棱镜、Lloyd镜以及Billet剖开透镜等。其中,Fresnel双面镜的结构示意图展示了其独特的光学路径设计。

当光源入射到双面镜后,镜面反射会在镜后形成两个虚像点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理解光的干涉的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













