基于matlab的光学衍射仿真精品资料.doc
西安工业大学毕业设计(论文)开题报告题目: 基于Matlab的光学衍射实验仿真系 别 光电信息系 专 业 光电信息工程 班 级 XXX 姓 名 王XX 学 号 X070104XX 导 师 XX 2010 年 11 月 27 日29课题背景及研究意义衍射是光波的一种重要特征,对光波衍射现象的讨论是以惠更斯- 菲涅尔原理为基础的。事实证明,在大多数光学问题中,可以采用光场的标量衍射理论来描述和计算。光场的频率非常高,只能测量在一个比光的周期大得多的时间间隔内的平均值,在计算衍射光波场的光振动和光强分布时则利用菲涅尔- 基尔霍夫衍射积分公式1,2,3 。在物理光学的光的衍射教学过程中,光学实验内容比较抽象, 如不借助实验, 学生很难理解理论、实验原理和过程。通常,学校的教学中,将光学理论教学与实验教学相分离,理论教学中需要实验现象来验证,而光学实验的进行一般要稳定的环境、高精密的仪器, 复杂的实验仪器以及光路的调试, 花费了技术人员相当多的时间,往往很难调试到理想的状态,搭建好的仪器和光路也会受到环境和温度的影响,有时实验结果将偏离理论预测。为了在物理光学课程教学过程形象生动,需要现代化的教学手段,千方百计地为学生提供观察物理现象的机会,提高学生学习光学课程的兴趣,培养他们的思维水平和创新能力,应该充分利用计算机软件功能为教学增添活力,为学生理解复杂理论和实验做好铺垫,可以用MATLAB软件为平台,对光学实验进行计算机仿真,具有两个方面意义:一方面,利用仿真结果指导实际实验。前期投资少,且可以减少贵重仪器的损伤等;另一方面,在教学上,将抽象难懂的概念、规律通过实验仿真生动、形象地表现出来,使学生更易于接受,具有明显的教学效果。还可以鼓励学生自主探索,研究一些更深入的光学问题,这样可以拓宽知识面,提高能力4,5,6 。国内外研究情况 在用计算机模拟7 光学实验软件方面,国外的光学衍射模拟试验是在模拟设计和优化光学系统的过程中发展起来的。在这方面,美国走在最前面,他们最具代表性的是劳伦斯利弗莫尔实验室光传输模拟计算软件Prop928,9 及大型总体优化设计软件CHAINOP和PROPSUITE10 。其中软件Prop92就是采用Fortran语言编写,最大采样点数为512*512。这些软件在大型激光器NOVA的设计制造中发挥了重要作用。另外法国也开发完成其有自身特点的光传输软件Miro11 ,该软件采用C+编写,可以运行于多个平台。俄罗斯普通物理实验室在上世纪90年代初推出光传输软件Fresnel2.012 。该软件是一套成熟的商业化光传输软件,在处理光传输的数值模拟算法上有独到之处,主要体现在其快速傅里叶变换的计算效率很高;软件采用特殊方法能够处理小于计算分辨率的灰尘点的衍射过程以及截止频率小于计算网格分辨最小频率的滤波过程等。另外,该软件图形界面友好,稳定可靠。我国用于科学研究的光传输软件开发虽然较晚,但也取得了很大的成绩。特别是1999年,神光III原型装置TIL分系统集成试验的启动为高功率固体激光驱动器的计算机模拟的研究创造了条件。目前已基本完成SG99光传输模拟计算软件13 的开发,推出的标准版本基本能稳定运行,对SG99主要计算模块的验证结果表明SG99对能流放大、线性传输、非线性传输的计算是合理可靠的,其中线性传输的计算模块的计算精度与国外同类软件Fresnel相当;目前该软件已经用于神光-III主机可行性论证的工作中。现在我们比较多的利用美国MathWorks公司推出的MATLAB14,15,16 软件来实现上面的工作。MATLAB是国际公认的优秀数学应用软件,它是用于数值计算和图形处理的应用软件,它包括了数值计算、矩阵运算、信号处理、图形显示、可视化建模仿真和实时控制等功能,并且有大量的函数库可供使用17 。MATLAB的基本单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似。故用MATLAB来解决问题比用C、FORTRAN等语言简洁的多。本课题研究的主要内容和拟采用的研究方案、研究方法或措施光学试验中衍射实验是非常重要的实验. 光的衍射是指光在传播过程中遇到障碍物时能够绕过障碍物的边缘前进的现象, 光的衍射现象为光的波动说提供了有力的证据. 衍射系统一般有光源、衍射屏和接受屏组成, 按照它们相互距离的大小可将衍射分为两大类, 一类是衍射屏与光源和接受屏的距离都是无穷远时的衍射, 称为夫琅禾费衍射, 一类是衍射屏与光源或接受屏的距离为有限远时的衍射称为菲涅尔衍射 , 按照衍射屏狭缝的形状可分为单缝、圆孔和多缝等衍射. Matlab是由美国Mathworks公司推出的数值分析中很强的应用软件,具有强大的数值计算,数据可视化与编程,仿真和图像处理等功能。与Basic,C,和Fortran相比,用Matlab软件做光学实验的模拟,只需要用数字方式表达和描述,省去了大量繁琐的编程过程,Origin软件一般用于实验数据的分析处理和作图,可以仿真一些简单的实验,仿真效果一般。所以综合考虑本课题选用Matlab软件进行实验仿真。夫琅禾费衍射单缝夫琅和费衍射的原理如图所示,它是平行光衍射 。实验要借助两个透境来实现。一束平行光照射到很窄的单缝 上,穿过单缝后经过透镜,J在屏幕E上形成衍射条纹。实验发现,平行光(波阵面垂直于透镜光轴)经过透镜会聚在焦面中央的光线因相互加强而形成明纹。这说明位相相同的平行光经过透镜聚焦时,它们的位相仍然相同,透镜并未引起附加的位相差。在傍轴条件下,利用菲涅耳一基尔霍夫积分公式求得狭缝上子波源在衍射屏上P点的叠加复振幅为 光强为: 其中,a为缝宽度,I为屏中心0点光强。圆孔夫琅禾费衍射与其类似,且在正入射时,圆孔的夫琅禾费衍射复振幅为 光强为 其中,其中a为圆孔半径,是一阶贝赛尔函数。由上式可知,衍射场上P点的光强分布不仅与位置有关,还与波长有关。 夫琅禾费矩孔实验 Matlab仿真代码lmda=632.8e-9;% 波长xmax=0.05;% 观察屏所取范围ymax=xmax;def=0.0001;x=-xmax:def:xmax;y=-ymax:def:ymax;lenm=length(x);lenn=length(y);for m=1:lenmfor n=1:lennalpha=pi*x(m)*a/(lmda*f);%0.5*k*l*a;beta=pi*y(n)*a/(lmda*f);%bb=0.5*k*w*b;I(m,n)=(sin(alpha)/(alpha)2*(sin(beta)/(beta)2;endendI=I/(max(max(I);X,Y=meshgrid(x,y);figuremesh(X,Y,I);xlabel('x');ylabel('y');zlabel(' 光强');rotate3Dhold onfigureimshow(255*I);xlabel('x');ylabel('y'); 夫琅禾费矩孔仿真图 光强三维图 惠更斯菲涅尔衍射根据惠更斯菲涅尔原理的次波假设和次波相干叠加原理,当次级波源处于同一波真面上时,由它们发出的子波必然是彼此相干的,在波传播的后面空间中任何一点处的光振动则是这些次级波源产生的子波叠加的结果。菲涅尔原理数学表达式为: 式中K(H)为倾斜因子 单缝衍射Matlab仿真代码如下 clearlam=500e-9;a= 1e-3; f=1;xm= 3*lam*f/a;nx= 51;xs=linspace(-xm,xm,nx);np=51;xp=linspace(0,a,np);for i=1:nxsinphi= xs(i)/f;alpha=2*pi*xp*sinphi/lam;sumcos=sum(cos(alpha);sumsin=sum(sin(alpha);B(i,:)=(sumcos2+sumsin2)/np2;endN=255;Br=(B/max(B)*N;subplot(1,2,1)image(xm,xs,Br);colormap(gray(N);subplot(1,2,2)plot(B,xs); 单缝衍射光强分布图多缝衍射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: nsinphi=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); 多缝衍射光强分布图本课题研究的重点及难点,前期已开展工作本课题研究的重点是使用MATLAB软件结合所学的物理光学中光的衍射原理,对典型的衍射实验的衍射光强分布进行编程运算,并输出计算得到的衍射图样分布,对实验现象进行仿真。改变设置的计算参数观察仿真图样的变化规律,给出物理光学理论解释。难点是建立衍射现象的数学模型和创建交互式界面用户可以通过改变输入参数模拟不同条件下的衍射条纹及计算机仿真。目前已进行课题调研,对课题研究的内容,原理,可行方案,准备资料进行整理,准备11月底的开题答辩完成本课题的工作方案及进度计划(按周次填写)计划工作方案首先12月前完成资料准备,和开题报告.2月前完成原理设计、总体设计、并确定最终的设计方案。3月份开始为仿真做准备,进行资料调研,开始编写程序,调试程序4月份运行已经编好的程序,然后观察Matlab仿真的效果图,进行资料收集,整理,为毕业设计论文做准备。5 月份完成衍射的各个仿真,开始毕业设计论文写作6月份完成毕业设计论文,然后做好毕业答辩的准备工作。第1周进行课题调研第2周调研课题的内容,原理,可行方案,准备资料进行整理第3周进行毕业开题报告写作工作第4周将写好的毕业论文开题报告交给指导老师审阅,以及做好初期答辩的准备工作,迎接初期答辩第5周进行拟用方案研究,以及对方案的可行性进行分析第6周将自己的方案让指导老师审阅第7周确定好方案,以及研究方法第8周开始对课题的原理进行深度理解第9周开始毕业设计的初期准备工作第10周进行Matlab等书籍,资料的准备工作第11周为仿真做好准备工作第12周进行仿真资料调研第13周开始编写程序第14周开始调试程序第15运行已经调试好的程序第16周观察Matlab仿真的衍射图第17周进行资料收集,整理第18周为毕业设计做好准备第19周完成衍射的各个仿真、第20周准备创建交互式界面第21周完成创建交互式界面工作第22周开始毕业论文写作第23周继续写毕业论文第24周完成毕业论文写作第25周开始为毕业答辩做好准备第26周进行最后的论文答辩参考文献1 姚启均. 光学教程M. 北京: 高等教育出版社, 2002.2 徐金明. MATLAB实用教程M . 北京: 清华大学出版社, 2005.3 李海涛, 邓樱. MATLAB6. 1基础及应用技巧M. 北京: 国防工业出版社2002.4 谢嘉宁, 陈伟成, 等. Mat lab 在光学信息处理仿真实验中的应用 J. 物理实验, 2004, 24 ( 6). 5 周忆, 梁齐. 用MATLAB语言模拟光衍射实验 J. 大学物理实验, 2001, 14 ( 4).6梁绍荣普通物理学·光学M高等教育出版社,1988:l602027曲伟娟,基于MATLAB的光学试验仿真,西北工业大学硕士论文,20048R.A.Sacks,M.A.Henesian,S.W.Haney,J.B.Trenholme,The PROP92 FourierBeam Propagation Code,Lawrence Livermore National laboratory,Livermore,UCRL-LR-105821-96-4,1996;http:/www.Unl.gov/nif/icf/icfpubs/qrtly_reports/jul-sep96/sacks.pdf.9W.Williams J.Trenholme,C.Orth S.Haney,R.Sacks,etal,NIF DesignOptimiazation,ICF Quarterly Report 6(4),Lawrence Livermore NationalLaboratory,Livermore,CA,UCRL-LR-105821-96-4,1996;http:/www.Unl.gov/nif/icf/icfpubs/qrtly_reports/jul-sep96/Williams.pdf.10C.D.Orth,S.W.Haney,W.H.Williams,Laser Optimization Techniques,UCRL-LR-105821-96-411O.Morice,D.Nassie,G.Gallice,etal,Laser Pulse PropagationCalculations using the Miro software,Inertial Fusion Sciencesand applications99,199912FRESNEL(software for simulation of laser beam propogation throughvarious optical schems),2004:http/究院博士后工作报告,绵阳,200314赵旭光,刘晓军,用MATLAB语言模拟光的衍射现象的研究J,齐齐哈尔大学学报,2006.11,Vol22(6):84-8515李南南,吴清,曹辉林,MATLAB 7简明教程M,清华大学出版社16张兆礼,赵春晖,梅晓丹,现代图像处理技术及MATLAB实现,北京,人民邮电出版社,2001:8-1317陈怀琛,MATLAB及其在理工课程中的应用指南M,西安,西安电子科技大学出版社,2000.5 指导教师意见(对课题的深度、广度及工作量的意见) 指导教师: 年 月 日6 所在系审查意见: 系主管领导: 年 月 日附录资料:MATLAB的30个方法1 内部常数pi 圆周率 exp(1)自然对数的底数ei 或j 虚数单位Inf或 inf 无穷大 2 数学运算符a+b 加法a-b减法a*b矩阵乘法a.*b数组乘法a/b矩阵右除ab矩阵左除a./b数组右除a.b数组左除ab 矩阵乘方a.b数组乘方-a负号' 共轭转置.'一般转置3 关系运算符=等于<小于>大于<=小于或等于>=大于或等于=不等于4 常用内部数学函数 指数函数exp(x)以e为底数对数函数log(x)自然对数,即以e为底数的对数log10(x)常用对数,即以10为底数的对数log2(x)以2为底数的x的对数开方函数sqrt(x)表示x的算术平方根绝对值函数abs(x)表示实数的绝对值以及复数的模三角函数(自变量的单位为弧度)sin(x)正弦函数cos(x)余弦函数tan(x)正切函数cot(x)余切函数sec(x)正割函数csc(x)余割函数反三角函数 asin(x)反正弦函数acos(x)反余弦函数atan(x)反正切函数acot(x)反余切函数asec(x)反正割函数acsc(x)反余割函数双曲函数 sinh(x)双曲正弦函数cosh(x)双曲余弦函数tanh(x)双曲正切函数coth(x)双曲余切函数sech(x)双曲正割函数csch(x)双曲余割函数反双曲函数 asinh(x)反双曲正弦函数acosh(x)反双曲余弦函数atanh(x)反双曲正切函数acoth(x)反双曲余切函数asech(x)反双曲正割函数acsch(x)反双曲余割函数求角度函数atan2(y,x)以坐标原点为顶点,x轴正半轴为始边,从原点到点(x,y)的射线为终边的角,其单位为弧度,范围为( , 数论函数gcd(a,b)两个整数的最大公约数lcm(a,b)两个整数的最小公倍数排列组合函数factorial(n)阶乘函数,表示n的阶乘 复数函数 real(z)实部函数imag(z)虚部函数abs(z)求复数z的模angle(z)求复数z的辐角,其范围是( , conj(z)求复数z的共轭复数求整函数与截尾函数ceil(x)表示大于或等于实数x的最小整数floor(x)表示小于或等于实数x的最大整数round(x)最接近x的整数最大、最小函数max(a,b,c,)求最大数min(a,b,c,)求最小数符号函数 sign(x)5 自定义函数-调用时:“返回值列=M文件名(参数列)”function 返回变量=函数名(输入变量) 注释说明语句段(此部分可有可无)函数体语句 6进行函数的复合运算compose(f,g) 返回值为f(g(y)compose(f,g,z) 返回值为f(g(z)compose(f,g,x,.z) 返回值为f(g(z)compose(f,g,x,y,z) 返回值为f(g(z)7 因式分解syms 表达式中包含的变量 factor(表达式) 8 代数式展开syms 表达式中包含的变量 expand(表达式)9 合并同类项syms 表达式中包含的变量 collect(表达式,指定的变量)10 进行数学式化简syms 表达式中包含的变量 simplify(表达式)11 进行变量替换syms 表达式和代换式中包含的所有变量 subs(表达式,要替换的变量或式子,代换式)12 进行数学式的转换调用Maple中数学式的转换命令,调用格式如下:maple(Maple的数学式转换命令) 即:maple(convert(表达式,form)将表达式转换成form的表示方式 maple(convert(表达式,form, x) 指定变量为x,将依赖于变量x的函数转换成form的表示方式(此指令仅对form为exp与sincos的转换式有用) 13 解方程solve(方程,变元) 注:方程的等号用普通的等号: = 14 解不等式调用maple中解不等式的命令即可,调用形式如下: maple('maple中解不等式的命令')具体说,包括以下五种:maple(' solve(不等式)') maple(' solve(不等式,变元)' ) maple(' solve(不等式,变元)' ) maple(' solve(不等式,变元)' ) maple(' solve(不等式,变元)' )15 解不等式组调用maple中解不等式组的命令即可,调用形式如下: maple('maple中解不等式组的命令') 即:maple(' solve(不等式组,变元组)' )16 画图方法:先产生横坐标的取值和相应的纵坐标的取值,然后执行命令: plot(x,y) 方法2:fplot('f(x)',xmin,xmax) fplot('f(x)',xmin,xmax,ymin,ymax) 方法3:ezplot('f(x)') ezplot('f(x)' ,xmin,xmax) ezplot('f(x)' ,xmin,xmax,ymin,ymax) 17 求极限(1) 极限:syms x limit(f(x), x, a) (2)单侧极限:左极限:syms x limit(f(x), x, a,left) 右极限:syms x limit(f(x), x, a,right) 18 求导数diff('f(x)') diff('f(x)','x') 或者:syms x diff(f(x) syms x diff(f(x), x) 19 求高阶导数 diff('f(x)',n) diff('f(x)','x',n) 或者:syms x diff(f(x),n)syms x diff(f(x), x,n) 20 在MATLAB中没有直接求隐函数导数的命令,但是我们可以根据数学中求隐函数导数的方法,在中一步一步地进行推导;也可以自己编一个求隐函数导数的小程序;不过,最简便的方法是调用Maple中求隐函数导数的命令,调用格式如下: maple('implicitdiff(f(x,y)=0,y,x)') 在MATLAB中,没有直接求参数方程确定的函数的导数的命令,只能根据参数方程确定的函数的求导公式 一步一步地进行推导;或者,干脆自己编一个小程序,应用起来会更加方便。21 求不定积分 int('f(x)') int ('f(x)','x') 或者:syms x int(f(x) syms x int(f(x), x) 22 求定积分、广义积分 int('f(x)',a,b) int ('f(x)','x',a,b) 或者:syms x int(f(x),a,b) syms x int(f(x), x,a,b) 23 进行换元积分的计算自身没有提供这一功能,但是可以调用Maple函数库中的changevar命令,调用方法如下:maple(' with(student)' ) 加载student函数库后,才能使用changevar命令maple(' changevar( m(x)=p(u), Int(f(x),x) ) ' ) 把积分表达式中的m(x)代换成p(u)24 进行分部积分的计算自身没有提供这一功能,但是可以调用Maple函数库中的intparts命令,调用方法如下: maple(' with(student)' ) 加载student函数库后,才能使用intparts命令maple('intparts(Int(f(x),x),u)' ) 指定u,用分部积分公式 进行计算 25 对数列和级数进行求和 syms n symsum(f(n), n a ,b ) 26 进行连乘 maple('product(f(n),n=a.b)')27 展开级数syms x taylor(f(x), x, n, a )28 进行积分变换syms s t laplace( f(t), t, s ) 拉普拉斯变换 ilaplace( F(s), s, t ) 拉普拉斯变换的逆变换 syms t fourier( f(t), t, ) 傅立叶变换 ifourier( F(), , t ) 傅立叶变换的逆变换 syms n z ztrans( f(n), n, z) Z变换 iztrans( F(z), z, n ) Z变换的逆变换 在matlab中,矩形法、梯形法和辛普森法求近似积分可以用自身的命令,也可调用Maple的相应命令。调用方法如下: maple('with(student) ') maple('Maple中求定积分近似值的命令')29 解微分方程dsolve('微分方程','自变量') dsolve('微分方程','初始条件或边界条件','自变量')30 解微分方程组dsolve('微分方程组','自变量') dsolve('微分方程组','初始条件或边界条件','自变量')