%%
%光传输矩阵相乘算法
Nn=512;
d=10e-6;
Nx=Nn;
Ny=Nn;
xmax =Nx/2*d;
ymax = Ny/2*d;
xg = (-xmax:d:xmax-d);
yg = (-ymax:d:ymax-d);
lambda=632.8e-9;
k=2*pi/lambda;
[x,y]=meshgrid(xg,yg);
r=sqrt(x.^2+y.^2);
w=2e-3;
g0=exp(-r.^2/w^2);%高斯光场
I= g0.*conj(g0);
mesh(x,y,I)
view(0,90);
axis equal
%%
dx=x(1,2)-x(1,1);
dy=dx;
length1=d*Nn/2;
row1=linspace(-length1,length1,Nn);
col1=linspace(-length1,length1,Nn);
[x1,y1]=meshgrid(row1,col1);
z_max = 0.5;%传输距离/
pcs = 50; % Number of pictures
zg = linspace(0.2,z_max,pcs);
E1=zeros(Nn,Nn);
I1=zeros(Nn,Nn);
Im0=zeros(Nn,Nn,pcs);
Imaxz=zeros(Nn,pcs);
for z=1:pcs
z_m=zg(z);
Mx=exp(-1i*k/z_m*x1(1,:)'*x(1,:));
My=exp(-1i*k/z_m*y(:,1)*y1(:,1)');
M=g0.*exp(1i*k/2/z_m*(x.^2+y.^2));
E1=-1i/lambda/z_m*exp(1i*k*z_m)*exp(1i*k/2/z_m*(x1.^2+y1.^2)).*(Mx*M*My).*(dx)*(dy);
I1(:,:)= E1.*conj(E1);
Imaxz(:,z)=(I1(Nn/2,:)+I1(Nn/2+1,:))/2;
Im0(:,:,z)=I1(:,:);
IM0(z)=max(max(I1));%归一化传输最大值
end
%%
% 测面传输图
figure(1);
mesh(zg,col1,Imaxz);
view(0,90);
colormap(jet)
xlabel('z(m)');
ylabel('y(m)');