matlab绘制双缝、等厚劈尖干涉、牛顿环、迈克尔逊等倾干涉图样

理论知识可以参考这一篇文章:
https://blog.csdn.net/Carifee/article/details/120041079?spm=1001.2014.3001.5501

1.matlab绘制双缝干涉图样

方法1:

clc
close all
clear all
%% %%代码分块运行
lambda = 500e-9;    %%波长500nm
d = 2e-3;   %%双缝间距2mm
D=1;    %%双缝距离观察屏之间的距离1m
ym=5*lambda*D/d;    %%表示最宽的位置为5个亮纹处
xs=ym;
n=101;
ys=linspace(-ym,ym,n);  %%屏面线性间距向量
for i=1:n
    r1=sqrt((ys(i)-d/2).^2+D^2);    %%光程1
    r2=sqrt((ys(i)+d/2).^2+D^2);    %%光程2
    phi=2*pi*(r2-r1)./lambda;   %%相位差
    B(i,:)=4*cos(phi/2).^2;    %%计算光强,假设初始光强为1,不必加sum
end
N=255;
Br=B*55;    %%将光强乘以一个值,以增强图像的区分度,这个值不能太大亦不能太小,可以试一试

subplot(1,2,1);  %%一行两列中的第一幅图
image(xs,ys,Br);    %%从数组显示图像
colormap(gray(N));  %%使图像以灰度图像显示

subplot(1,2,2);  %%一行两列中的第二幅图
plot(B,ys);
title('双缝干涉图样')

结果:
在这里插入图片描述
方法2:
双缝干涉的动态图样:

clear
avi_object = VideoWriter('interference');
avi_object.FrameRate = 20;
open(avi_object);
for t = 0:0.01:1
%生成干涉后的光强分布值Z
x = linspace(-3*pi,5*pi,400);
y = linspace(-4*pi,4*pi,400);
[X,Y] = meshgrid(x,y);
a=1;%波长
Z = zeros(400);
for j = 1:150
    for i = 1:400
        Z(i,j) = cos(-2*pi*t+2*pi*sqrt((X(i,j)+pi)^2+Y(i,j)^2)/a)^2;
    end
end
for j = 151:400
    for i = 1:400
        Z(i,j) = (cos(-2*pi*t+2*pi*sqrt(X(i,j)^2+(Y(i,j)-pi)^2)/a)+cos(-2*pi*t+2*pi*sqrt(X(i,j)^2+(Y(i,j)+pi)^2)/a))^2;
    end
end
pcolor(X,Y,Z);
shading interp;%颜色渐变效果
%colorbar;
colormap(hot);%doc colormap可以改色卡
%画挡板
A = [0 0];
B1 = [0 pi-0.1];
B2 = [pi+0.1 4*pi];
B3 = [0 -pi+0.1];
B4 = [-pi-0.1 -4*pi];
line(A,B1,'Color','k','LineWidth',5);
line(A,B2,'Color','k','LineWidth',5);
line(A,B3,'Color','k','LineWidth',5);
line(A,B4,'Color','k','LineWidth',5);
M = getframe;
%M.cdata = imresize(M.cdata,[1026 1302]);
writeVideo(avi_object,M);
end
close(avi_object);

结果:
在这里插入图片描述

2.matlab绘制等厚劈尖干涉图样

置一楔角θ微小的劈尖水平放置于空气中,令单色光沿垂直方向照射劈尖,形成干涉条纹。光程差δ=2nh+λ/2,n>1为劈尖介质折射率设为常量,劈尖厚度h=xtanθ为一变量,λ为入射光波长,λ/2是因为半波损失——劈尖周围的空气介质折射率小于劈尖。 相位差φ=2π·δ/λ,光强分布I=4cos²(φ/2) 。

clear;
lambda=632.8e-9;     %入射光波长
theta=0.1;       %劈尖楔角
n=1.33;         %介质折射率
N=900;      %N表示均匀取样个数,可以改变
x=linspace(0,600,N);        %x为劈尖长度,单位mm
y=linspace(0,300,N/2);      %y为劈尖宽度,单位mm
h=x*tan(theta);
Phi=2*n*h./lambda;
I=4*cos(Phi/2).^2;
graylevel=255;
Ir=(I/4)*graylevel;
subplot(2,1,1),image(x,y,Ir);
colormap(gray(graylevel)),
xlabel('劈尖长度/mm'),ylabel('劈尖宽度/mm'),title('条纹图')
subplot(2,1,2),plot(x,I),title('劈尖长度方向的光强分布') 

结果:
在这里插入图片描述

3.matlab绘制牛顿环干涉图样

方法1:

clear all
lambda=600e-9;      %入射光波长
R=10;       %牛顿环曲率
rm=1e-2;        %干涉条纹区域
x=0:0.0001:rm;
y=rm:-0.0001:0;
[X,Y]=meshgrid(x,y);
r2=x.^2+Y.^2;
phi=2*pi*(r2/R+lambda/2)/lambda;        %相位差
I=4*cos(phi./2).^2;         %第一象限干涉光强
N=255;          %灰度等级
Ir2=(I/4.0)*N;          %最大光强为最大灰度
Ir1=fliplr(Ir2);        %矩阵对称操作
Ir3=flipud(Ir1);
Ir4=flipud(Ir2);
Ir=[Ir1 Ir2;Ir3 Ir4];       %构造图像矩阵

figure
image(Ir,'Xdata',[-0.02,0.02],'YData',[0.02,-0.02]);        %画干涉条纹
colormap(gray(N));
axis square
title('牛顿环干涉图样')

结果:
如果相位差越大那么干涉条纹越密且中央干涉点越亮。
**结果:**
方法2:

clear,clc,close all;
Lambda = 632.8 * 1e-9;                 %波长单位转为:m
R = 900 * 1e-3;                           %透镜的曲率半径单位转为:m
I0 = 1;                                 %入射光的光强
Screen_length = sqrt(10*R*Lambda);      %定义干涉仿真范围
[Screen_x,Screen_y] = meshgrid(linspace(-Screen_length,Screen_length,800));
Newton_r = abs(Screen_x + 1i*Screen_y);
I_delta = (Newton_r.^2)*pi/R/Lambda;
I = 2*I0*(sin(I_delta)).^2;
I = I./max(max(I));                      %光强分布归一化
I = I*64;                                %光强归一,扩大显示
image(Screen_x(1,:),Screen_y(:,1),I);    %设置x和y的像素,显示数值
colormap hot;                            %妆点色彩
colorbar;
xlabel('x'),ylabel('y');
title('牛顿环');  

结果:
在这里插入图片描述

4.matlab绘制迈克尔逊干涉仪干涉图样

程序:

clear all;
xmax=10;ymax=10;        %设定屏幕范围
lambda=632.8e-6;f=200;      %设定入射光波长
n=1.0;
N=150;
x=linspace(-xmax,xmax,N);
y=linspace(-ymax,ymax,N);

for k=0:15
    d=0.39-0.00005*k;       %M1和M2'空气膜厚度
    for i=1:N
        for j=1:N
            r(i,j)=sqrt(x(i)*x(i)+y(j)*y(j));
            B(i,j)=cos(pi*(2*n*d*cos(asin(n*sin(atan(r(i,j)/f)))))/lambda).^2; %干涉条纹
        end
    end
    figure(gcf);
    NClevels=255;       %设定灰度
    Br=2.5*B*NClevels;
    image(x,y,Br);      %画干涉图像
    colormap(gray(NClevels));
    set(gca,'Xtick',[]);
    set(gca,'Ytick',[]);
    drawnow
    pause
end

结果:
在这里插入图片描述

  • 40
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carifee.

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值