MATLAB在光学中的应用

  • 格式:doc
  • 大小:263.00 KB
  • 文档页数:12

v .. . .. 《MATLAB语言》课程论文MATLAB在光学中的应用姓名:xxx学号:xxx专业:xxx班级:xxx指导老师:xxx学院:xxx完成日期:2013年12月8号MATLAB在光学中的应用(xxx xxx xxx)[摘要]大学物理力学中涉及许多复杂的数值计算问题,利用MATLAB图形用户界面的设计与开发功能,结合真实的光谱图,制作单缝衍射、光栅衍射。

实验所得出的图形细致逼真,使整个实验过程变得直观形象,我们能更好的理解以及加深印象。

[关键词]MATLAB光学应用;单缝衍射;光栅衍射;夫琅和费衍射;一、问题的提出物理光学是高校物理学专业的必修课,其中,光的衍射既是该门课程的重点内容,也是人们研究的热点。

然而由于光学衍射部分公式繁多,规律抽象,学生对相应的光学图像和物理过程的理解有一定的困难,大大影响了教学效果。

当然,在实际中可以通过加强实验教学来改善教学效果,但是光学实验对仪器设备和人员掌握的技术水平要求都较高,同时实验中物理现象容易受外界因素的影响,这给光学教学带来了较大的困难数值计算在科学研究与工程应用中具有非常广泛的应用。

许多数值计算问题,用其他程序设计语言编程求解非常麻烦,并且需要具备专门的数学知识及一定的程序设计技能,而用MATLAB编程,往往只要少数几个语句即可完成求解任务,具有编程效率高、使用方便等特点。

可以用于数据处理、多项式计算、数值微积分、数值方程及常微分方程数值等。

二、光学衍射1、单缝衍射衍射问题是光学中最困难的课题之一,严格的衍射理论是比较复杂的,不过大多数实际问题都可以用近似方法来处理对于单缝衍射,相关书籍中,都给出了远场条件下夫琅和费衍射光强分布的数学描述,而要模拟夫琅和费衍射的形成条件,则必须从更一般情况来分析问题。

如图1 (a) 所示,将宽度为a 的缝光源视作n 个等间的点光源组成,接收屏上某点p 的光强即为这n 个点光源相干叠加的结果。

设各点光源在p 点光强相同,相位不同,则根据惠更斯- 菲涅耳原理, 屏上p 点的归一化光强可表示为:式中Li 为第i 个点光源到p 点的光程,有Li = ( (yp - ai) 2 + z2) 1/ 2 , z 为缝到接收屏的距离。

分析:用传统计算方法解决时我们需要列出传统方程,我们明显可以感觉到,这样的计算不仅繁琐费时,而且没有图示很难给以直观的感受,现在我们用MATLAB语言来对此例题做以下解析:(1)MATLAB程序如下:Length=6328e-7a=015 %取λ=6328,a=0.5mmz=input(’z=?’) %从键盘输入单缝到接收屏的距离range=4.0 Np=800 %设置接收屏的范围及点数Ns=500 ys=linspace(-a/2,a/2,Ns) %分割单缝为Ns个点光源fori=1:Np% %计算各点光强,存入矩阵IL=sqrt((yp(i)-ys).^2+z^2)I(i,:)=(sum(cos(2*pi*(L-z)./Length)).^2+sum(sin(2*pi*(L-z)./Length) ) .^2)/Ns^2endyp=linspace(-range,range,Np)xp=yp/2 %确定接收点,坐标存入矩阵xp、yp A=I*255colormap(pink) %指定调色板subplot(1,2,1) image(xp,yp,A ) %显示衍射图样subplot(1,2,2) plot(I,y) %绘光强分布曲线运行结果如下图所示。

从键盘输入不同的屏距z立即可以看到相应的衍射图样及光强分布曲线。

上图给出了λ=6328、a=015mm,z分别为200mm、500mm和1000mm时的模拟结果。

从中可以清楚的看出随着屏距z的增大或者z不变而缝宽a减小,衍射图样由菲涅耳衍射向夫琅和费衍转化的过程,特别是通过人机交互任意改变各参量值,从而加深了对夫琅和费衍射的远场条件的理解。

(2)单缝衍射模拟clc;clear;a=-2*pi:0.0001*pi:2*pi;p1=(1-sinc(a)).^2; %方便下面着色p2=sinc(a).^2;figure;plot(a,p2);xlabel('kasinθ');ylabel('光强I/I0');title('单缝衍射强度分布'); lgray=zeros(256,3);for i=0:255lgray(i+1,:)=(255-i)/255; endfigure;imagesc(p1)title('单缝衍射模拟图'); colormap(lgray)拟合曲线如下图。

附加:多缝衍射多缝衍射MATLAB仿真代码:clearlam=500e-9;N=2;a=2e-4;z=5;d=5*a;xm=2*lam*z/a;y0=xm;n=1001;x0=linspace(-xm,xm,n);for i= 1: n %计算各点光强,存入矩阵Isinphi=x0(i)/z;alpha=pi*a*sinphi/lam;beta=pi*d*sinphi/lam;B(i,:)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2; B1=B/max(B);endNC=255;Br=(B/max(B))*NC;subplot(1,2,1),image(y0,x0,Br);colormap( gray(NC) ); %显示衍射图样subplot(1,2,2),plot(B1,x0); %绘光强分布曲线2、光栅衍射测定光栅常数和光波波长,当一束单色光垂直照射在光栅上时,各狭缝的光线因衍射而向各方向传播,经透镜会聚相互产生干涉,并在透镜的焦平面上形成一系列明暗条纹。

如右图所示,有一束平行光与光栅的法线成i角,入射到光栅上产生衍射;出射光夹角为ϕ。

从B点引两条垂线到入射光和出射光。

如果在F处产生了一个明条纹,其光程差CA+AD必等于波长λ的整数倍,即d(sinϕ±sini)=mλ(1)m为衍射光谱的级次,0,±1,±2,±3……由这个方程,知道了d I ϕλ中的三个量,可以推出另外一个。

若光线为正入射,i=0,则上式变为dsinϕm= mλ (2)其中mϕ为第m级谱线的衍射角。

由公式可知角度的计算很麻烦,我们用MATLAB语言来对此例题做以下解析:设定光栅常数d,缝宽b,光栅到屏幕的距离f,光栅的缝数N,入射光波长λ。

设定图像显示范围和在这范围内的点数。

图5所示(d=0.042mm,b=0.014mm,f=1000nm,λ=500nm,)图5(a)为当N=4时的仿真结果,,第3级缺级,且在两个最大值之间有两个次最大(N-2),有3个最小值(N-1)。

图5(b)为当N=6时的仿真结果,第3级缺级,在两个最大值之间有 4个次最大,有4个最小值。

MATLAB程序如下:Lambda=1000;d=0.042 ;b=0.014 ;f=1000 ;N=4;yMax=Lambda*5*f/d;xs= yMax;Ny=201;ys=linspacc(-yMax, yMax,Ny);for i=1:Ny %计算各点光强,存入矩阵IL1=(pi*b*ys(i))/( Lambda*sqrt(ys(i).^2+f.^2));L2=(pi*d*ys(i))/( Lambda*sqrt(ys(i).^2+f.^2));l(i,:)=(sin(L1)/L1).^2*(sin(N*L2)/sin(L2)).^2;endgef;figure(gef);NCLevels=230;lr=(l/1.0)* NCLevels;subplot(1,2,2),image(ys,xs,lr);colormap( gray(NCLevels) ); %显示衍射图样subplot(1,2,2),plot(l(i,:),ys); %绘光强分布曲线三、结论在光学衍射教学中,光学理论复杂抽象,实验演示难度大通过将MATLAB 与光学教学相结合,有利于我们对物理概念的理解,克服了苛刻的光学实验条件,可有效提高教学效果。

MATLAB的计算、绘图和动画功能,MATLAB还有许多功能有待在实验中开发利,以进一步丰富我们学习和实验的方法和手段,不断提高实验水平。

在光学等普通MATLAB的应用中,MATLAB的应用可以有两种方式。

一是以MATLAB为问题求解工具。

引导我们运用MATLAB 进行数据处理、系统仿真等工作。

由于有了优秀的工具软件,就可以集中精力研究问题,选取最恰当的数学模型、方法,以更高的效率,得出更合理的结果,同时培养我们应用计算机解决科学问题的能力。

二是以MATLAB为实验演示平台。

本文实例中基于MATLAB的单缝衍射等光学现象模拟,运用于计算机作为演示实验配合光学理论,很好地解决了真实实验因环境限制而不能形象得理解这方面问题的难题。

四、课程体会对于我来说,这个软件的作用非常大,随着计算机技术的迅速发展,现代化的教育模式走进了课堂,利用计算机对光学现象进行仿真也成为一种可能。

MATLAB是一款集数值分析、符号运算、图形处理、系统仿真等功能于一体的科学与工程计算软件,它具有编程效率高、简单易学、人机交互好、可视化功能、拓展性强等优点,不仅能在我们日常学习中起很大的帮助,而且在一些抽象的问题上,能使其变得具体形象,让我们更容易得去了解学习。

有一些东西比较抽象并且不容易去想象。

利用MATLAB编程仿真光学现象只需改变程序中的参数,就可以生成不同实验条件下的光学图像,使实验效果更为形象逼真。

在课堂教学中,能快速的验证实验理论,使学生更直观的理解理论知识,接受科学事实。

MATLAB与C语言有一定的共同之处,但是MATLAB相对于C语言不管是简易程度还是方便运用方面都要简单好多。

而且许多数值计算问题,用其他程序设计语言编程求解非常麻烦,并且需要具备专门的数学知识及一定的程序设计技能,而用MATLAB编程,往往只要少数几个语句即可完成求解任务,具有编程效率高、使用方便等特点。

MATLAB 7.0提供了好多功能,通过这种功能可以很简单的获得函数和命令的使用方法。

最后我想说的是MATLAB是一个好工具,也只能是一个好工具。

最初自己对编程序这方面谈不上喜欢,但是接触到MATLAB时,每次做实验都能看到自己的成果,渐渐的有了想去了解他的想法。

它可以作为一个平台,承载知识和算法,感谢MATLAB带给我的新思维,也许以后可能不会再用到但回想自己学习的过程从对被他的神秘所吸引到后来的喜欢再到学习其间也让自己体会到了一个完整的学习过程,也许这就是学习最终的结果得到的不一定是结果但方法肯定值得借鉴,回头只能看到自己的影子,我会继续努力的。