Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

第一類球面貝賽爾函數和第二類球面貝賽爾函數

概要
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_jcyl_neumann: 使用這些函數來產生更精確的數據.

實現

除了誤差處理以及一系列的特殊情況,這些函數直接以它們的定義的形式來實現:

特殊情況為:

j0= sinc_pi(x) = sin(x) / x

以及對於小的xx < 1,我們可以使用下面的級數

這就很巧妙的避免了計算0/0的情況,在定義中,這種情況會在x → 0時發生。


PrevUpHomeNext