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を使用しても機能しません-プロットすると関数がすべて台無しになります(プロットがどのように見えるかを確認するには、ラゲールガウスモードをグーグルで検索してください)。

極座標から始めてすべてのデカルト点を割り当てるのではなく、長方形グリッドから始めてすべての点に極座標を割り当てられるようにしたいと考えています。

私はこれを長い間いじっていましたが、この一見単純な問題を回避する方法がわかりません。

編集 1
問題は、座標行列の生成方法にあるようです。以下に、アプローチ 1 とアプローチ 2 が異なる数値を生成する方法を示す単純な 3by3 の例のスクリーンショットを投稿しました。

これらの数値に互換性を持たせるにはどうすればよいですか?

評判ポイントがないので、画像を直接アップロードすることはできません...以下のリンクは3by3の例を示しています...作成しようとしているラゲールガウスプロットの実際の画像へのリンクについては、コメントを参照してください...

cart2pol
を適用する pol2cart を適用する

編集 2

現在、アプローチの結果 ( 1. ) は、次に示すように間違った結果をもたらします。

望ましいアプローチ、間違った結果

2 番目のアプローチでは適切な画像が得られますが、残念ながらこれは円であり、正方形全体ではありません。ここに示されています:

実施されたアプローチ、限られた結果

両方のアプローチの 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()関数はコメントとして挿入されることに注意してください。U 関数を適切に実行するには、これを独自の m ファイルとして保存する必要があります。

%% 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));

以下に示す 2 つの結果が得られます。

この図はデカルト座標の入力を使用しました。

ここに画像の説明を入力

そして、この図は極座標を使用しました:

ここに画像の説明を入力

2 番目の図の「粗い」解像度は、グリッドの解像度が適切でないためです。しかし、本質的には同じ機能を解決します。

于 2013-05-22T13:22:44.227 に答える