用Matlab生成菲涅尔衍射的代码,孔为圆形,矩形,和三角形
时间: 2024-03-16 09:41:12 浏览: 19
以下是用MATLAB生成不同形状孔的菲涅尔衍射的示例代码:
圆形孔的菲涅尔衍射:
```matlab
% 定义常数
wavelength = 0.5e-6; % 波长
k = 2*pi/wavelength; % 波数
a = 1e-3; % 孔半径
z = 1; % 距离
N = 1000; % 网格点数
% 创建网格
x = linspace(-a, a, N);
y = linspace(-a, a, N);
[X, Y] = meshgrid(x, y);
% 计算孔的透过函数
r = sqrt(X.^2 + Y.^2);
transmission = zeros(size(r));
transmission(r <= a) = 1;
% 计算衍射场
U = (1/(1i*wavelength*z))*exp(1i*k*z)*exp(1i*k*r.^2/(2*z)).*transmission;
I = abs(U).^2;
% 绘制图像
figure;
imagesc(x, y, I);
axis equal tight;
colormap('gray');
title('Circular Aperture Fraunhofer Diffraction Pattern');
xlabel('x');
ylabel('y');
```
矩形孔的菲涅尔衍射:
```matlab
% 定义常数
wavelength = 0.5e-6; % 波长
k = 2*pi/wavelength; % 波数
a = 1e-3; % 孔半径
z = 1; % 距离
N = 1000; % 网格点数
% 创建网格
x = linspace(-a, a, N);
y = linspace(-a, a, N);
[X, Y] = meshgrid(x, y);
% 计算孔的透过函数
transmission = zeros(size(X));
transmission(abs(X) <= a & abs(Y) <= a) = 1;
% 计算衍射场
U = (1/(1i*wavelength*z))*exp(1i*k*z)*exp(1i*k*(X.^2 + Y.^2)/(2*z)).*transmission;
I = abs(U).^2;
% 绘制图像
figure;
imagesc(x, y, I);
axis equal tight;
colormap('gray');
title('Square Aperture Fraunhofer Diffraction Pattern');
xlabel('x');
ylabel('y');
```
三角形孔的菲涅尔衍射:
```matlab
% 定义常数
wavelength = 0.5e-6; % 波长
k = 2*pi/wavelength; % 波数
a = 1e-3; % 孔半径
z = 1; % 距离
N = 1000; % 网格点数
% 创建网格
x = linspace(-a, a, N);
y = linspace(-a, a, N);
[X, Y] = meshgrid(x, y);
% 计算孔的透过函数
transmission = zeros(size(X));
transmission(Y <= -0.5*a*X & Y <= 0.5*a*X & Y >= -a*sqrt(3)/2) = 1;
% 计算衍射场
U = (1/(1i*wavelength*z))*exp(1i*k*z)*exp(1i*k*(X.^2 + Y.^2)/(2*z)).*transmission;
I = abs(U).^2;
% 绘制图像
figure;
imagesc(x, y, I);
axis equal tight;
colormap('gray');
title('Triangle Aperture Fraunhofer Diffraction Pattern');
xlabel('x');
ylabel('y');
```