MATLAB:牛顿环干涉实验(Newton’s Ring)

文章介绍了牛顿环的光学原理,这是一个由艾萨克·牛顿在1665年提出的薄膜干涉现象。接着,文章提供了使用MATLAB进行代码实现的详细步骤,通过定义透镜半径和光波长来生成牛顿环的干涉图样,并展示了相应的干涉光强分布图。
摘要由CSDN通过智能技术生成

目录

1.概念

2.MATLAB代码实现


1.概念

提出时间:1665年

提出者:艾萨克·牛顿

牛顿环,又称“牛顿圈”。在光学上,牛顿环是一个薄膜干涉现象。光的一种干涉图样,是一些明暗相间的同心圆环。例如用一个曲率半径很大的凸透镜的凸面和一平面玻璃接触,在日光下或用白光照射时,可以看到接触点为一暗点,其周围为一些明暗相间的彩色圆环;而用单色光照射时,则表现为一些明暗相间的单色圆圈。这些圆圈的距离不等,随离中心点的距离的增加而逐渐变窄。它们是由球面上和平面上反射的光线相互干涉而形成的干涉条纹。

在牛顿环的示意图上,下部为平面玻璃(平晶),A为平凸透镜,其曲率中心为O,在二者中部接触点的四周则是平面玻璃与凸透镜所夹的空气气隙。当平行单色光垂直入射于凸透镜的平表面时。在空气气隙的上下两表面所引起的反射光线形成相干光。光线在气隙上下表面反射(一是在光疏媒质面上反射,一是在光密媒质面上反射)。

平凸透镜和平面透镜之间的空间薄膜的距离为e,平凸透镜曲率半径为R。

牛顿环

2.MATLAB代码实现

首先,定义待测透镜半径R=1e1,检测光波长Lambda=0.55*1e-6,单位mm。代码如下:

clc;
clear;
close all;
R=1e1;  %待测透镜半径
Lambda=0.55*1e-6;   %检测光波长
x=linspace(-0.01,0.01,1001);
y=x;
[X,Y]=meshgrid(x);
r=sqrt(X.^2+Y.^2);
I=cos(pi*(r.^2/R+Lambda/2)/Lambda).^2;
NCLevels = 255; %指定调色板
colormap(gray(NCLevels));
Ir=I*NCLevels;
image(x,y,Ir);
title('牛顿环(单位:m)');
axis square;
figure
plot(r(501,:),I(501,:),'k')
title('干涉光强分布图');
xlabel('r/m(环半径)');
ylabel('相对光强');

运行结果:

牛顿环干涉条纹图
牛顿环干涉光强分布图

代码下载地址:牛顿环实验干涉条纹MATLAB代码(Newton's Ring MATLAB Code)

本文未经允许,不得转载。

关注CSDN“光学码农”!

牛顿是一种经典的干涉现象,可以通过 MATLAB 编程来进行仿真。下面是一个简单的 MATLAB GUI 界面,用于模拟牛顿。 首先,我们需要创建一个 GUI 窗口,包含一个 Axes 对象和一些控件,如下所示: ```matlab function newtonring_gui % Create a new figure window fig = figure('Name','Newton Ring Simulation',... 'NumberTitle','off',... 'Position',[200 200 800 600]); % Create an axes object for the simulation plot ax = axes('Units','pixels','Position',[50 100 700 400],... 'XLim',[-50 50],'YLim',[-50 50],'Box','on'); % Add some controls to the GUI uicontrol('Style','pushbutton',... 'String','Start',... 'Position',[100 30 80 30],... 'Callback',@start_callback); uicontrol('Style','pushbutton',... 'String','Stop',... 'Position',[200 30 80 30],... 'Callback',@stop_callback); uicontrol('Style','slider',... 'Min',0,'Max',1,'Value',0.5,... 'Position',[500 30 150 20],... 'Callback',@slider_callback); uicontrol('Style','text',... 'String','Radius (mm):',... 'Position',[400 30 100 20]); % Define some variables for the simulation global r R d lambda n; r = 0.01; % Radius of curvature of the lens (m) R = 0.5; % Radius of the ring (m) d = 0.0005; % Distance between the lens and the glass plate (m) lambda = 600e-9; % Wavelength of light (m) n = 1.5; % Refractive index of the glass plate % Define a function to draw the simulation plot function draw_plot delete(get(ax,'Children')); x = -50:0.1:50; y = -50:0.1:50; [X,Y] = meshgrid(x,y); Z = intensity(X,Y); surf(ax,X,Y,Z); shading(ax,'interp'); colormap(ax,jet); xlabel(ax,'x (mm)'); ylabel(ax,'y (mm)'); zlabel(ax,'Intensity'); end % Define a function to calculate the intensity of the interference pattern function I = intensity(x,y) r2 = x.^2 + y.^2; phi = atan2(y,x); m = 2*r*sqrt(r2-R^2*cos(phi).^2) + d; delta = 2*pi*n*m/lambda; I = (1+cos(delta))/2; end % Define a function to start the simulation function start_callback(hObject,eventdata) draw_plot; end % Define a function to stop the simulation function stop_callback(hObject,eventdata) delete(get(ax,'Children')); end % Define a function to update the simulation parameters function slider_callback(hObject,eventdata) R = get(hObject,'Value'); draw_plot; end end ``` 在这个 GUI 中,我们提供了一个“开始”按钮、一个“停止”按钮和一个半径滑块,用于调整牛顿的半径。当用户点击“开始”按钮时,我们将调用 `draw_plot` 函数来绘制牛顿干涉图案。当用户点击“停止”按钮时,我们将删除绘图并停止仿真。 `intensity` 函数计算干涉图案的强度,它使用以下方程式: $$I(x,y) = \frac{1 + \cos(\delta)}{2}$$ 其中 $\delta$ 是光程差: $$\delta = 2\pi n m/\lambda$$ 其中 $n$ 是玻璃板的折射率,$m$ 是光路差: $$m = 2r\sqrt{r^2 - R^2\cos^2\phi} + d$$ 其中 $r$ 是透镜的曲率半径,$R$ 是牛顿的半径,$d$ 是透镜和玻璃板之间的距离,$\phi$ 是光路在 $x-y$ 平面上的入射角。 最后,我们需要调用 `newtonring_gui` 函数来启动 GUI 界面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

光学码农

你的鼓励将是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值