Matlab:实现非单色光双缝干涉仿真

本文基于光学原理,用Matlab实现非单色光双缝干涉现象仿真。


Project Code
  • 干涉原理:基于单色光的双缝干涉,将不同波段的光进行干涉后,光强进行叠加
  • 代码中采用11束单色光组成的非单色光束进行模拟。
% 作者:ZQJ
% 日期:2021.1.5 星期二
%***********************模拟非单色光双缝干涉现象**************************
clear,clc;
% 基本参数输入及处理*********************************
% 本例输入:Lambda = 500;  d = 2;  D = 1;  N_light = 11;
Lambda = input('输入其中一束光的波长(单位为nm):');
Lambda = Lambda * 1e-9;       %波长单位转为:m
d = input('输入两个缝的间距(单位为mm):');
d = d * 1e-3;                 %缝间隙单位转为:m
D = input('输入缝到屏的距离(单位为m):');
N_light = input('输入有几束单色光:');
I0 = 1;                       %假定波的光强统一

Xmax = 5*Lambda*D/d;          %Xmax取第五级亮纹位置(边界)--单位为:m
x = linspace(-Xmax,Xmax,101); %坐标取样101份
I = zeros(101,1);

for i=1:101
    r1 = sqrt((x(i)+d/2)^2+D^2);     %在x坐标轴上的情况
    r2 = sqrt((x(i)-d/2)^2+D^2);
    dL = linspace(-0.1,0.1,N_light); %11束单色光
    Lambda_s = Lambda*(1+dL);
    phi = 2*pi*(r2-r1)./Lambda_s;    %各单色光相位差
    I(i,:) = sum(4*I0*cos(phi/2).^2)/N_light;      %合成波光强
end

% 合成光强灰度分布图*************************
I_change = I./4 .*255;               %光强归一化 并转为255灰度值
subplot(2,1,1);
image(x,Xmax,I_change');             %设置x和y的像素,显示数值
colormap(gray(255));                 %妆点灰度色彩
xlabel('空间坐标x');
title('合成光强空间分布');

% 合成光强函数分布图*************************
subplot(2,1,2);
plot(x,I');
axis([-Xmax,Xmax,0,4]);
xlabel('空间坐标x'), ylabel('合成光强度');
title('合成光强空间分布函数');
仿真结果图:

在这里插入图片描述


专栏内容供作者本人或大家学习使用,多多指教 ~

单色光双缝干涉现象的计算机仿真可以通过光学模拟软件来实现。以下是一个基于MATLAB的简单实现: 1. 定义参数:定义光源的波长、双缝间距、缝宽、屏幕距离、屏幕尺寸等参数。 2. 生成光源:使用波动方程产生单色光源。 3. 计算传输函数:根据夫琅禾费衍射公式,计算出传输函数。 4. 计算干涉图案:将传输函数和光源进行卷积,得到干涉图案。 5. 显示结果:将干涉图案显示出来,即可观察到双缝干涉现象。 以下是一个简单的MATLAB代码: ```matlab % 定义参数 wavelength = 632.8e-9; % 波长 distance = 1; % 双缝距离屏幕的距离 slit_distance = 10e-6; % 双缝间距 slit_width = 5e-6; % 缝宽 screen_size = 0.1; % 屏幕尺寸 pixel_size = screen_size/1024; % 像素尺寸 % 生成光源 x = linspace(-slit_distance/2, slit_distance/2, 1024); E = ones(1024,1); source = E.*exp(1i*2*pi*x/wavelength); % 计算传输函数 k = 2*pi/wavelength; z = distance; x = linspace(-screen_size/2, screen_size/2, 1024); [X,Y] = meshgrid(x); r1 = sqrt((X-slit_distance/2).^2 + Y.^2 + z^2); r2 = sqrt((X+slit_distance/2).^2 + Y.^2 + z^2); h1 = exp(1i*k*r1)./r1; h2 = exp(1i*k*r2)./r2; h = abs(h1 + h2).^2; % 计算干涉图案 result = conv2(source, h, 'same'); % 显示结果 imagesc(abs(result).^2); axis image; colormap('gray'); ``` 运行代码后,会得到一个双缝干涉的图案。可以通过修改参数来观察不同条件下的干涉现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值