Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

besselj

第 1 種ベッセル関数

説明

J = besselj(nu,Z) は、配列 Z の各要素について第 1 種ベッセル関数 Jν(z) を計算します。

J = besselj(nu,Z,scale) は、オーバーフローまたは精度の低下を防ぐために第 1 種変形ベッセル関数を指数的にスケーリングするかどうかを指定します。scale1 の場合、besselj の出力は係数 exp(-abs(imag(Z))) でスケーリングされます。

すべて折りたたむ

領域を定義します。

z = 0:0.1:20;

最初の 5 つの第 1 種ベッセル関数を計算します。J の各行には、z の各点で評価された関数の 1 つの次数の値が含まれます。

J = zeros(5,201);
for i = 0:4
    J(i+1,:) = besselj(i,z);
end

すべての関数を同じ Figure にプロットします。

plot(z,J)
grid on
legend('J_0','J_1','J_2','J_3','J_4','Location','Best')
title('Bessel Functions of the First Kind for $\nu \in [0, 4]$','interpreter','latex')
xlabel('z','interpreter','latex')
ylabel('$J_\nu(z)$','interpreter','latex')

Figure contains an axes. The axes with title Bessel Functions of the First Kind for $\nu \in [0, 4]$ contains 5 objects of type line. These objects represent J_0, J_1, J_2, J_3, J_4.

複素数値 z について、第 1 種ベッセル関数 J2(z) のスケーリングされていない関数 (J) とスケーリングされた関数 (Js) を計算します。

x = -10:0.3:10;
y = x';
z = x + 1i*y;
scale = 1;
J = besselj(2,z);
Js = besselj(2,z,scale);

スケーリングされた関数とスケーリングされていない関数の虚数部のプロットを比較します。abs(imag(z)) の値が大きい場合、スケーリングされていない関数は倍精度の範囲からすぐにオーバーフローし、計算できなくなります。スケーリングされた関数では、この支配的な指数的挙動が計算から除外されるため、スケーリングされていない関数と比べて計算可能な範囲が大きくなります。

surf(x,y,imag(J))
title('Bessel Function of the First Kind','interpreter','latex')
xlabel('real(z)','interpreter','latex')
ylabel('imag(z)','interpreter','latex')

Figure contains an axes. The axes with title Bessel Function of the First Kind contains an object of type surface.

surf(x,y,imag(Js))
title('Scaled Bessel Function of the First Kind','interpreter','latex')
xlabel('real(z)','interpreter','latex')
ylabel('imag(z)','interpreter','latex')

Figure contains an axes. The axes with title Scaled Bessel Function of the First Kind contains an object of type surface.

入力引数

すべて折りたたむ

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

例: besselj(3,0:5)

データ型: single | double

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

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

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

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

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

  • 1besselj の出力を exp(-abs(imag(Z))) でスケーリング

複素平面では、besselj の大きさが abs(imag(Z)) の値の増加に伴い急速に大きくなります。そのため、abs(imag(Z)) の値が大きい場合、出力の指数的なスケーリングが役立ちます。そうしないと、結果の精度が急速に低下したり、倍精度の範囲からオーバーフローしたりします。

例: besselj(3,0:5,1)

詳細

すべて折りたたむ

ベッセル関数

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

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

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

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

Jν(z)=(z2)ν(k=0)(z24)kk!Γ(ν+k+1).

"第 2 種ベッセル関数" は Yν(z) で表され、ベッセル方程式の第 2 種の解 (Jν(z) とは線形独立) を形成します。Yν(z) は次で定義されます。

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

第 2 種ベッセル関数は bessely を使用して計算できます。

ヒント

ベッセル関数は、第 3 種ベッセル関数とも呼ばれるハンケル関数と密接な関係があります。

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

Hν(K)(z)besselhJν(z)besseljYν(z)bessely です。ハンケル関数も、ベッセル方程式の基本解を形成します (besselh を参照)。

拡張機能

R2006a より前に導入