⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 body.m

📁 运用Matlab模拟波动光光学的实验现象
💻 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 + -