2026a

# besselh


第三类 Bessel 函数(Hankel 函数)

函数库: TyMath

# 语法

H = besselh(nu,z)
H = besselh(nu,k,z)
H = besselh(nu,k,z,scale)

# 说明

H = besselh(nu,z) 为 z 计算第一类 Hankel函数 示例


H = besselh(nu,k,z) 为 z 计算第一类或第二类 Hankel函数 ,其中 k 为 1 或 2。示例


H = besselh(nu,k,z,scale) 指定是否缩放汉克尔函数以避免溢出或精度损失。如果 scale 为 1,则第一类 Hankel函数 进行缩放,第二类 Hankel函数 进行缩放。示例

# 示例

Hankel 函数的模数和相位

生成 Hankel 函数 的模和相位的等高线图。

创建一个由域值构成的网格。

using TyMath
using TyBase
using TyPlot
X,Y = meshgrid2(-4:0.002:2,-1.5:0.002:1.5)

在此域中计算 Hankel 函数并生成模量等高线图。

z = X+im*Y
H = zero(z)
for i in 1:length(z)
if abs(z[i]) == 0
H[i] = 0
else
H[i] = besselh(0,z[i])
end
end
contour(X,Y,abs.(H),levels = 0:0.2:3.2)
hold("on")

在同一图窗中,添加该相位的等高线图。

contour(X,Y,rad2deg.(angle.(H)),levels = -180:10:180)
hold("off")
渐进行为

绘制第二类 Hankel 函数的实部和虚部,并检查其渐近行为。

计算区间 [0.1, 25] 中的第二类 Hankel 函数

using TyMath
using TyPlot
k = 2
nu = 0
z = LinRange(0.1,25,200)
H = besselh.(nu,k,z)

绘制函数的实部和虚部。在同一图窗中,绘制线性组合 这将显示实部和虚部的幅值的渐近行为。

plot(z,real.(H),z,imag.(H))
grid("on")
hold("on")
M = sqrt.(real.(H).^2+imag.(H).^2)
plot(z,M,"--")
legend([raw"$J_0(z)$", raw"$Y_0(z)$", raw"$\sqrt{J_0^2 (z) + Y_0^2 (z)}$","interpreter","latex"])
未指数缩放的 Hankel 函数

计算复平面上呈指数缩放的 Hankel 函数 。 计算复平面上的二阶未缩放 Hankel 函数。当 z 的正虚部较大时,函数的值很快就会发散。这种现象限制了可计算值的范围。

using TyMath
using TyBase
using TyPlot
k = 2
nu = 1
x = [-5:0.4:15...]'
y = x'
z = x .+ im*y
scaled = 1
H = besselh.(nu,k,z)
X,Y = meshgrid2(vec(collect(x)),y)
surf(X,Y,imag.(H))
xlabel("real(z)")
ylabel("imag(z)")

现在,计算复平面上的 ,并将其与未缩放的函数进行比较。计算复平面上的二阶未缩放 Hankel 函数。当 z 的正虚部较大时,函数的值很快就会发散。这种现象限制了可计算值的范围。

Hs = besselh(nu,k,z,scaled)
surf(X,Y,imag.(Hs))
xlabel("real(z)")
ylabel("imag(z)")

# 输入参数

nu - 方程的阶
标量 | 向量 | 矩阵 | N 维数组

方程的阶,指定为标量、向量、矩阵或多维数组。nu 指定 Hankel 函数的阶。nu 和 x 的大小必须相同,或者其中一个可以为标量。

示例: besselh(3,z)

数据类型: Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt

k - Hankel 函数的类别
1(默认) | 2

Hankel 函数的类别,指定为 1 或 2。

如果 K = 1,则 besselh 计算第一类 Hankel 函数

如果 K = 2,则 besselh 计算第二类 Hankel 函数 .

示例:besselh(nu,2,z)

z - 函数的域
标量 | 向量 | 矩阵 | N 维数组

函数的域,指定为标量、向量、矩阵或多维数组。nu 和 z 的大小必须相同,或者其中一个可以为标量。

示例:besselh.(nu,[1-1im 1+0im 1+1im])

数据类型:Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Complex

复数支持:是

scale - 切换到缩放函数
0(默认) | 1

切换到缩放函数,指定为下列值之一:

  • 0(默认值) - 无缩放

  • 1 - 根据K的值缩放 besselh 的输出:

    • 如果 K = 1,则按 缩放第一类Hankel函数
    • 如果 K = 2,则按 缩放第二类Hankel函数

    在复平面上,当 imag(z) 为大的负值时, 溢出。同样,当 imag(z) 为大的正值时, 也会溢出。在这两种情况下,呈指数缩放 besselh 的输出很有用,因为如果不这样处理,则函数会很快损失精度或上溢超出双精度的限制。

示例:besselh.(nu,K,z 1)

# 详细信息

Hankel 函数和 Bessel 方程

以下微分方程(其中 ν 是实数常量)称为 Bessel 方程:

它的解称为 Bessel 函数。

第一类 Bessel 函数(表示为 )构成非整数 ν 的 Bessel 方程的一组基本解。第二类 Bessel 函数(表示为 )构成 Bessel 方程的另一个解(与 线性无关),它由以下方程定义:

第三类 Bessel 函数(也称为第一类和第二类 Hankel 函数)由 Bessel 函数的线性组合定义,其中 是 besselj, 是 bessely,如下所示:

# 参考文献

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

# 另请参阅

besseli | besselj | besselk | bessely