Matlab编写涡旋光与平面波干涉
时间: 2023-09-07 21:13:39 浏览: 283
涡旋光束与平面波干涉
涡旋光与平面波的干涉可以通过Matlab编写实现。下面是一个简单的代码实现:
```matlab
% 设置参数
N = 200; % 图像大小
lambda = 632.8e-9; % 光波长
k = 2*pi/lambda; % 波数
z = 0; % 传播距离
w0 = N/8; % 光束半径
m = 5; % 涡旋光的模式数
theta0 = pi/4; % 平面波的入射角度
% 生成网格
x = linspace(-1,1,N);
y = linspace(-1,1,N);
[X,Y] = meshgrid(x,y);
% 生成高斯光束
wz = w0*sqrt(1+(lambda*z/(pi*w0^2))^2);
Rz = z*(1+(pi*w0^2)/(lambda*z)^2);
w = w0*sqrt(1+(z/(pi*w0^2))^2);
psi = atan(z/(pi*w0^2));
u = sqrt(2/pi)*wz/w0*exp(-(X.^2+Y.^2)/w^2).*exp(-1i*k*z).*exp(1i*psi);
% 生成涡旋光
theta = atan2(Y,X);
phi = m*theta;
v = exp(1i*phi).*u;
% 生成平面波
p = exp(1i*k*(X*cos(theta0)+Y*sin(theta0)));
% 干涉
w = u + v + p;
% 显示图像
figure;
subplot(2,2,1);
imagesc(abs(u).^2);
axis equal tight;
colormap(jet);
title('高斯光束');
xlabel('x');
ylabel('y');
subplot(2,2,2);
imagesc(abs(v).^2);
axis equal tight;
colormap(jet);
title('涡旋光');
xlabel('x');
ylabel('y');
subplot(2,2,3);
imagesc(abs(p).^2);
axis equal tight;
colormap(jet);
title('平面波');
xlabel('x');
ylabel('y');
subplot(2,2,4);
imagesc(abs(w).^2);
axis equal tight;
colormap(jet);
title('干涉图像');
xlabel('x');
ylabel('y');
```
这个代码生成一个大小为200x200的图像,其中包含一个高斯光束、一个模式数为5的涡旋光和一个入射角度为45度的平面波。它们在相干条件下干涉,生成干涉图像。你可以调整参数来生成不同的干涉图像。
阅读全文