legendre
ルジャンドル陪関数
説明
例
ベクトルのルジャンドル陪関数値
関数 legendre
を使用して、ベクトルに対して演算を行い、出力の形式を確認します。
ベクトルの 2 次ルジャンドル関数値を計算します。
deg = 2; x = 0:0.1:0.2; P = legendre(deg,x)
P = 3×3
-0.5000 -0.4850 -0.4400
0 -0.2985 -0.5879
3.0000 2.9700 2.8800
出力の形式は次のようになります。
各行には、m (ルジャンドル陪関数の位数) の個々の値についての関数値が含まれます。
各列には、x の個々の値についての関数値が含まれます。
2 次ルジャンドル陪関数の方程式 は次のとおりです。
そのため、 の値は次のとおりです。
この結果は P(1,1) = -0.5000
と一致します。
ルジャンドル正規化の比較
複数の正規化を使用してルジャンドル陪関数を計算します。
1 次非正規化ルジャンドル関数値 を計算します。値の 1 番目の行は に対応し、2 番目の行は に対応します。
x = 0:0.2:1; n = 1; P_unnorm = legendre(n,x)
P_unnorm = 2×6
0 0.2000 0.4000 0.6000 0.8000 1.0000
-1.0000 -0.9798 -0.9165 -0.8000 -0.6000 0
次に、シュミット半正規化関数値を計算します。 の場合に、非正規化値と比べて、シュミット型は次のスケーリングの分だけ異なります。
1 行目では、 であるため、2 つの正規化は同じです。2 行目では、各値に乗算されるスケーリング定数は -1 です。
P_sch = legendre(n,x,'sch')
P_sch = 2×6
0 0.2000 0.4000 0.6000 0.8000 1.0000
1.0000 0.9798 0.9165 0.8000 0.6000 0
C1 = (-1) * sqrt(2*factorial(0)/factorial(2))
C1 = -1
最後に、完全に正規化された関数値を計算します。非正規化値と比べて、完全に正規化された形式は、次のスケーリング ファクターの分だけ異なります。
このスケーリング係数は のすべての値に適用されます。そのため、1 行目と 2 行目ではスケーリング係数が異なります。
P_norm = legendre(n,x,'norm')
P_norm = 2×6
0 0.2449 0.4899 0.7348 0.9798 1.2247
0.8660 0.8485 0.7937 0.6928 0.5196 0
Cm0 = sqrt((3/2))
Cm0 = 1.2247
Cm1 = (-1) * sqrt((3/2)/2)
Cm1 = -0.8660
球面調和関数の計算
球面調和関数はラプラス方程式の解の中に現れ、球の表面で定義される関数を表すために使用されます。 の球面調和関数を計算および表示するには、legendre
を使用します。
球面調和関数の方程式には、ルジャンドル関数の項と、複素指数が含まれます。
最初に、 (余緯度角) と (方位角) のすべての組み合わせを表す値のグリッドを作成します。ここで、余緯度 の範囲は 0 (北極) から (赤道) まで、および (南極) までです。
dx = pi/60; col = 0:dx:pi; az = 0:dx:2*pi; [phi,theta] = meshgrid(az,col);
について、グリッド上で を計算します。
l = 3; Plm = legendre(l,cos(theta));
legendre
は のすべての値についての解を計算するため、Plm
には余分な関数値も含まれます。 についての値を抽出し、残りを破棄します。関数 reshape
を使用して、結果の向きを phi
および theta
と同じサイズの行列とします。
m = 2; if l ~= 0 Plm = reshape(Plm(m+1,:,:),size(phi)); end
の球面調和関数値を計算します。
a = (2*l+1)*factorial(l-m); b = 4*pi*factorial(l+m); C = sqrt(a/b); Ylm = C .*Plm .*exp(1i*m*phi);
球面座標を直交座標に変換します。ここで、 は、 (北極) から 0 (赤道) まで、および (南極) までの範囲の緯度角になります。正と負の両方の実数値を使用して の球面調和関数をプロットします。
[Xm,Ym,Zm] = sph2cart(phi, pi/2-theta, abs(real(Ylm))); surf(Xm,Ym,Zm) title('$Y_3^2$ spherical harmonic','interpreter','latex')
入力引数
n
— ルジャンドル関数の次数
正の整数
ルジャンドル関数の次数。正の整数として指定します。legendre
は、指定した次数について、m = 0 から m = n までのすべての位数 m に対して を計算します。
例: legendre(2,X)
X
— 入力値
スカラー | ベクトル | 行列 | 多次元配列
入力値。スカラー、ベクトル、行列、または [-1,1]
の範囲の実数値の多次元配列として指定します。たとえば、球面調和関数の場合、入力値として X = cos(theta)
を使用して を計算することが一般的です。
例: legendre(2,cos(theta))
データ型: single
| double
normalization
— 正規化タイプ
'unnorm'
(既定値) | 'sch'
| 'norm'
正規化タイプ。次の値のいずれかとして指定します。
値 | 結果 |
---|---|
'unnorm' | ルジャンドル陪関数 |
'sch' | シュミット半正規化ルジャンドル陪関数 |
'norm' | 完全正規化ルジャンドル陪関数 |
例: legendre(n,X,'sch')
出力引数
P
— ルジャンドル陪関数値
スカラー | ベクトル | 行列 | 多次元配列
ルジャンドル陪関数値。スカラー、ベクトル、行列または多次元配列として返されます。P
の正規化は、normalization
の値に依存します。
P
のサイズは X
のサイズによって異なります。
X
がベクトルの場合、P
はサイズが(n+1)
行length(X)
列の行列です。P(m+1,i)
要素は、X(i)
で求められる次数n
、位数m
のルジャンドル陪関数の値です。一般に、
P
はX
より 1 次元高く、各要素P(m+1,i,j,k,...)
には、X(i,j,k,...)
で求められる次数n
、位数m
のルジャンドル陪関数が含まれます。
制限
非正規化ルジャンドル陪関数の値は、n > 150
の場合は倍精度数の範囲からオーバーフローし、n > 28
の場合は単精度数の範囲からオーバーフローします。このオーバーフローにより、Inf
値と NaN
値が発生します。これらのしきい値より大きい位数については、代わりに 'sch'
または 'norm'
正規化を使用するようにしてください。
詳細
ルジャンドル陪関数
ルジャンドル陪関数 は、次の一般ルジャンドル微分方程式の解です。
n はルジャンドル陪関数の整数次数、m は整数位数で、 が成立します。
ルジャンドル陪関数 はこの方程式の最も一般的な解で、次のように表されます。
これはルジャンドル多項式 の微分に基づいて定義されます。これは次のように表される解の一部です。
最初のいくつかのルジャンドル多項式は次のとおりです。
n の値 | |
---|---|
0 | |
1 | |
2 |
シュミット半正規化ルジャンドル陪関数
シュミット半正規化ルジャンドル陪関数は、非正規化ルジャンドル陪関数 と次の関係があります。
完全正規化ルジャンドル陪関数
完全正規化ルジャンドル陪関数は次のように正規化され、
正規化関数は非正規化ルジャンドル陪関数 と次の関係があります。
アルゴリズム
関数 legendre
は m
における 3 項の逆方向再帰の関係を使用します。この再帰は、複素球面調和関数であるシュミット半正規化ルジャンドル陪関数 の一種に関するものです。これらの関数は、次の式により標準の Abramowitz および Stegun [1]の関数 に関連付けられています。
これらは、以下によってシュミット型に関連付けられています。
参照
[1] Abramowitz, M. and I. A. Stegun, Handbook of Mathematical Functions, Dover Publications, 1965, Ch.8.
[2] Jacobs, J. A., Geomagnetism, Academic Press, 1987, Ch.4.
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
関数 legendre
は GPU 配列を完全にサポートしています。この関数を GPU で実行するには、入力データを gpuArray
(Parallel Computing Toolbox) として指定します。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)