![]() |
Home | Libraries | People | FAQ | More |
template <class T1, class T2> calculated-result-type sph_bessel(unsigned v, T2 x); template <class T1, class T2, class Policy> calculated-result-type sph_bessel(unsigned v, T2 x, const Policy&); template <class T1, class T2> calculated-result-type sph_neumann(unsigned v, T2 x); template <class T1, class T2, class Policy> calculated-result-type sph_neumann(unsigned v, T2 x, const Policy&);
函數sph_bessel 和函數sph_neumann 分別返回第一類球面貝賽爾函數和第二類球面貝賽爾函數:
sph_bessel(v, x) = jv(x)
sph_neumann(v, x) = yv(x) = nv(x)
其中:
對於單個參數類型T,返回值的類型使用返回值類型推導 來確定。
最後一個策略 參數是可選 的並且可以用來控制函數的行為: 如何處理錯誤,使用哪種層次的精度等等. 參見策略文檔瞭解更多信息。
當結果是未定義或是一個複數時,函數的返回定義域錯誤
: 這會在 x < 0.
時發生
函數 jv 與函數 Jv 是循環的的,但在原點處的行為有所差異:
類似地,對於較大的x ,yv 也是循環的, 但是對於較小的x,則趨近於-∞:
有兩種測試數據: 使用functions.wolfram.com計算出的抽樣測試數據 以及使用這種實現的簡化版本來計算出的數據量更大的測試數據 (去掉所有的對特殊情況的處理).
不同於其它情況, 這些函數使用cyl_bessel_j 和cyl_neumann: 使用這些函數來產生更精確的數據.
除了誤差處理以及一系列的特殊情況,這些函數直接以它們的定義的形式來實現:
特殊情況為:
j0= sinc_pi(x) = sin(x) / x
以及對於小的x,x < 1,我們可以使用下面的級數
這就很巧妙的避免了計算0/0的情況,在定義中,這種情況會在x → 0時發生。