www.gusucode.com > 基于MATLAB仿真白光光栅衍射实验模拟 > code2/基于MATLAB仿真白光光栅衍射实验模拟/main.m

    % 程序1,基于MATLAB仿真白光光栅衍射实验程序
clear;clc;
% 设置固定参数
lamda=[600,610,570,550,460,440,410]*1e-9;   %七色光的波长,单位米
RGB=[1,0,0;1,0.5,0;1,1,0;0,1,0;0,0,1;0.67,0,1]; %七色光的RGB值
d=4e-5; %光栅常数
% 设置可调参数
b=8e-6;N=18;    %透光缝宽及光栅单元数
Bright=80;  %亮度调节系数
% 设置仿真光屏参数
Irgb=zeros(150,1048,3); %仿真光屏矩阵(仿真结果RGB值图像矩阵,初值置零)
Iw=zeros(150,1048,3);   %用于记录各色光衍射结果的RGB值矩阵(初值置零)
% 计算白光光栅衍射的光强及对应的RGB值矩阵数据
%计算各色光光栅衍射光强分布
for k=1:7
    theta=(-0.015*pi:0.00001:0.015*pi); %衍射角度的变化范围
    phi=2*pi*d*sin(theta)/lamda(k);
    alpha=pi*b*sin(theta)/lamda(k);
    Idf=(sinc(alpha)).^2;   %单缝衍射的相对光强
    Idgs=(sin(N*phi/2)./sin(phi/2)).^2; %多光束干涉的相对光强
    I=Idf.*Idgs;    %光栅衍射的相对光强
%     计算与各色光衍射光强对应的RGB值矩阵数据
    for i=1:150
        Iw(i,:,1)=I*RGB(k,1);   %把红基色代码计入Iw矩阵红维度
        Iw(i,:,2)=I*RGB(k,2);   %把绿基色代码计入Iw矩阵绿维度
        Iw(i,:,3)=I*RGB(k,3);   %把蓝基色代码计入Iw矩阵蓝维度
    end
%     计算白光光栅衍射RGB值图像矩阵数据
    Irgb=Irgb+Iw;   %把各色光衍射的RGB值矩阵计入仿真结果RGB值图像矩阵中
    Iw=[];
end
% 显示白光光栅衍射实验仿真结果
Br=I/max(max(max(Irgb)));   %调整Irgb矩阵元素的最大值为1的系数
II=Irgb*Br*Bright;  %调节仿真图像亮度
imshow(II); %显示仿真结果
% 若可调参设置为:光栅单元数、透光缝宽及亮度调节系数,运行程序1,即可得出基于MATLAB仿真白光光栅衍射实验结果
% 若可调参设置为:N=2,b=8*1e-16m及Bright=1,运行程序1,即可得出基于MATLAB仿真白光双光束干涉实验结果