光学软件基础及应用-Matlab.ppt
光学软件基础及应用MATLAB,2010-2011 第二学期,安徽工业大学 光信息科学与技术,2,MATLAB必须掌握的计算机语言之一,科学研究的强大辅助工具数学运算:线性代数/微积分/概率统计专业课学习工具:应光、物光工程或生活中实际问题的解决工具,数学软件+专业工具库+综合开发平台,第一章认识MATLAB,2010-2011 第二学期,安徽工业大学 光信息科学与技术,4,1.1 MATLAB简介,美国MathWorks公司推出的科学及工程计算软件数学家-软件专家-各领域专家共同编写实现MATRIX和LABORATORY的缩写-矩阵实验室,2010-2011 第二学期,安徽工业大学 光信息科学与技术,5,1.2 MATLAB的产生和发展,1980年产生美国新墨西哥州大学计算机系主任Cleve Moler为解决“线性代数”课程的矩阵运算问题而开发的接口程序1983年春天工程师John Little与Moler、Steve Bangert一起开发了第二代专业版MATLAB(用C语言编写实现)1984年MathWorks公司成立,2010-2011 第二学期,安徽工业大学 光信息科学与技术,6,强大的科学计算、数据处理能力基本的计算、科研和工程计算的最新研究成果出色的图形处理与显示能力功能强大的模块集和专业工具箱符号运算、优化、图像处理、偏微分方程工具箱可编程解决复杂问题M文件丰富的程序接口C语言、ZEMAX丰富的联机帮助系统,1.3 MATLAB的功能,2010-2011 第二学期,安徽工业大学 光信息科学与技术,7,MATLAB的其他应用,2010-2011 第二学期,安徽工业大学 光信息科学与技术,8,1.4 MATLAB的软件界面,命令窗口,历史记录窗口,工作变量空间,2010-2011 第二学期,安徽工业大学 光信息科学与技术,9,1.5 MATLAB的软件显示调整,第二章MATLAB的基本运算,矩阵为运算单元,2010-2011 第二学期,安徽工业大学 光信息科学与技术,11,2.1 MATLAB的基本使用,直接在命令窗口输入要计算的内容MATLAB语句形式为:变量=表达式无需事先定义变量回车后语句执行,窗口显示语句执行结果,2010-2011 第二学期,安徽工业大学 光信息科学与技术,12,2.1 MATLAB的基本使用,光标闪烁等待输入命令,2010-2011 第二学期,安徽工业大学 光信息科学与技术,13,常用的命令及其功能,clc 擦去命令窗口内容clear 消除工作空间所有变量clear 变量名 消除指定的变量help 命令名 查询所列命令的帮助信息 调用上一行命令Ctrl+C 中断程序运行,2010-2011 第二学期,安徽工业大学 光信息科学与技术,14,2.2 MATLAB的变量,变量命名规则变量区分字母大小写名字不能超过31个字符,超过部分被忽略变量必须以英文字母开头,之后可以使用字母、数字、下划线,但不能使用空格和标点符号,2010-2011 第二学期,安徽工业大学 光信息科学与技术,15,2.2 MATLAB的特殊变量常量,编写函数时使用,复数计算时使用,2010-2011 第二学期,安徽工业大学 光信息科学与技术,16,2.2 MATLAB的变量显示格式,MATLAB中所有的量为双精度浮点数改变显示格式命令:format 格式常用的格式有bank(2个十进制位)hex(十六进制)short(缺省)short e(5位加指数)long(16位)long e(16位加指数)rat(有理数近似)改变显示格式并不改变变量本身,2010-2011 第二学期,安徽工业大学 光信息科学与技术,17,2.3 MATLAB的基本矩阵运算,矩阵的直接输入创建:和数组的格式相似以“”开始,以“”结束每一行元素结束用行结束符号(分号或回车)分隔同一行元素之间用元素分隔符号(空格或,)分隔举例:创建23的矩阵,第一行为1/2/3,第二行为4/5/6,2010-2011 第二学期,安徽工业大学 光信息科学与技术,18,2.3 MATLAB的基本矩阵运算,对矩阵元素的访问单个元素的访问:a(2,1)=0整行元素的访问:a(2,:)=0 9 8 7整列元素的访问:a(:,3)=3;8;6某块元素的访问:a(2:3,3:4)=8 7;6 5注意点下标从1开始冒号“:”的使用,2010-2011 第二学期,安徽工业大学 光信息科学与技术,19,2.3 MATLAB的基本矩阵运算,矩阵按列编址元素访问的另一种方式*获取矩阵大小函数size:size(a)=3 4,编址规则:,对mn矩阵而言:a(i,j)=a(i+(j-1)*m),2010-2011 第二学期,安徽工业大学 光信息科学与技术,20,2.3 MATLAB的基本矩阵运算,特殊行向量创建方法线性等间距初值:步长:终值函数linspacelinspace(x1,x2)linspace(x1,x2,N)函数logspace,2010-2011 第二学期,安徽工业大学 光信息科学与技术,21,2.3 MATLAB的基本矩阵运算,矩阵创建的其他方法现有矩阵增加或提取元素读取数据文件,如TXT、Excel、Mat文件利用特殊矩阵生成函数全0矩阵:zeros()全1矩阵:ones()单位矩阵:eye(),2010-2011 第二学期,安徽工业大学 光信息科学与技术,22,2.3 MATLAB的基本矩阵运算,矩阵的基本运算四则运算:+-*/点乘(点除):.*./.矩阵乘方:矩阵元素乘方:.矩阵的转置:注意点运算对象为矩阵元素运算勿忘使用“点”,2010-2011 第二学期,安徽工业大学 光信息科学与技术,23,2.4 MATLAB的矩阵运算函数,矩阵元素的运算函数(Array Operation)abs、sqrt、sin、cos函数可以在矩阵上直接使用,只不过对矩阵的每个元素进行处理,sqrt(a)ans=1.0000 1.4142 1.7321 2.0000 2.2361 2.4495,a=1 2 3;4 5 6a=1 2 3 4 5 6,2010-2011 第二学期,安徽工业大学 光信息科学与技术,24,2.4 MATLAB的矩阵元素运算函数,2010-2011 第二学期,安徽工业大学 光信息科学与技术,25,2.4 MATLAB的矩阵元素运算函数,2010-2011 第二学期,安徽工业大学 光信息科学与技术,26,2.4 MATLAB的矩阵元素运算函数,2010-2011 第二学期,安徽工业大学 光信息科学与技术,27,2.5 MATLAB关系运算=,关系运算符任何非零数值都为真(1)用于流程控制举例:,2010-2011 第二学期,安徽工业大学 光信息科学与技术,28,2.5 MATLAB逻辑运算,逻辑运算符用于流程控制位方式的逻辑运算函数,第三章MATLAB的基本绘图,一图胜万语,EDOF CPM 3D-MTF,2010-2011 第二学期,安徽工业大学 光信息科学与技术,30,3.1 MATLAB的绘图工作空间绘图,2010-2011 第二学期,安徽工业大学 光信息科学与技术,31,3.2 MATLAB的绘图二维绘图函数,绘制二维图形的命令help graph2d 充分利用网络和MATLAB帮助文件学习使用MATLAB函数,2010-2011 第二学期,安徽工业大学 光信息科学与技术,32,3.2 MATLAB的绘图二维绘图函数,基本绘图函数为plot(x1,y1,LineSpec1,x2,y2,LineSpec2,)函数说明:x1,y1分别为x轴和y轴坐标值LineSpec1为曲线特性选项参数,如曲线的颜色、线型、标识符号等,用单引号括起来以逐点折线相连的方式绘制二维图形在MATLAB Help系统中熟悉Plot命令,2010-2011 第二学期,安徽工业大学 光信息科学与技术,33,3.2 MATLAB的绘图二维绘图函数,绘图举例曲线特性参数的设置方法参照帮助系统,x=0:0.1*pi:2*pi;y=sin(x);z=cos(x);plot(x,y,-bo,x,z,:ms),2010-2011 第二学期,安徽工业大学 光信息科学与技术,34,3.2 MATLAB的绘图二维绘图函数,LineSpec选项,2010-2011 第二学期,安徽工业大学 光信息科学与技术,35,3.2 MATLAB的绘图二维绘图函数,图形标注函数xlabel和ylabel:x轴和y轴名称标注title:图形名称标注text:图形中文字标注gtext:图形中文字标注(用鼠标确定放置位置)legend:图形中各曲线标注,2010-2011 第二学期,安徽工业大学 光信息科学与技术,36,3.2 MATLAB的绘图二维绘图函数,图形标注举例注意转义字符的输入,xlabel(-pi leq Theta leq pi)ylabel(sin(Theta)title(Plot of sin(Theta)text(-pi/4,sin(-pi/4),leftarrow sin(-pidiv4),HorizontalAlignment,left),xlabel,ylabel,title,text,2010-2011 第二学期,安徽工业大学 光信息科学与技术,37,3.2 MATLAB的绘图二维绘图函数,其他重要相关命令(对照help自学)axes:设置坐标轴hold:hold on 保持当前绘图窗口继续做图grid:grid on/off打开/关闭图形网格figure:打开/创建图形窗口,如figure(4)subplot(m,n,p):将绘图窗口分成mn个子区域,在第p个区域绘制图形;close:关闭当前图形窗口其他二维绘图函数:fplot、ezplot、,2010-2011 第二学期,安徽工业大学 光信息科学与技术,38,3.2 MATLAB的绘图步骤总结,准备数据设置当前绘图区绘制图形设置曲线特征和标记特征设置坐标轴和网格线属性标注图形保存和导出图形,2010-2011 第二学期,安徽工业大学 光信息科学与技术,39,3.3 MATLAB的绘图三维绘图函数,绘制三维图形的命令help graph3d三维图形的特征控制Color controlLightingColor mapsTransparencyAxis controlViewpoint controlCamera control,2010-2011 第二学期,安徽工业大学 光信息科学与技术,40,3.3 MATLAB的绘图三维曲线绘制,三维曲线绘制函数为plot3(x1,y1,z1,LineSpec1,x2,y2,z2,LineSpec2,)函数说明:x1,y1,z1分别为x轴、y轴和z轴坐标值LineSpec1为曲线特性选项参数,同plot中参数以逐点折线相连的方式绘制三维图形,2010-2011 第二学期,安徽工业大学 光信息科学与技术,41,3.3 MATLAB的绘图三维曲线绘制,绘图举例,x=0:0.1*pi:10*pi;y=sin(x);z=cos(x);plot3(x,y,z,-b)grid onxlabel(x);ylabel(sinx);zlabel(cosx);title(Example 3D curve),2010-2011 第二学期,安徽工业大学 光信息科学与技术,42,3.3 MATLAB的绘图三维网格曲面绘制,三维网格曲面绘制函数为mesh(X,Y,Z,C)函数说明:X,Y,Z都是矩阵参数C表示网格曲面颜色分布创建网格曲面,2010-2011 第二学期,安徽工业大学 光信息科学与技术,43,3.3 MATLAB的绘图三维网格曲面绘制,绘图举例,x=-2:0.1:2;y=-3:0.1:3;X,Y=meshgrid(x,y);Z=X.2+Y.2;mesh(X,Y,Z)xlabel(x);ylabel(y);zlabel(z),2010-2011 第二学期,安徽工业大学 光信息科学与技术,44,3.3 MATLAB的绘图meshgrid函数应用,X,Y=meshgrid(1:3,4:7),Y=4 4 4 5 5 5 6 6 6 7 7 7,X=1 2 3 1 2 3 1 2 3 1 2 3,(x,y)=(1,4)(2,4)(3,4)(1,5)(2,5)(3,5)(1,6)(2,6)(3,6)(1,7)(2,7)(3,7),f,2010-2011 第二学期,安徽工业大学 光信息科学与技术,45,3.3 MATLAB的绘图三维阴影曲面绘制,三维阴影曲面绘制函数为surf(X,Y,Z,C)函数说明:X,Y,Z都是矩阵参数C表示网格曲面颜色分布创建阴影曲面,2010-2011 第二学期,安徽工业大学 光信息科学与技术,46,3.3 MATLAB的绘图三维阴影曲面绘制,绘图举例,x=-2:0.1:2;y=-3:0.1:3;X,Y=meshgrid(x,y);Z=X.2+Y.2;surf(X,Y,Z)xlabel(x);ylabel(y);zlabel(z),2010-2011 第二学期,安徽工业大学 光信息科学与技术,47,3.3 MATLAB绘图网格和阴影曲面对比,网格曲面,阴影曲面,网格曲面的网格是彩色,并且根据z值改变;阴影曲面的网格是黑色,网格区域内用颜色填充;,2010-2011 第二学期,安徽工业大学 光信息科学与技术,48,3.4 MATLAB绘图其他图形绘制,直方图 hist柱状图 bar面积图 area饼图 pie火柴杆图 stem等高线图 contour向量图 quiver,第四章MATLAB的符号运算,2010-2011 第二学期,安徽工业大学 光信息科学与技术,50,4.1 MATLAB的符号运算介绍,符号数学工具箱:Symbolic Math Toolbox符号数学工具箱对字符串进行符号分析,不是基于数组的数值分析符号数学工具箱可以实现的功能多项式的合并、简化求解代数方程微分、积分、极限微分方程,2010-2011 第二学期,安徽工业大学 光信息科学与技术,51,4.2 MATLAB的符号运算符号表达式,符号表达式代表数字、函数、算子和变量的MATLAB字符串,或字符串数组符号数学与代数和微积分所学到的求解方法一样,2010-2011 第二学期,安徽工业大学 光信息科学与技术,52,4.3 MATLAB的符号运算符号对象建立,sym函数:用来建立单个符号量调用格式:符号量名=sym(符号字符串)符号字符串可以是常量、变量、函数或表达式举例:U=sym(3*x2+5*y+2*x*y+6)syms函数:定义多个符号变量调用格式:syms 符号变量1 符号变量2 变量间用空格隔开,不能用逗号举例:syms x y;U=3*x2+5*y+2*x*y+6;,2010-2011 第二学期,安徽工业大学 光信息科学与技术,53,4.4 MATLAB的符号运算四则运算,分解因式:factor(S)展开:expand(S)合并同类项:collect(S)化简:simplify(S),2010-2011 第二学期,安徽工业大学 光信息科学与技术,54,4.5 MATLAB的符号运算微分运算,diff:微分运算函数格式:diff(f,x,n)求解f关于x的n阶导数举例:f(x)=xsinx的一/二/三阶导数计算,2010-2011 第二学期,安徽工业大学 光信息科学与技术,55,4.5 MATLAB的符号运算积分运算,int:积分运算函数格式:int(f,x)求解f关于x的不定积分int(f,x,x0,x1)求解f关于x在x0 x1上的定积分举例:,2010-2011 第二学期,安徽工业大学 光信息科学与技术,56,4.6 MATLAB的符号运算其他运算,Help-符号数学工具箱-Function Reference,第五章MATLAB的编程,通过编程解决实际问题,语言是工具思路最重要,2010-2011 第二学期,安徽工业大学 光信息科学与技术,58,5.1 MATLAB的编程介绍,M文件编程:除了在命令窗口输入命令执行外,还可以向 C 语言一样采用编程方式;,文件名后缀为.m,2010-2011 第二学期,安徽工业大学 光信息科学与技术,59,5.1 MATLAB的编程介绍,M文件创建及M文件编辑器认识,2010-2011 第二学期,安徽工业大学 光信息科学与技术,60,5.1 MATLAB的编程介绍,M文件分类脚本(命令)文件:只是一些命令行的组合,其中的所有变量也成为工作变量空间的一部分。函数文件:单独功能的代码块,需要接受参数输入和输出,函数M文件具有独立的内部变量空间。MATLAB提供的大部分函数都用函数文件实现。,2010-2011 第二学期,安徽工业大学 光信息科学与技术,61,5.2 MATLAB的编程脚本文件编程,脚本文件注释语句消除命令定义变量功能实现结果显示,2010-2011 第二学期,安徽工业大学 光信息科学与技术,62,5.2 MATLAB的编程脚本文件编程,脚本文件的运行将脚本文件保存为*.m文件(上例为primeNumber.m)方式一:直接在M文件编辑器中点击“RUN”按钮方式二:在MATLAB命令窗口输入文件名并回车,2010-2011 第二学期,安徽工业大学 光信息科学与技术,63,5.2 MATLAB的编程脚本文件编程,脚本文件编程提示:用clear、close all等语句开始,清除原有的变量和图形注释行以%号开始,增加程序的可读性如果不想显示结果,语句结尾用分号,2010-2011 第二学期,安徽工业大学 光信息科学与技术,64,5.3 MATLAB的编程函数文件编程,函数文件函数声明帮助文字函数实现注释部分,2010-2011 第二学期,安徽工业大学 光信息科学与技术,65,5.3 MATLAB的编程函数文件编程,函数文件的使用方法在脚本文件中进行调用直接在命令窗口进行调用,2010-2011 第二学期,安徽工业大学 光信息科学与技术,66,5.3 MATLAB的编程函数文件编程,函数文件编程提示:函数文件由function起头,后面跟函数名;函数名必须与文件名相同输出变量多于一个时,要用方括号,举例:function x,y,z=fun(a,b,c),2010-2011 第二学期,安徽工业大学 光信息科学与技术,67,5.4 MATLAB的编程流程控制语句,分支控制语句if结构switch结构循环控制语句for循环while循环continue语句break语句程序终止语句:return语句,2010-2011 第二学期,安徽工业大学 光信息科学与技术,68,5.4.1 MATLAB的编程分支控制-if结构,if-else结构:,if logical_expression1 commands1elseif logical_expression2 commands2elseif else commandsend,和C语言原理一致注意语法格式的差异elseif和else语句为可选语句,2010-2011 第二学期,安徽工业大学 光信息科学与技术,69,5.4.1 MATLAB的编程分支控制-switch结构,switch结构:,switch 表达式(标量或字符串)case 值1 语句组A case 值2 语句组B.otherwise 语句组Nend,otherwise语句为可选语句和C语言的重要语法区别:每一个case语句后面不需要break语句跳出;,2010-2011 第二学期,安徽工业大学 光信息科学与技术,70,5.4.2 MATLAB的编程循环控制-for循环,for循环:一般用于已知循环次数的情况,for index=start:increment:end commandend,index为循环变量,increment为增量,默认值为1index可以赋值为数组A,第n次循环时,index被赋值为A(:,n),即A的第n列元素MATLAB中循环效率很低,尽量充分使用数组结构,2010-2011 第二学期,安徽工业大学 光信息科学与技术,71,5.4.2 MATLAB的编程循环控制-while循环,while循环:一般用于已知循环结束条件情况,while expression commondsend,表达式expression为真,就执行语句,直至结果为假,2010-2011 第二学期,安徽工业大学 光信息科学与技术,72,5.4.3 MATLAB的编程其他控制语句,continue语句用在循环中,表示本次循环不再继续向下执行,进入下一次循环;break语句退出循环return语句终止程序运行,用于需要立即退出的特殊情况等,2010-2011 第二学期,安徽工业大学 光信息科学与技术,73,5.5 MATLAB的编程交互命令,echo on/off:在执行M文件每行程序前先显示其内容keyboard:程序执行到此暂停,在屏幕上显示字符K,用户可以在命令窗进行任何操作,最后键入字符串return,恢复运行原来的程序。input(提示符):程序执行到此暂停,屏幕显示引号中的字符串,要求用户输入数据。数据输入后,程序继续运行。举例:N=input(N=);c(control-c):强行停止程序运行的命令,2010-2011 第二学期,安徽工业大学 光信息科学与技术,74,5.6 MATLAB的编程举例光线追迹,例:用MATLAB编程作图分析不同颜色的平行光轴的光线通过平凸透镜聚焦的光路情况。,中心厚度为3mm凸面曲率半径为100mm,波长 折射率 480.0-1.523-蓝色 550.0-1.519-绿色 632.8-1.515-红色,2010-2011 第二学期,安徽工业大学 光信息科学与技术,75,5.6 MATLAB的编程举例光线追迹,光学分析 以球心为坐标原点,1.光线经过透镜的第一个面后方向不变2.光线经过透镜第二个面时发生折射:,假设平行入射光距离光轴的距离为h 入射角为:折射定律:光线在透镜中经过的距离为:,2010-2011 第二学期,安徽工业大学 光信息科学与技术,76,5.6 MATLAB的编程举例光线追迹,编程思路绘制平凸透镜绘制平面:确定X和Y数组用plot命令实现绘制凸面:直接用fplot命令绘制绘制多条平行光线通过透镜前后的直线透镜曲面前的光线:plot经过透镜曲面后的折射光线:plot,2010-2011 第二学期,安徽工业大学 光信息科学与技术,77,5.6 MATLAB的编程举例光线追迹,光线追迹部分编程要考虑的内容入射光线的波长可以改变入射光线的视场范围可以改变要绘制的光线的数目可以调整绘制的光线的颜色根据波长不同可以进行设置光线追迹设置成函数 raysPlot(DL,DH,ND,R,d,n,str)DL/DH:确定考察的光线的范围;ND:光线数目设置 n:入射光线波长所对应的折射率str:设置光线绘制的特性,类似于plot中的参数设置,2010-2011 第二学期,安徽工业大学 光信息科学与技术,78,5.6 MATLAB的编程举例光线追迹,程序模块实现编写绘制平凸透镜的函数,参数为R,d编写光线经过平凸透镜前后光路绘制的函数主程序中根据实际需要调用前面编写的两个函数,2010-2011 第二学期,安徽工业大学 光信息科学与技术,79,2010-2011 第二学期,安徽工业大学 光信息科学与技术,80,5.6 MATLAB的编程举例绘制透镜,2010-2011 第二学期,安徽工业大学 光信息科学与技术,81,2010-2011 第二学期,安徽工业大学 光信息科学与技术,82,2010-2011 第二学期,安徽工业大学 光信息科学与技术,83,5.6 MATLAB的编程举例-结果,2010-2011 第二学期,安徽工业大学 光信息科学与技术,84,5.7 MATLAB的编程提示,程序不是一遍就写好的,是多次不断修改、优化得到的;代码编写过程中要不断进行代码调试和验证;编程之前一定要理清代码编写的大的思路;,2010-2011 第二学期,安徽工业大学 光信息科学与技术,85,在平时的学习及今后的科研或工作中进行数学计算时,积极使用MATLAB解决遇到的问题所有编程语言的根本不是编程语法,是思路!编程语言的学习是一个逐渐提高的过程,提高技能的唯一方法就是多使用!MATLAB语言内容丰富,课堂的内容仅仅是抛砖引玉,想知道某个功能是否有对应函数时,应充分利用互联网(网页搜索或论坛),再就是充分利用好MATLAB提供的强大的Help!,关于Matlab的建议,END,学有所获学以致用,