1. 我想做什么:
(i)使用输入 n 生成一个 n*n 笛卡尔网格
[x y] = meshgrid(linspace(-1,1,n));
(ii)生成极坐标
[theta r] = cart2pol(x,y);
(iii)在圆柱坐标系中评估函数
z = f(theta,r);
(iv)使用(比如说)pcolor(或 surf 或任何东西)绘制结果
pcolor(x,y,abs(z).^2) %The function is complex, a Laguerre-Gauss to be exact.
2. 我能做什么......我可以让绘图工作的唯一方法是从我的极坐标参数开始,然后从那里回到笛卡尔坐标:
(i)定义参数
r=linspace(0,1,n); theta=linspace(0,2*pi,n);
(ii)创建两个网格并评估 f
[theta r]=meshgrid(theta,r);
[x y]=pol2cart(theta,r);
z=f(theta,r);
(iii)情节
pcolor(x,y,abs(z).^2)
问题是现在我的网格是圆形的,我想在矩形网格上到处评估函数(因为我的分析依赖于方形像素阵列)。重申一下,使用上面的方法 2,我得到了一个以正方形为外接的圆形图;想象一个边缘有白色的黑色圆圈......但我想评估这个“白色”区域的功能。但是,使用方法 1 不起作用——当我绘图时,该功能全都搞砸了(只需谷歌 Laguerre-Gauss 模式即可查看绘图应该是什么样子)。
我希望能够从一个矩形网格开始并为每个点分配一个极坐标,而不是从极坐标开始并为它们分配所有笛卡尔点。
很长时间以来我一直在搞砸这个问题,我不知道如何解决这个看似简单的问题。
编辑 1
似乎问题在于坐标矩阵是如何生成的。下面我发布了一个简单的 3by3 示例的屏幕截图,说明了方法 1 和方法 2 如何生成不同的数字。
如何使这些数字兼容?
我没有声望点,所以我不能直接上传图像...下面的链接显示了 3by3 示例...请参阅评论以获取指向我正在尝试制作的拉盖尔-高斯图的实际图像的链接...
编辑 2
目前,方法(1.)的结果给出了错误的结果,如下所示:
第二种方法给出了正确的图像,不幸的是它只是一个圆圈而不是整个正方形。它显示在这里:
此处显示了两种方法的 3D 图- 只有上图中的彩色部分是正确的。
编辑 3
这是上面使用的功能的屏幕截图f
。请注意,它要求的输入参数不仅仅是r,theta
. 典型值为:
w0 = 0.5;
p = 0;
l = 5;
该函数C
给出归一化并且L
是拉盖尔多项式。这两个功能都经过了彻底的测试,并产生了预期的结果。
编辑 4
这里有足够的代码来z=U(0,5,r,phi,w0)+U(0,-5,r,phi,w0);
显式运行我的示例。情节本身由 给出pcolor(x,y,abs(z).^2)
。
请注意,该Lpl()
函数是作为注释插入的。必须将其保存为自己的 m 文件才能使 U 函数正常运行。
%% Laguerre-Gauss Modes U = U(p,l,r,phi,w0)
% Source: OAM theory paper section 2.A eqn 1.
% Assuming POLAR coordinates and evaluating AT beam waist.
% -- That is, z=0 for w(z)=w0(sqrt(1+z/zR))
% ---- ie, w(0) = w0
% Assuming z=0 also renders the Gouy phase arctan(z/zR) irrelevant.
% Note: Rayleigh Range zR is not explicitly defined because z=0 --> it is irrelevant too.
% Since zR is the only wavelength dependent term, wavelength also doesn't
% matter.
function out = U(p,l,r,phi,w0)
%Function handles for clarity
e = @(x) exp(x);
C = @(p,l) sqrt((2*factorial(p))/(pi*factorial(p+abs(l))));
L = @(p,l,z) Lpl(p,l,z);
%% Lpl() FUNCTION
% function out = Lpl(p,l,z)
%
% l=abs(l);
% LL=0;
% for mm=1:p+1
% m=mm-1;
% L=LL;
% LL= L+((-1)^m)*(factorial(p+l)/(factorial(p-m)*factorial(l+m)*factorial(m)))*(z.^m);
% end
% out = LL;
%%
out = (C(p,l)/w0)*...
(((sqrt(2).*r)/w0)^abs(l))*...
(e((-r.^2)/w0^2))*...
(L(p,l,((2.*r.^2)/w0^2)))*...
(e((-1)*1i*l.*phi)); ``