名前空間
変種
操作

std::sph_legendre, std::sph_legendref, std::sph_legendrel

提供: cppreference.com
 
 
数値演算ライブラリ
一般的な数学関数
特殊な数学関数 (C++17)
数学定数 (C++20)
浮動小数点環境 (C++11)
複素数
数値配列
擬似乱数生成
コンパイル時有理数算術 (C++11)
数値演算アルゴリズム
(C++17)
(C++17)
補間
(C++20)
(C++20)
汎用の数値演算
(C++11)
(C++17)
ビット操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
double      sph_legendre ( unsigned l, unsigned m, double θ );

float       sph_legendre ( unsigned l, unsigned m, float θ );
long double sph_legendre ( unsigned l, unsigned m, long double θ );
float       sph_legendref( unsigned l, unsigned m, float θ  );

long double sph_legendrel( unsigned l, unsigned m, long double θ );
(1) (C++17以上)
double      sph_legendre ( unsigned l, unsigned m, 整数型 θ );
(2) (C++17以上)
1) 次数 l、位数 m、極角 θ の球面ルジャンドル陪関数を計算します。
2) 任意の整数型の引数を取るオーバーロード集合または関数テンプレート。 引数を double にキャストした後は (1) と同等です。

目次

[編集] 引数

l - 次数
m - 位数
θ - ラジアンで測った、極角

[編集] 戻り値

エラーが発生しなければ、 lm および θ の球面ルジャンドル陪関数 (ϕ = 0 の球面調和関数) の値を返します。 ただし球面調和関数は Ym
l
(θ,ϕ) = (-1)m
[
(2l+1)(l-m)!
4π(l+m)!
]1/2
Pm
l
(cosθ)eimϕ
として定義されます。 ただし Pm
l
(x)
std::assoc_legendre(l,m,x) であり、 |m|≤l です。

コンドン-ショートレーの位相項 (-1)m
が、 std::assoc_legendrePm
l
の定義から省かれているため、この定義に含まれていることに注意してください。

[編集] エラー処理

エラーは math_errhandling で規定されている通りに報告されます。

  • 引数が NaN の場合は、 NaN が返されます。 定義域エラーは報告されません。
  • l≥128 の場合、動作は処理系定義です。

[編集] ノート

C++17 をサポートしないけれども ISO 29124:2010 をサポートする処理系は、 __STDCPP_MATH_SPEC_FUNCS__ が処理系によって少なくとも 201003L の値に定義されており、ユーザがいかなる標準ライブラリのヘッダもインクルードする前に __STDCPP_WANT_MATH_SPEC_FUNCS__ を定義する場合、この関数を提供します。

ISO 29124:2010 をサポートしなけれども TR 19768:2007 (TR1) をサポートする処理系は、ヘッダ <tr1/cmath> および名前空間 std::tr1 で、この関数を提供します。

球面調和関数の実装は boost.math で利用可能であり、パラメータ phi をゼロに設定して呼ぶとこの関数に縮退します。

[編集]

#include <cmath>
#include <iostream>
int main()
{
    // spot check for l=3, m=0
    double x = 1.2345;
    std::cout << "Y_3^0(" << x << ") = " << std::sph_legendre(3, 0, x) << '\n';
 
    // exact solution
    double pi = std::acos(-1);
    std::cout << "exact solution = "
              << 0.25*std::sqrt(7/pi)*(5*std::pow(std::cos(x),3)-3*std::cos(x))
              << '\n';
}

出力:

Y_3^0(1.2345) = -0.302387
exact solution = -0.302387

[編集] 外部リンク

Weisstein, Eric W. "Spherical Harmonic." From MathWorld--A Wolfram Web Resource.

[編集] 関連項目

ルジャンドル陪多項式
(関数) [edit]