貝塞爾函數Bessel(原理與實現)

程序實現:

// crt_bessel1.c
#include <math.h>
#include <stdio.h>

int main( void )
{
   double x = 2.387;
   int n = 3, c;

   printf( "Bessel functions for x = %f:\n", x );
   printf( " Kind   Order  Function     Result\n\n" );
   printf( " First  0      _j0( x )     %f\n", _j0( x ) );
   printf( " First  1      _j1( x )     %f\n", _j1( x ) );
   for( c = 2; c < 5; c++ )
      printf( " First  %d      _jn( %d, x )  %f\n", c, c, _jn( c, x ) );
   printf( " Second 0      _y0( x )     %f\n", _y0( x ) );
   printf( " Second 1      _y1( x )     %f\n", _y1( x ) );
   for( c = 2; c < 5; c++ )
      printf( " Second %d      _yn( %d, x )  %f\n", c, c, _yn( c, x ) );
}
輸出結果:

Bessel functions for x = 2.387000: Kind Order Function Result First 0 _j0( x ) 0.009288 First 1 _j1( x ) 0.522941 First 2 _jn( 2, x ) 0.428870 First 3 _jn( 3, x ) 0.195734 First 4 _jn( 4, x ) 0.063131 Second 0 _y0( x ) 0.511681 Second 1 _y1( x ) 0.094374 Second 2 _yn( 2, x ) -0.432608 Second 3 _yn( 3, x ) -0.819314 Second 4 _yn( 4, x ) -1.626833

貝塞爾函數 在新的<cmath>/<math.h>頭文件中已經包含

庫函數:

第一類變形貝塞爾函數doublecyl_bessel_i( double nu, double x ) ;I_\nu(x) = i^{-\nu} J_\nu(ix) = \sum_{k = 0}^\infty \frac{(x/2)^{\nu + 2k}}{k! \; \Gamma(\nu + k + 1)}, \text{ for } x \ge 0

第二類變形貝塞爾函數doublecyl_bessel_j( double nu, double x ) ;

J_\nu(x) = \sum_{k = 0}^\infty \frac{(-1)^k \; (x/2)^{\nu + 2k}}{k! \; \Gamma(\nu + k + 1)}, \text{ for } x \ge 0

第三類變形貝塞爾函數doublecyl_bessel_k( double nu, double x ) ;

\begin{align}K_\nu(x) & = \textstyle\frac{\pi}{2} i^{\nu+1} \big(J_\nu(ix) + i N_\nu(ix)\big) \\         & = \begin{cases}                 \displaystyle \frac{I_{-\nu}(x) - I_\nu(x)}{\sin \nu\pi}, & \text{for } x \ge 0 \text{ and } \nu \notin \mathbb{Z} \\[10pt]                 \displaystyle \frac{\pi}{2} \lim_{\mu \to \nu} \frac{I_{-\mu}(x) - I_\mu(x)}{\sin \mu\pi}, & \text{for } x < 0 \text{ and } \nu \in \mathbb{Z} \\             \end{cases}\end{align}

柱諾依曼函數第二類柱貝塞爾函數doublecyl_neumann( double nu, double x ) ;

N_\nu(x) = \begin{cases}                 \displaystyle \frac{J_\nu(x)\cos \nu\pi - J_{-\nu}(x)}{\sin \nu\pi}, & \text{for } x \ge 0 \text{ and } \nu \notin \mathbb{Z} \\[10pt]                 \displaystyle \lim_{\mu \to \nu} \frac{J_\mu(x)\cos \mu\pi - J_{-\mu}(x)}{\sin \mu\pi}, & \text{for } x < 0 \text{ and } \nu \in \mathbb{Z} \\             \end{cases}
第一類球貝塞爾函數doublesph_bessel( unsigned n, double x ) ;

j_n(x) = \sqrt{\frac{\pi}{2x}} J_{n+1/2}(x), \text{ for } x \ge 0

原理解釋:

利用柱座標求解涉及在圓、球與圓柱內的勢場的物理問題時出現的一類特殊函數。又稱標函數。用柱座標解拉普拉斯方程時,用到貝塞爾函數,它們和其他函數組合成柱調和函數。除初等函數外,在物理和工程中貝塞爾函數是最常用的函數,它們以19世紀德國天文學家F.W.貝塞爾的姓氏命名,他在1824年第一次描述過它們。貝塞爾函數最早出現在涉及如懸鏈振盪,長圓柱體冷卻以及緊張膜振動的問題中。貝塞爾函數的一族,也稱第一類貝塞爾函數,記作Jn(x),用x的偶次冪的無窮和來定義,數 n稱爲貝塞爾函數的階,它依賴於函數所要解決的問題。J0 (x)的圖形像衰減的餘弦曲線,J1(x)像衰減的正弦曲線(見圖)。第二類貝塞爾函數(又稱諾伊曼函數),記作Yn(x)。當n爲非整數時,Yn(x)可以由第一類貝塞爾函數的簡單組合來定義;當n爲整數時,Yn(x)不能由第一類貝塞爾函數的簡單組合得到,此時需要通過一個求極限過程來計算函數值。第三類貝塞爾函數(亦稱漢克爾函數)定義爲Hn=Jn±iYn,其中i爲虛數,用n階(正或負)貝塞爾函數可解稱爲貝塞爾方程的微分方程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章