# besseli

第1種修正ベッセル関数 (I_alpha).

# besselj

第1種ベッセル関数 (J_alpha).

# besselk

第2種修正ベッセル関数 (K_alpha).

# bessely

第2種ベッセル関数 (Y_alpha).

# besselh

第3種ベッセル関数 (ハンケル関数と同じ)

## 呼び出し手順

    y = besseli(alpha,x [,ice])
                y = besselj(alpha,x [,ice])
                y = besselk(alpha,x [,ice])
                y = bessely(alpha,x [,ice])
                y = besselh(alpha,x)
                y = besselh(alpha,K,x [,ice])

## 引数

x

  実数または複素数のベクトル.

alpha

  r実数ベクトル

ice

  整数フラグ, デフォルト値: 0

K

  整数, 指定可能な値は 1 または 2, ハンケル関数の型.

## 説明

- `besseli(alpha,x)` は, 実数の次数`alpha` および引数 `x`に関する 第1種修正ベッセル関数(I_alpha)を計算します, `besseli(alpha,x,1)` は `besseli(alpha,x).*exp(-abs(real(x)))`を計算します.

- `besselj(alpha,x)` は第1種のベッセル関数(J_alpha)を 実数の次数`alpha` および引数 `x`に関して 計算します. `besselj(alpha,x,1)` は `besselj(alpha,x).*exp(-abs(imag(x)))`を計算します.

- `besselk(alpha,x)` は第2種修正ベッセル関数 (K_alpha)を 実数の次数`alpha` および引数 `x`に関して 計算します. `besselk(alpha,x,1)` は `besselk(alpha,x).*exp(x)`を計算します.

- `bessely(alpha,x)`は第2種のベッセル関数(Y_alpha)を 実数の次数`alpha` および引数 `x`に関して 計算します. `bessely(alpha,x,1)` は `bessely(alpha,x).*exp(-abs(imag(x)))`を計算します.

- `besselh(alpha [,K] ,x)` は第3種のベッセル関数 (`K`に依存してハンケル関数 H1 または H2)を 実数の次数`alpha` および引数 `x`に関して 計算します.`K`が省略された場合, 1に等しいと仮定されます. `besselh(alpha,1,x,1)`は `besselh(alpha,1,x).*exp(-%i*x)`を計算し, `besselh(alpha,2,x,1)` は `besselh(alpha,2,x).*exp(%i*x)`を計算します.

## 注意

`alpha`および `x`が同じ大きさの 配列の場合,結果`y`も同じ大きさとなります. 入力のどちらかがスカラーの場合, もう片方の大きさにまで拡張されます. 片方の入力が行ベクトルでもう片方が列ベクトルの場合, 結果`y`は関数値の二次元テーブルとなります.

Y_alpha および J_alpha ベッセル関数はベッセルの微分方程式の 2つの独立解です:

修正ベッセル関数K_alpha および I_alphaは 修正ベッセル微分方程式の2つの独立解です:

H^1_alpha および H^2_alphaは第1種および第2種のハンケル関数 で,第1種および第2種のベッセル関数の線形結合です:

## 例

    //  besselI 関数
    // ==================
       x = linspace(0.01,10,5000)';
       clf()
       subplot(2,1,1)
       plot2d(x,besseli(0:4,x), style=2:6)
       legend('I'+string(0:4),2);
       xtitle("Some modified Bessel functions of the first kind")
       subplot(2,1,2)
       plot2d(x,besseli(0:4,x,1), style=2:6)
       legend('I'+string(0:4),1);
       xtitle("Some modified scaled Bessel functions of the first kind")

x = linspace(0.01,10,5000)'; clf() subplot(2,1,1) plot2d(x,besseli(0:4,x), style=2:6) legend('I'+string(0:4),2); xtitle("Some modified Bessel functions of the first kind") subplot(2,1,2) plot2d(x,besseli(0:4,x,1), style=2:6) legend('I'+string(0:4),1); xtitle("Some modified scaled Bessel functions of the first kind")

    // besselJ 関数
    // =================
       x = linspace(0,40,5000)';
       clf()
       plot2d(x,besselj(0:4,x), style=2:6, leg="J0@J1@J2@J3@J4")
       legend('I'+string(0:4),1);
       xtitle("Some Bessel functions of the first kind")

x = linspace(0,40,5000)'; plot2d(x,besselj(0:4,x), style=2:6, leg="J0@J1@J2@J3@J4") legend('I'+string(0:4),1); xtitle("Some Bessel functions of the first kind")

    // J_(1/2)(x) = sqrt(2/(x pi)) sin(x)　の関係を用いて
    //  besselj(0.5,x) のアルゴリズムをより直接的な式と比較します
       x = linspace(0.1,40,5000)';
       y1 = besselj(0.5, x);
       y2 = sqrt(2 ./(%pi*x)).*sin(x);
       er = abs((y1-y2)./y2);
       ind = find(er &gt; 0 &amp; y2 ~= 0);
       clf()
       subplot(2,1,1)
       plot2d(x,y1,style=2)
       xtitle("besselj(0.5,x)")
       subplot(2,1,2)
       plot2d(x(ind), er(ind), style=2, logflag="nl")
       xtitle("relative error between 2 formulae for besselj(0.5,x)")

x = linspace(0.1,40,5000)'; y1 = besselj(0.5, x); y2 = sqrt(2 ./(%pi*x)).*sin(x); er = abs((y1-y2)./y2); ind = find(er > 0 & y2 ~= 0); clf() subplot(2,1,1) plot2d(x,y1,style=2) xtitle("besselj(0.5,x)") subplot(2,1,2) plot2d(x(ind), er(ind), style=2, logflag="nl") xtitle("relative error between 2 formulae for besselj(0.5,x)")

    // besselK 関数
    // =================
       x = linspace(0.01,10,5000)';
       clf()
       subplot(2,1,1)
       plot2d(x,besselk(0:4,x), style=0:4, rect=[0,0,6,10])
       legend('K'+string(0:4),1);
       xtitle("Some modified Bessel functions of the second kind")
       subplot(2,1,2)
       plot2d(x,besselk(0:4,x,1), style=0:4, rect=[0,0,6,10])
       legend('K'+string(0:4),1);
       xtitle("Some modified scaled Bessel functions of the second kind")

x = linspace(0.01,10,5000)'; clf() subplot(2,1,1) plot2d(x,besselk(0:4,x), style=0:4, rect=[0,0,6,10]) legend('K'+string(0:4),1); xtitle("Some modified Bessel functions of the second kind") subplot(2,1,2) plot2d(x,besselk(0:4,x,1), style=0:4, rect=[0,0,6,10]) legend('K'+string(0:4),1); xtitle("Some modified scaled Bessel functions of the second kind")

    // besselY 関数
    // =================
       x = linspace(0.1,40,5000)'; // Y ベッセル関数は x -&gt; 0+ については制限されません
       clf()
       plot2d(x,bessely(0:4,x), style=0:4, rect=[0,-1.5,40,0.6])
       legend('Y'+string(0:4),4);
       xtitle("Some Bessel functions of the second kind")

x = linspace(0.1,40,5000)'; // Y Bessel functions are unbounded for x -> 0+ clf() plot2d(x,bessely(0:4,x), style=0:4, rect=[0,-1.5,40,0.6]) legend('Y'+string(0:4),4); xtitle("Some Bessel functions of the second kind")

    // besselH 関数
    // =================
       x=-4:0.025:2; y=-1.5:0.025:1.5;
       [X,Y] = ndgrid(x,y);
       H = besselh(0,1,X+%i*Y);
       clf();f=gcf();
       xset("fpf"," ")
       f.color_map=jetcolormap(16);
       contour2d(x,y,abs(H),0.2:0.2:3.2,strf="034",rect=[-4,-1.5,3,1.5])
       legends(string(0.2:0.2:3.2),1:16,"ur")
       xtitle("Level curves of |H1(0,z)|")

x=-4:0.025:2; y=-1.5:0.025:1.5; [X,Y] = ndgrid(x,y); H = besselh(0,1,X+%i*Y); clf();f=gcf(); xset("fpf"," ") f.color_map=jetcolormap(16); contour2d(x,y,abs(H),0.2:0.2:3.2,strf="034",rect=[-4,-1.5,3,1.5]) legends(string(0.2:0.2:3.2),1:16,"ur") xtitle("Level curves of |H1(0,z)|")

## 使用される関数

ソースコードは SCI/modules/special_functions/src/fortran/slatec および SCI/modules/special_functions/src/fortran にあります

Slatec : dbesi.f, zbesi.f, dbesj.f, zbesj.f, dbesk.f, zbesk.f, dbesy.f, zbesy.f, zbesh.f

拡張定義領域(Serge Steer INRIA)のドライバ (Serge Steer INRIA): dbesig.f, zbesig.f, dbesjg.f, zbesjg.f, dbeskg.f, zbeskg.f, dbesyg.f, zbesyg.f, zbeshg.f