用Matlab生成一个圆孔夫郎和费衍射仿真
时间: 2023-05-18 14:05:45 浏览: 161
圆孔圆环夫琅禾费衍射实验的Matlab仿真设计.pdf
5星 · 资源好评率100%
以下是使用Matlab生成圆孔夫郎和费衍射的示例代码:
% 定义参数
wavelength = 0.6328e-6; % 波长
k = 2*pi/wavelength; % 波数
a = 1e-3; % 圆孔半径
D = 10e-3; % 光屏直径
L = 1; % 距离
N = 512; % 网格数
% 生成网格
x = linspace(-D/2, D/2, N);
y = linspace(-D/2, D/2, N);
[X, Y] = meshgrid(x, y);
% 生成圆孔
r = sqrt(X.^2 + Y.^2);
mask = r <= a;
% 计算夫郎和衍射
U = mask.*exp(1i*k*L*sqrt(X.^2 + Y.^2))/(1i*wavelength*L);
% 绘制夫郎和衍射图像
figure;
subplot(1,2,1);
imagesc(x*1e3, y*1e3, abs(U).^2);
axis square;
xlabel('x (mm)');
ylabel('y (mm)');
title('Fraunhofer diffraction pattern of a circular aperture');
% 计算费衍射
U = mask.*exp(-1i*k*sqrt(X.^2 + Y.^2))/(1i*wavelength*L);
% 绘制费衍射图像
subplot(1,2,2);
imagesc(x*1e3, y*1e3, abs(U).^2);
axis square;
xlabel('x (mm)');
ylabel('y (mm)');
title('Fresnel diffraction pattern of a circular aperture');
在这个示例中,我们首先定义了一些参数,包括波长、圆孔半径、光屏直径、距离和网格数。然后,我们生成一个网格,并在其中生成一个圆孔。接下来,我们计算夫郎和衍射和费衍射,并绘制它们的图像。最后,我们使用subplot函数将两个图像放在同一个图像中。
阅读全文