0

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 示例...请参阅评论以获取指向我正在尝试制作的拉盖尔-高斯图的实际图像的链接...

应用 cart2pol
应用 pol2cart

编辑 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)); ``
4

1 回答 1

2

编辑答案是根据问题编辑 4
中 提供的代码重写的。

我认为问题出在功能U上。您不会将元素明智的操作应用于方程式的所有部分。如果您将其更改为:

out = (C(p,l)./w0).* ...              % here it's a .* instead of *
    (((sqrt(2).*r)./w0).^abs(l)).* ... % here it's a .* instead of *
    (e((-r.^2)./w0.^2)).* ...          % here it's a .* instead of *
    (L(p,l,((2.*r.^2)./w0.^2))).* ...  % here it's a .* instead of *
    (e((-1)*1i*l.*phi));

您会得到以下两个结果,如下所示。

该图使用了笛卡尔坐标的输入:

在此处输入图像描述

这个图使用了极坐标:

在此处输入图像描述

第二个图中的“较粗”的分辨率是由于网格的分辨率不太合适。但从本质上讲,您解决了相同的功能。

于 2013-05-22T13:22:44.227 回答