matlab夫琅禾费圆孔衍射仿真
时间: 2023-10-04 16:14:12 浏览: 81
夫琅禾费衍射是一种常见的光学现象,用于描述光通过圆形孔径时的衍射效应。在Matlab中,可以使用Fraunhofer衍射公式来模拟夫琅禾费衍射,步骤如下:
1. 定义圆孔的半径和波长。
```matlab
r = 0.1; % 圆孔半径(单位:米)
lambda = 0.01; % 波长(单位:米)
```
2. 定义观察点的位置和数量。
```matlab
N = 1000; % 观察点数量
x = linspace(-0.2, 0.2, N); % x坐标数组
y = linspace(-0.2, 0.2, N); % y坐标数组
[X, Y] = meshgrid(x, y); % 生成网格
```
3. 计算每个观察点的光强度。
```matlab
k = 2 * pi / lambda; % 波数
theta = atan2(Y, X); % 观察点到圆心的极角
r_obs = sqrt(X.^2 + Y.^2); % 观察点到圆心的距离
hankel = besselj(1, k * r_obs) ./ r_obs; % 外向Hankel函数
amplitude = (2 * besselj(1, k * r) ./ (k * r)) .* exp(1i * k * r); % 光源的振幅
intensity = abs(amplitude .* hankel).^2; % 光强度
```
4. 绘制光强度分布图。
```matlab
figure;
imagesc(x, y, intensity);
axis image;
colormap jet;
colorbar;
title('Fraunhofer Diffraction from a Circular Aperture');
xlabel('x (m)');
ylabel('y (m)');
```
可以看到,生成了一个圆形衍射图案。
完整代码如下:
```matlab
r = 0.1; % 圆孔半径(单位:米)
lambda = 0.01; % 波长(单位:米)
N = 1000; % 观察点数量
x = linspace(-0.2, 0.2, N); % x坐标数组
y = linspace(-0.2, 0.2, N); % y坐标数组
[X, Y] = meshgrid(x, y); % 生成网格
k = 2 * pi / lambda; % 波数
theta = atan2(Y, X); % 观察点到圆心的极角
r_obs = sqrt(X.^2 + Y.^2); % 观察点到圆心的距离
hankel = besselj(1, k * r_obs) ./ r_obs; % 外向Hankel函数
amplitude = (2 * besselj(1, k * r) ./ (k * r)) .* exp(1i * k * r); % 光源的振幅
intensity = abs(amplitude .* hankel).^2; % 光强度
figure;
imagesc(x, y, intensity);
axis image;
colormap jet;
colorbar;
title('Fraunhofer Diffraction from a Circular Aperture');
xlabel('x (m)');
ylabel('y (m)');
```