学习编写Matlab代码完成数值模拟仿真,夫琅禾费衍射的数值模拟仿真: 单位强度的平行光(波长 λ)通过一个半斤为 r 的圆形孔径,孔径后放置一个焦距为 f 的透镜,在距离透镜 d 处的衍射图样。
时间: 2024-01-21 21:18:43 浏览: 65
夫琅禾费衍射的数值模拟仿真可以通过Matlab代码实现。以下是一个简单的Matlab代码示例:
```matlab
lambda = 0.01; % 波长
r = 1; % 孔径半径
f = 10; % 透镜焦距
d = 20; % 衍射屏距离
N = 512; % 离散化点数
L = 2*r; % 孔径尺寸
dx = L/N; % 离散化步长
x = (-L/2:dx:L/2-dx)'; % 离散化坐标
% 构造孔径函数
A = zeros(N);
for i = 1:N
for j = 1:N
if sqrt(x(i)^2 + x(j)^2) <= r
A(i,j) = 1;
end
end
end
% 计算衍射场
k = 2*pi/lambda;
[X,Y] = meshgrid(x);
r = sqrt((X.^2)+(Y.^2));
theta = atan2(Y,X);
U1 = A.*exp(1i*k*r)./r;
U1(isnan(U1)) = 0;
% 透镜效应
U2 = fftshift(fft2(U1));
H = exp(-1i*k*f*r.^2);
U3 = U2.*H;
% 衍射场
U4 = ifft2(ifftshift(U3));
U5 = U4.*conj(U4);
U6 = U5/max(max(U5));
% 显示结果
figure;
imagesc(x,x,U6);
colormap gray;
xlabel('x');
ylabel('y');
```
这个代码会生成一个夫琅禾费衍射的数值模拟仿真图像,其中白色表示高强度,黑色表示低强度。你可以根据自己的需求更改代码中的参数,例如改变波长、孔径半径、透镜焦距和衍射屏距离等。
阅读全文