📄 body.m
字号:
%改变参量selection=get(handles.uipanel1,'selectedobject');NCLevels=255;switch get(selection,'tag') case 'Newton' R=get(handles.edit2,'value'); axes(handles.axes1); Lambda=get(handles.uipanel1,'userdata').*1e-4; x=-4:8/250:4;y=x; [X,Y]=meshgrid(x); r=sqrt(X.^2+Y.^2); I=cos(pi*(r.^2/R+Lambda/2)/Lambda).^2; colormap(gray(NCLevels)); Ir=I*NCLevels; image(x,y,Ir); title('牛顿环(单位:mm)'); axis square; axes(handles.axes2); plot(r(126,:),I(126,:),'k') title('干涉光强分布图'); xlabel('r/mm(环半径)'); ylabel('相对光强'); set(gca,'XLim',[0 3]); case'interferometry1' x = (0: 0.1: 2.5)';y = erf(x); warning off MATLAB:polyfit:RepeatedPointsOrRescale prompt={'干涉双缝间距(mm)'}; def={'2'}; dlgTitle='双缝间距'; lineNo=1; answer=inputdlg(prompt,dlgTitle,lineNo,def); a=str2num(char(answer));%a为缝宽 interferometry1_handle=findobj('tag','interferometry1'); set(interferometry1_handle,'userdata',a) if isempty(answer) h=msgbox('未输入参数','输入错误','warn'); else if a>0 %当a为正数时 Lambda=get(handles.uipanel1,'userdata').*1e-4;D=1000;%D为缝到屏的距离,a为缝宽,Lambda是波长 ym=1;xs=ym; n=501;ys=linspace(-ym,ym,n); r1=sqrt((ys-a/2).^2+D^2); r2=sqrt((ys+a/2).^2+D^2); phi=2*pi*(r2-r1)./Lambda; B=4*cos(phi/2).^2; Br=B/max(B)*NCLevels; axes(handles.axes1); image(xs,ys,Br'); title('干涉条纹'); colormap(gray(NCLevels)); axes(handles.axes2); plot(B,ys) title('干涉光强分布图'); xlabel('相对光强'); else h=msgbox('输入参数错误','输入错误','warn'); end end case'Michelson' x = (0: 0.1: 2.5)';y = erf(x); warning off MATLAB:polyfit:RepeatedPointsOrRescale prompt={'输入空气薄膜厚度(0.389-0.391)mm'}; def={'0.390'}; dlgTitle='空气薄膜厚度'; lineNo=1; answer=inputdlg(prompt,dlgTitle,lineNo,def); d=str2num(char(answer));%d为空气薄膜厚度 Michelson_handle=findobj('tag','Michelson'); set(Michelson_handle,'userdata',d) if isempty(answer) h=msgbox('未输入参数','输入错误','warn'); else if isnumeric(d)&length(d)==1&d>=0.389&d<=0.391 Lambad=get(handles.uipanel1,'userdata').*1e-4;f=200; xm=15; n=1.0; N=200; x=linspace(-xm,xm,N);y=x; [X,Y]=meshgrid(x); r=sqrt(X.^2+Y.^2); I=cos(2*pi*d*cos(atan(r/f))/Lambad).^ 2; I1=I*NCLevels; axes(handles.axes1); image(x,y,I1); title('干涉条纹'); colormap(gray(NCLevels)); axis square;axis off; axes(handles.axes2); plot(r(101,:),I(101,:),'k') title('干涉光强分布图'); xlabel('r/mm(环半径)'); ylabel('相对光强'); set(gca,'XLim',[0 15]); else h=msgbox('薄膜厚度错误','输入错误','warn'); d=[]; Michelson_handle=findobj('tag','Michelson'); set(Michelson_handle,'userdata',d) end end case 'radiobutton9' x = (0: 0.1: 2.5)';y = erf(x); warning off MATLAB:polyfit:RepeatedPointsOrRescale prompt={'光束条数'}; def={'4'}; dlgTitle='狭缝条数'; lineNo=1; answer=inputdlg(prompt,dlgTitle,lineNo,def); N=str2num(char(answer));%N为缝数 radiobutton9_handle=findobj('tag','radiobutton9'); set(radiobutton9_handle,'userdata',N) if isempty(answer) h=msgbox('未输入参数','输入错误','warn'); else a=N-round(N);%判断N是否为整数 if a==0&N>1 Lambda=get(handles.uipanel1,'userdata').*1e-4; d=2;f=1000;%f为缝后透镜焦距,a为缝宽,d为光栅常量,Lambda是波长 y=linspace(-1,1,500); theta=asin(y./sqrt(y.^2+f^2)); gramma=pi*d*sin(theta)/Lambda; I=(sin(N*gramma)./sin(gramma)).^2; I1=I/max(I);I2=I1'*NCLevels; axes(handles.axes1); image(I2); colormap(gray(NCLevels)); title('衍射图像') axis off; axes(handles.axes2); plot(I1,y) title('光强分布图'); xlabel('相对光强'); else msgbox('缝数应为大于1的整数','输入错误','warn'); N=[]; radiobutton9_handle=findobj('tag','radiobutton9'); set(radiobutton9_handle,'userdata',N) end end case'sslit' str = {'0.2', '1', '2'}; [s,v] = listdlg('Name','改变缝宽','PromptString','选择缝的宽度(mm)','SelectionMode','single',... 'ListString',str, 'fus',4, 'ListSize',[140 80]); if v==1 switch s case 1 a=0.2; case 2 a=1; case 3 a=2; end sslit_handle=findobj('tag','sslit'); set(sslit_handle,'userdata',a) Lambda=get(handles.uipanel1,'userdata').*1e-4;z=1000; ym=10;xs=ym; ny=101; ys=linspace(-ym,ym,ny); theta=asin(ys./sqrt(ys.^2+z.^2)); u=pi*a*sin(theta)/Lambda; b=sinc(u/pi).^2; br=(b/max(b))*NCLevels; axes(handles.axes1); image(xs,ys,br'*2.5); axis off; title('衍射条纹'); colormap(gray(NCLevels)); axes(handles.axes2); plot(b/max(b),ys); title('光强分布图'); xlabel('相对光强'); else a=[]; sslit_handle=findobj('tag','sslit'); set(sslit_handle,'userdata',a) h=msgbox('未输入参数','输入错误','warn'); end case'circular' circular_handle=findobj('tag','circular'); a=get(circular_handle,'userdata'); f=600;Lambda=get(handles.uipanel1,'userdata').*1e-4; x=linspace(-10,10,100);y=x; [X,Y]=meshgrid(x,y); theta=atan(sqrt(X.^2+Y.^2)/f); alpha=pi*a*sin(theta)/Lambda; I=(besselj(1,2*alpha)./alpha).^2;%一阶贝塞尔函数 Ir=NCLevels*I; colormap('gray'); axes(handles.axes1); image(x,y,Ir*20); title('衍射图像'); axis square;axis off; axes(handles.axes2); plot3(X,Y,I) title('光强分布三维图'); axis square;axis off; case'mslit' x = (0: 0.1: 2.5)';y = erf(x); warning off MATLAB:polyfit:RepeatedPointsOrRescale prompt={'狭缝条数(正整数)'}; def={'2'}; dlgTitle='狭缝条数'; lineNo=1; answer=inputdlg(prompt,dlgTitle,lineNo,def); N=str2num(char(answer));%N为缝数 mslit_handle=findobj('tag','mslit'); set(mslit_handle,'userdata',N) if isempty(answer) h=msgbox('未输入参数','输入错误','warn'); else a=N-round(N);%判断N是否为整数 if a==0&N>0 %当N为正整数时 Lambda=get(handles.uipanel1,'userdata').*1e-4;a=0.005;d=get(handles.edit5,'value')*a;f=64;%f为缝后透镜焦距,a为缝宽,d为光栅常量,Lambda是波长 y=linspace(-20,20,500); theta=asin(y./sqrt(y.^2+f^2)); beta=pi*a*sin(theta)/Lambda; gramma=pi*d*sin(theta)/Lambda; I=(sinc(beta/pi)).^2.*(sin(N*gramma)./sin(gramma)).^2; I1=I/max(I);I2=I1'*NCLevels; axes(handles.axes1); image(I2*2); colormap(gray(NCLevels)); title('衍射图像') axis off; axes(handles.axes2); plot(I1,y) title('光强分布图'); xlabel('相对光强'); else h=msgbox('请输入正确数字','输入错误','warn'); N=[]; mslit_handle=findobj('tag','mslit'); set(mslit_handle,'userdata',N) end endend;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -