MATLAB仿真光的衍射(六)

 注意到之前的代码中,都设置了光波长lambda的值,且是一个定值。

但我们生活包括实验中用到的光源,几乎不可能是完全的单色光。

以太阳光为例,白光就是混合了多种颜色光的光源,可以在MATLAB中用工具包找到白光波长和颜色的关系:

sRGB = spectrumRGB(400:0.5:700);
figure
imshow(repmat(sRGB,[100 1 1]))

结果:

可以看出在白光中(我们设置的)400-700nm光的颜色和波长的对应关系。

仿真工具包下载网址:

https://ww2.mathworks.cn/matlabcentral/fileexchange/7021-spectral-and-xyz-color-functions

幸运的是,我们可以把混合的光分成不同波长的光束,分别计算并求和。
以白光的双缝干涉为例,以下是程序代码:

clear
d = 0.08e-3;
L = 1;
H = 0.1;
ScreenX = 1048;
ScreenY = 350;

 

lambda = 400:700;%波长不再是单一的
sRGB = spectrumRGB(lambda);%波长对应了一个RGB的数值
lambda = lambda*1e-9;

x01 = d/2;
x02 = -x01;
x = linspace(-H/2,H/2,ScreenX);
R1 = sqrt((x-x01).^2+L^2);%和之前单色光的计算是一样的
R2 = sqrt((x-x02).^2+L^2);

Irgb = zeros(ScreenY,ScreenX,3);%光屏上的结果
Iw = zeros(ScreenY,ScreenX,3);%每一轮计算得到的单色光对应结果
for k = 1:length(lambda)
    A1 = exp(i*2*pi/lambda(k)*R1);
    A2 = exp(i*2*pi/lambda(k)*R2);
    I = (A1+A2).*conj(A1+A2);
    %得到该波长对应的双缝干涉光强分布
    Iw(:,:,1) = repmat(I*sRGB(1,k,1),[ScreenY 1 1]);
    Iw(:,:,2) = repmat(I*sRGB(1,k,2),[ScreenY 1 1]);
    Iw(:,:,3) = repmat(I*sRGB(1,k,3),[ScreenY 1 1]);
    %分解成RGB的红绿蓝三色光
    %这是一个三维的矩阵,第三个维度代表RGB
    Irgb = Irgb+Iw;
    Iw  = [];
end

II = Irgb/max(max(max(Irgb)));
figure
subplot(2,1,1)
imshow(II)

Igray = rgb2gray(II);
Igray = Igray/max(max(Igray));
subplot(2,1,2)
plot(x,Igray(1,:))
ylabel('相对光强')
xlabel('x/m')

结果:

 可以看出,不同颜色的光在经过双缝后在光屏上形成不同位置的条纹,这是因为不同波长光的明纹位置不同,类似于我们常说的色散现象。

同时,在中心位置的光强分布图中可以得出结论,在白光的双缝干涉仿真结果中,没有哪一个位置的光强度为0。

单色光双缝干涉时光强为0的位置,是因为在该位置光干涉相消,但是对另一波长的光,干涉相消不再存在。

整体的光强分布图类似于以x=0为对称轴的震荡

对于白光单缝衍射,我们可以用同样的方法进行分析:

d = 0.05e-3;
L = 1;
H = 0.1;
ScreenX = 1048;
ScreenY = 350;

lambda = 400:700;
sRGB = spectrumRGB(lambda);%和上方一样,波长对应了一个RGB的数值
lambda = lambda*1e-9;

x = linspace(-H/2,H/2,ScreenX);
theta = atan(x/L);

Irgb = zeros(1,ScreenX,3);%光屏上的结果
Iw = zeros(1,ScreenX,3);%每一轮计算得到的单色光对应结果
for k = 1:length(lambda)
    I = (sin(d*pi*sin(theta)./lambda(k))./(d*pi*sin(theta)./lambda(k))).^2;
    %得到该波长对应的双缝干涉光强分布
    Iw(1,:,1) = I*sRGB(1,k,1);
    Iw(1,:,2) = I*sRGB(1,k,2);
    Iw(1,:,3) = I*sRGB(1,k,3);
    %分解成RGB的红绿蓝三色光
    %这是一个三维的矩阵,第三个维度代表RGB
    Irgb = Irgb+Iw;
    Iw  = [];
end

II = repmat(Irgb,[ScreenY 1 1])/max(max(max(Irgb)));
figure
subplot(2,1,1)
imshow(II)

Igray = rgb2gray(II);
subplot(2,1,2)
plot(x,Igray(1,:));
ylabel('相对光强');
xlabel('x/m')

结果:

注意,白光单缝衍射的第一极小值不为0。

来源:《高等光学仿真——光波导、激光》

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值