Matlab绘制单缝、光栅、圆孔、矩孔衍射图样

理论知识可以参考下面的这篇文章。
https://blog.csdn.net/Carifee/article/details/119831170?spm=1001.2014.3001.5501

1.matlab绘制单缝衍射图样

方法1:

%%单缝衍射%%
clear
lambda=500e-9;  %波长
a=1e-3;     %缝宽
f=1;    %透镜到像面的距离
ym=6*lambda*f/a;       %屏幕上y的范围
n=51;   %屏幕上的取样点数,相当于
ys=linspace(-ym,ym,n);      %划定取样数组
yp=linspace(0,a,n);     %将缝宽也划定数组
for i=1:n
sinphi=ys(i)/f;
u=pi*yp*sinphi/lambda;
sumcos=sum(cos(u));
sumsin=sum(sin(u));
B(i,:)=(sumcos^2+sumsin^2)/n^2;
end
N=255;		%确定灰度的等级
Br=(B/max(B))*N;
subplot(1,2,1)
image(ym,ys,Br);
colormap(hot(N)); %色调处理
subplot(1,2,2)
plot(B,ys,'k');

结果:
在这里插入图片描述方法2:

clc
clear
lambda=632.8e-9;    %波长
xmax=0.02;     %x轴宽度
def=1e-4;       %步长
x=-xmax:def:xmax;
y=-xmax:def:xmax;
lenm=length(x);
lenn=length(y);
for m=1:lenm
    for n=1:lenn
        alpha=pi*x(m)/(lambda);
        beta=pi*y(n)/(lambda);
        I(m,n)=((sin(beta))/(beta))^2;
    end
end
I=I/(max(max(I)));
[X,Y]=meshgrid(x,y);
figure
imshow(255*I);
xlabel('x');
ylabel('y');
figure
mesh(x,y,I)
xlabel('x');
ylabel('y');
zlabel('光强');

结果
在这里插入图片描述

2. matlab绘制光栅衍射图样

%%光栅衍射%%
clear
lamda=500e-9;   %波长
N=2;    %缝数 ,可以随意更改变换
a=2e-4;     %缝宽
f=5;        %透镜到像面的距离
d=5*a;      %光栅常数
ym=2*lamda*f/a;     %屏幕上y的范围
xs=ym;
n=1001;
ys=linspace(-ym,ym,n);
for i=1:n
  sinphi=ys(i)/f; 
  alpha=pi*a*sinphi/lamda;
  beta=pi*d*sinphi/lamda;
  B(i,:)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;
  B1=B/max(B);
end
NC=255; %确定灰度的等级
Br=(B/max(B))*NC;
subplot(1,2,1)
image(xs,ys,Br);
colormap(hot(NC)); %色调处理
subplot(1,2,2)
plot(B1,ys,'k');

结果:
在这里插入图片描述

3.matlab绘制圆孔衍射图样

clc
clear
lambda=632.8e-9;        %波长
r=0.0005;       %圆孔半径
f=1;        %焦距
def=1e-5;
xm=6000*lambda*f;
[x,y]=meshgrid(-xm:def:xm);
s=2*pi*r*sqrt(x.^2+y.^2)./(lambda*f);
I=4*(besselj(1,s)./(s+eps)).^2;

figure
plot(-s,I,s,I);
xlabel('s');
ylabel('光强');
figure
imshow(I*255)       %二维图
xlabel('x');
ylabel('y');
figure
mesh(x,y,I)     %三维图
xlabel('x');
ylabel('y');
zlabel('光强')

结果:
在这里插入图片描述

4.matlab绘制矩孔衍射图样

方法1:

clear
lamda=500e-9;
a=1e-3;
b=1e-3;
f=1;
m=500;
ym=8000*lamda*f;
ys=linspace(-ym,ym,m);
xs=ys;
n=255;
for i=1:m
       sinth1=xs(i)/sqrt(xs(i)^2+f^2);
       sinth2=ys./sqrt(ys.^2+f^2);
       angleA=pi*a*sinth1/lamda;
       angleB=pi*b*sinth2./lamda;
B(:,i)=(sin(angleA).^2.*sin(angleB).^2.*5000./(angleA.^2.*angleB.^2));
end
subplot(1,2,1)
image(xs,ys,B)
colormap(gray(n))
subplot(1,2,2)
plot(B(m/2,:),ys,'k')

结果:
在这里插入图片描述
方法2:

clc
clear
a=0.0005;       %长
b=0.0005;       %宽
lambda=632.8e-9;    %波长
f=1;        %焦距
xm=6000*lambda*f;
def=1e-5;
I0=1;
[x,y]=meshgrid(-xm:def:xm);
alpha=(pi*a*x)/(f*lambda);
beta=(pi*b*y)/(f*lambda);
I=I0*(sin(alpha).^2.*sin(beta).^2./((alpha.^2+eps).*(beta.^2+eps)));
figure
imshow(I*255);
xlabel('x');
ylabel('x');
figure
mesh(x,y,I)
xlabel('x');
xlabel('x');
zlabel('光强');

结果:
在这里插入图片描述

  • 59
    点赞
  • 320
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
以下是矩孔衍射单缝衍射圆孔衍射圆孔衍射MATLAB仿真代码示例: 矩孔衍射代码示例: ```matlab % 定义参数 wavelength = 632.8e-9; % 光波长 distance = 1; % 光屏到观察平面的距离 a = 10e-6; % 矩形孔宽度 b = 20e-6; % 矩形孔高度 screen_size = 0.1; % 观察平面大小 % 定义空间坐标 N = 1000; % 空间采样点数 x = linspace(-screen_size/2, screen_size/2, N); y = linspace(-screen_size/2, screen_size/2, N); [X, Y] = meshgrid(x, y); % 计算衍射场 field_rectangular = (sin(pi*a*X/wavelength)./ (pi*a*X/wavelength)) .* (sin(pi*b*Y/wavelength)./ (pi*b*Y/wavelength)) .* exp(1i*2*pi*distance/wavelength*sqrt(X.^2 + Y.^2)); % 绘制衍射图样 figure; imagesc(x, y, abs(field_rectangular).^2); colormap('gray'); axis square; title('矩孔衍射图样'); xlabel('x'); ylabel('y'); ``` 单缝衍射代码示例: ```matlab % 定义参数 wavelength = 632.8e-9; % 光波长 distance = 1; % 光屏到观察平面的距离 slit_width = 10e-6; % 缝宽 screen_size = 0.1; % 观察平面大小 % 定义空间坐标 N = 1000; % 空间采样点数 x = linspace(-screen_size/2, screen_size/2, N); y = linspace(-screen_size/2, screen_size/2, N); [X, Y] = meshgrid(x, y); % 计算衍射场 field_single_slit = slit_width * sinc(X/wavelength) .* exp(1i*2*pi*distance/wavelength*sqrt(X.^2 + Y.^2)); % 绘制衍射图样 figure; imagesc(x, y, abs(field_single_slit).^2); colormap('gray'); axis square; title('单缝衍射图样'); xlabel('x'); ylabel('y'); ``` 圆孔衍射代码示例: ```matlab % 定义参数 wavelength = 632.8e-9; % 光波长 distance = 1; % 光屏到观察平面的距离 radius = 10e-6; % 圆孔半径 screen_size = 0.1; % 观察平面大小 % 定义空间坐标 N = 1000; % 空间采样点数 x = linspace(-screen_size/2, screen_size/2, N); y = linspace(-screen_size/2, screen_size/2, N); [X, Y] = meshgrid(x, y); % 计算衍射场 r = sqrt(X.^2 + Y.^2); field_circular = (2*besselj(1, (2*pi*radius/wavelength)*r) ./ (2*pi*radius/wavelength*r)) .* exp(1i*2*pi*distance/wavelength*r); % 绘制衍射图样 figure; imagesc(x, y, abs(field_circular).^2); colormap('gray'); axis square; title('圆孔衍射图样'); xlabel('x'); ylabel('y'); ``` 圆孔衍射的代码示例与单缝衍射的代码示例相似,只是在计算衍射场时使用了不同的数学函数。在圆孔衍射的代码示例中,我们使用了贝塞尔函数(besselj)来计算衍射场。 通过运行这些代码示例,你可以分别观察到矩孔衍射单缝衍射圆孔衍射的图样。这些图样可以帮助你理解和验证不同孔径的衍射现象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Carifee.

您的鼓励是我创作最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值