光学干涉实验模拟

1556 篇文章 1491 订阅

   光的干涉实验仿真模拟首先是依据光干涉的光强分布的理论公式及实验参数建立光强数据矩阵,然后运用Matlab的Image命令绘制干涉图像,运用Plot命令绘制光强分布曲线.本虚拟实验室主要模拟杨氏双缝干涉,牛顿环和迈克尔逊干涉仪的等倾干涉.

用Matlab计算杨氏双缝干涉光强为(完整程序见附件一):

L1=sqrt((xs(i)-d/2).^2+z.^2);

    L2=sqrt((xs(i)+d/2).^2+z.^2);

    Phi=2*pi*(L2-L1)/Lambda;       %相位差

I(i)=sum(4*cos(Phi/2).^2);       %光强

输入网页yanshisuangfeng.html部分代码

<!--M文件名-->
<input type="hidden" name="mlmfile" value="yanshisuangfeng"/> 
  <input type="text" name="d" />        <!--双缝的间隔-->
<input type="text" name="Lambda" />   <!--波长-->
<input type="text" name="z" />         <!--屏幕到双狭缝平面的距离-->

  <input type="text" name="Ny" />             <!--条纹清晰度-->

其中:d为双缝的间隔,z为屏幕到双狭缝平面的距离,Lambda为波长,本实验参数选取为d=1.5mm,z=2m,Lambda=0.0000006 mm,运行结果如图3所示:

 

图3仿真模拟杨氏双缝干涉图样与光强分布曲线

4.2牛顿环

牛顿环属于分振幅干涉,它是一种等厚干涉条纹.根据光波的迭加原理,可得出牛顿环干涉光强分布为:

迈克尔逊干涉仪

迈克尔逊干涉仪的干涉也属于分振幅干涉调整迈克尔逊干涉仪的M2使得M1和M2之间角度发生变化可以分别得到等倾干涉和等厚干涉条纹。本文讨论等倾干涉条纹

 

function rs = niutunhuan(h)

% 得到唯一ID ,用于图片名字

mlid = getfield(h, 'mlid');

% 设置当前目录,以便储藏文件(图片)

cd(h.mldir);

% 清理一小时前的图片.

wscleanup('niutunhuan*.jpeg', 1);

%得到数据

Lambda = str2double(h.Lambda)*10^(-6);    %Lamada 表示波长

R      = str2double(h.R)*10^3;            %R为透镜的曲率半径,

range  = str2double(h.range);

n      = str2double(h.n);

if(~isfinite(Lambda)|~Lambda)

    error('请输入波长.');

end

if(~isfinite(R)|~R)

    error('请输入透镜的曲率半径.');

end

if(~isfinite(range)|~range)

    error('请输入取值坐标.');

end

if(~isfinite(n)|n<5|n>1000)

    error('请输入正确条纹清晰度(50-1000).');

end

% 开始创画板

Fig = figure('visible','off');

x=linspace(-range,range,n);

y=x;

[X,Y]=meshgrid(x,y);

I=4*cos(pi/Lambda*((X.^2+Y.^2)/R+Lambda/2)).^2;    %等厚干涉的光强

NCLevels=255;

Ir=(I/4.0)*NCLevels;

image(x,y,Ir);

colormap(gray(NCLevels));

title('牛顿环(等厚干涉)计算机模拟');

%读写图片 到文件.

drawnow;

s.GraphFileName = sprintf('niutunhuan%s.jpeg', mlid);

wsprintjpeg(Fig, s.GraphFileName);

s.GraphFileName = sprintf('/icons/niutunhuan%s.jpeg', mlid);

close all;

% 写入到网页中.

templatefile = which('showpicture.html');

rs = htmlrep(s, templatefile);

附件三:(用MATLAB语言对迈克尔逊干涉仪模拟M文件)

function rs = maikexunganshe(h)

%等倾干涉的光强分布为:

% 得到唯一ID ,用于图片名字

mlid = getfield(h, 'mlid');

% 设置当前目录,以便储藏文件(图片)

cd(h.mldir);

% 清理一小时前的图片.

wscleanup('maikexunganshe*.jpeg', 1);

%得到数据

Lambda = str2double(h.Lambda)*10^(-6);     %Lamada 表示波长

f      = str2double(h.f);                  %f 屏幕前透镜的焦距

d      = str2double(h.d);                  %d 由分光板分束,经相互垂直的两平面反射镜反射的二相干光束的光程差的一半

range     = str2double(h.range);

n     = str2double(h.n);

if(~isfinite(Lambda)|~Lambda)

    error('请输入波长.');

end

if(~isfinite(d)|~d)

    error('请输入光程差的一半.');

end

if(~isfinite(f)|~f)

    error('请输入屏幕前透镜的焦距.');

end

if(~isfinite(range)|~range)

    error('请输入请输入取值坐标.');

end

if(~isfinite(n)|n<5|n>1000)

    error('请输入正确条纹清晰度(50-1000).');

end

% 开始创画板

Fig = figure('visible','off');

x=linspace(-range,range,n);

y=x;

[X,Y]=meshgrid(x,y); 

r=sqrt(X.^2+Y.^2);            

I=4*cos(pi*2*d*cos(atan(r/f)/Lambda)).^2;

NClevels=255;

Ir=(I/4.0)*NClevels;

image(x,y,Ir);

colormap(gray(NClevels));

title('克尔逊干涉仪(等倾干涉)计算机模拟');

%读写图片 到文件.

drawnow;

s.GraphFileName = sprintf('maikexunganshe%s.jpeg', mlid);

wsprintjpeg(Fig, s.GraphFileName);

s.GraphFileName = sprintf('/icons/maikexunganshe%s.jpeg', mlid);

close all;

% 写入到网页中.

templatefile = which('showpicture.html');

rs = htmlrep(s, templatefile);

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值