Matlab:实现夫琅禾费圆孔衍射仿真

绘图结果

原理

%% 夫琅禾费衍射例子——经过圆孔
clc;             % 清除命令行窗口
clear all;       % 清除工作区中的所有变量
close all;       % 关闭所有打开的图形窗口

% 参数设置
L = 0.2;         % 计算区域的物理尺寸 (m)
N = 200;         % 网格点的数量
dx = L / N;      % 网格的空间分辨率
x = linspace(-L/2, L/2, N); % x方向的坐标
y = x;                      % y方向的坐标,与x相同
[X, Y] = meshgrid(x, y);    % 创建二维网格坐标,用于计算

% 圆孔参数和波长设置
w = 1e-3;            % 圆孔的半径 (m)
lambda = 632.8e-9;   % 光波的波长 (m),红光
z = 50;              % 圆孔到屏幕的距离 (m)
k = 2 * pi / lambda; % 波数,k = 2π/λ
lz = lambda * z;     % λz,用于后续计算

% 圆孔处的波场计算
XY = X.^2 + Y.^2; % 计算 x^2 + y^2,用于定义网格上每一点到圆心的距离的平方
U1 = w^2 .* (jinc(w/lz * sqrt(XY))); % 圆孔衍射后的初始场分布,利用jinc函数

% 夫琅禾费衍射公式的实现
H = exp(1i * k * z) / (1i * lambda * z) .* exp(1i * k * (XY) / (2 * z)); % 衍射传递函数
U2 = U1 .* H; % 圆孔后场的远场表示

% 计算光强分布
I2 = (U1 ./ lz).^2; % 计算光场的强度分布

% 绘制结果
figure('color','w') % 创建一个白色背景的图形窗口
subplot(1,2,1);
imagesc(x, y, nthroot(I2, 3)); % 绘制光强分布图,使用三次方根拉伸颜色显示以增强对比度
colormap('gray') % 使用灰度色表
xlabel('x(m)');  % 设置x轴标签
ylabel('y(m)');  % 设置y轴标签
axis square;     % 使用方形轴
axis xy;         % 保持x-y坐标系的方向
title('通过小孔的夫琅禾费衍射');

subplot(1,2,2);
plot(x,I2(N/2,:));  % x 轴上的某一行的光强分布
% plot(y,I2(:,N/2)); % y 轴上的某一列的光强分布
xlabel('x(m)');   % 设置x轴标签
ylabel('光强度(W/m^2)'); % 设置y轴标签
title('x轴轮廓');
axis square;      % 使用方形轴

% 定义jinc函数
function [out] = jinc(x)
    % 计算 jinc 函数的值,jinc(x) = J1(2πx)/x
    mask = (x ~= 0);          % 找到 x 中所有不等于 0 的元素的位置
    out = pi * ones(size(x)); % 初始化输出为 π
    out(mask) = besselj(1, 2 * pi * x(mask)) ./ x(mask); % 对 x 不为 0 的位置计算 jinc 函数值
end
夫琅禾费衍射是一种重要的光学现象,在实际应用中广泛使用。在MATLAB中进行夫琅禾费圆孔衍射仿真可以使用以下步骤: 1. 定义圆孔半径和波长 首先,定义夫琅禾费圆孔的半径和光的波长: ``` r = 0.1; % 圆孔半径 lambda = 0.5; % 光的波长 ``` 2. 定义衍射屏幕 使用 `meshgrid` 函数生成一个网格点矩阵,并根据矩阵大小定义衍射屏幕的尺寸和分辨率: ``` N = 1000; % 衍射屏幕像素数 L = 2; % 衍射屏幕尺寸 dx = L/N; % 衍射屏幕分辨率 x = (-L/2:dx:L/2-dx); % 衍射屏幕横坐标向量 y = x; % 衍射屏幕纵坐标向量 [X,Y] = meshgrid(x,y); % 生成网格点矩阵 ``` 3. 计算衍射场 根据夫琅禾费衍射的公式,计算出每个像素点处的衍射光场: ``` k = 2*pi/lambda; % 光的波数 r_xy = sqrt(X.^2 + Y.^2); % 衍射屏幕上每个像素点到圆心的距离 theta_xy = atan2(Y,X); % 衍射屏幕上每个像素点到圆心的极角 u = (r_xy <= r); % 圆孔内部光强为1,外部为0 u = u .* exp(1j*k*r_xy.*sin(theta_xy)); % 夫琅禾费衍射公式 ``` 4. 显示结果 使用 `imagesc` 函数将计算得到的衍射光强度矩阵可视化: ``` I = abs(u).^2; % 衍射光强 figure; imagesc(x,y,I); axis equal tight; colormap(jet); xlabel('x'); ylabel('y'); title('夫琅禾费圆孔衍射'); ``` 完整代码如下: ``` r = 0.1; % 圆孔半径 lambda = 0.5; % 光的波长 N = 1000; % 衍射屏幕像素数 L = 2; % 衍射屏幕尺寸 dx = L/N; % 衍射屏幕分辨率 x = (-L/2:dx:L/2-dx); % 衍射屏幕横坐标向量 y = x; % 衍射屏幕纵坐标向量 [X,Y] = meshgrid(x,y); % 生成网格点矩阵 k = 2*pi/lambda; % 光的波数 r_xy = sqrt(X.^2 + Y.^2); % 衍射屏幕上每个像素点到圆心的距离 theta_xy = atan2(Y,X); % 衍射屏幕上每个像素点到圆心的极角 u = (r_xy <= r); % 圆孔内部光强为1,外部为0 u = u .* exp(1j*k*r_xy.*sin(theta_xy)); % 夫琅禾费衍射公式 I = abs(u).^2; % 衍射光强 figure; imagesc(x,y,I); axis equal tight; colormap(jet); xlabel('x'); ylabel('y'); title('夫琅禾费圆孔衍射'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值