Main Content

besselh

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

説明

H = besselh(nu,Z) は、配列 Z の各要素について第 1 種ハンケル関数 Hν(1)(z)=Jν(z)+iYν(z) を計算します。

H = besselh(nu,K,Z) は、配列 Z の各要素について、第 1 種または第 2 種ハンケル関数 Hν(K)(z) を計算します。ここで、K1 または 2 です。

H = besselh(nu,K,Z,scale) は、オーバーフローや精度の低下を防ぐためにハンケル関数をスケーリングするかどうかを指定します。scale1 の場合、第 1 種ハンケル関数 Hν(1)(z)eiZ でスケーリングされ、第 2 種ハンケル関数 Hν(2)(z)e+iZ でスケーリングされます。

すべて折りたたむ

ハンケル関数 H0(1)(z) [1]の係数と位相の等高線図を生成します。

この定義域で値のグリッドを作成します。

[X,Y] = meshgrid(-4:0.002:2,-1.5:0.002:1.5);

この定義域でハンケル関数を計算し、絶対値等高線図を作成します。

H = besselh(0,X+1i*Y);
contour(X,Y,abs(H),0:0.2:3.2)
hold on

Figure contains an axes object. The axes object contains an object of type contour.

同じ Figure に位相による等高線図を追加します。

contour(X,Y,rad2deg(angle(H)),-180:10:180)
hold off

Figure contains an axes object. The axes object contains 2 objects of type contour.

第 2 種ハンケル関数の実数部と虚数部をプロットし、それらの漸近的な挙動を調べます。

第 2 種ハンケル関数 H0(2)(z)=J0(z)-iY0(z) を区間 [0.1, 25] で計算します。

k = 2;
nu = 0;
z = linspace(0.1,25,200);
H = besselh(nu,k,z);

この関数の実数部と虚数部をプロットします。同じ Figure で、線形結合 J02(z)+Y02(z) をプロットします。これにより、実数部と虚数部の大きさの漸近的な挙動が示されます。

plot(z,real(H),z,imag(H))
grid on
hold on
M = sqrt(real(H).^2 + imag(H).^2);
plot(z,M,'--')
legend('$J_0(z)$', '$Y_0(z)$', '$\sqrt{J_0^2 (z) + Y_0^2 (z)}$','interpreter','latex')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent $J_0(z)$, $Y_0(z)$, $\sqrt{J_0^2 (z) + Y_0^2 (z)}$.

指数的にスケーリングされたハンケル関数 H1(2)(z) eiz を複素平面上で計算し、スケーリングされていない関数と比較します。

スケーリングされていない第 2 種ハンケル関数を複素平面上で計算します。z に大きな正の虚数部がある場合、この関数の値は急速に発散します。この現象により、計算可能な値の範囲が制限されます。

k = 2;
nu = 1;
x = -5:0.4:15;
y = x';
z = x + 1i*y;
scaled = 1;
H = besselh(nu,k,z);
surf(x,y,imag(H))
xlabel('real(z)')
ylabel('imag(z)')

Figure contains an axes object. The axes object with xlabel real(z), ylabel imag(z) contains an object of type surface.

次に、複素平面上で H1(2)(z) eiz を計算し、スケーリングされていない関数と比較します。スケーリングされた関数では、z が大きな正の虚数部をもつ場合のオーバーフローや精度の低下が避けられ、計算可能な値の範囲が大きくなります。

Hs = besselh(nu,k,z,scaled);
surf(x,y,imag(Hs))
xlabel('real(z)')
ylabel('imag(z)')

Figure contains an axes object. The axes object with xlabel real(z), ylabel imag(z) contains an object of type surface.

入力引数

すべて折りたたむ

方程式の次数。スカラー、ベクトル、行列または多次元配列として指定します。nu は、ハンケル関数の次数を指定します。nuZ は同じサイズでなければなりませんが、いずれかをスカラーにすることもできます。

例: besselh(3,Z)

データ型: single | double

ハンケル関数の種類。1 または 2 として指定します。

  • K = 1 の場合、besselh は第 1 種ハンケル関数 Hν(1)(z)=Jν(z)+iYν(z) を計算。

  • K = 2 の場合、besselh は第 2 種ハンケル関数 Hν(2)(z)=Jν(z)iYν(z) を計算。

例: besselh(nu,2,Z)

関数の定義域。スカラー、ベクトル、行列または多次元配列として指定します。nuZ は同じサイズでなければなりませんが、いずれかをスカラーにすることもできます。

例: besselh(nu,[1-1i 1+0i 1+1i])

データ型: single | double
複素数のサポート: あり

スケーリング関数に切り替えるかどうか。次の値のいずれかとして指定します。

  • 0 (既定) — スケーリングなし

  • 1K の値に応じて、besselh の出力をスケーリングします。

    • K = 1 の場合、第 1 種ハンケル関数 Hν(1)(z)eiZ でスケーリング。

    • K = 2 の場合、第 2 種ハンケル関数 Hν(2)(z)e+iZ でスケーリング。

    imag(Z) が大きく負である場合、複素平面上で Hν(1)(z) はオーバーフローします。同様に、imag(Z) が大きく正である場合、Hν(2)(z) はオーバーフローします。これら 2 通りの場合、besselh の出力を指数的にスケーリングすると役立ちます。そうしない場合、この関数の精度が急速に低下するか、この関数が倍精度の範囲からオーバーフローします。

例: besselh(nu,K,Z,1)

詳細

すべて折りたたむ

ハンケル関数とベッセル方程式

次の微分方程式 (ν は実定数) は "ベッセル方程式" と呼ばれています。

z2d2ydz2+zdydz+(z2ν2)y=0.

その解は "ベッセル関数" として知られています。

"第 1 種ベッセル関数" は、Jν(z) および J–ν(z) で表され、非整数の ν に対するベッセル方程式の基本解を形成します。"第 2 種ベッセル関数" は、Yν(z) で表され、ベッセル方程式の第 2 種の解 (Jν(z) とは線形独立) を形成し、次で定義されます。

Yν(z)=Jν(z)cos(νπ)Jν(z)sin(νπ).

"第 3 種ベッセル関数" は "第 1 種および第 2 種ハンケル関数" とも呼ばれ、ベッセル関数の線形結合により定義されます。ここで、Jν(z)besselj で、Yν(z)bessely です。

Hν(1)(z)=Jν(z)+iYν(z)Hν(2)(z)=Jν(z)iYν(z).

参照

[1] Abramowitz, M., and I.A. Stegun. Handbook of Mathematical Functions. National Bureau of Standards, Applied Math. Series #55, Dover Publications, 1965.

拡張機能

バージョン履歴

R2006a より前に導入