# 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函数
H = besselh(nu,k,z,scale) 指定是否缩放汉克尔函数以避免溢出或精度损失。如果 scale 为 1,则第一类 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 函数
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)")
现在,计算复平面上的
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 的输出很有用,因为如果不这样处理,则函数会很快损失精度或上溢超出双精度的限制。 - 如果 K = 1,则按
示例:besselh.(nu,K,z 1)
# 详细信息
Hankel 函数和 Bessel 方程
以下微分方程(其中 ν 是实数常量)称为 Bessel 方程:
它的解称为 Bessel 函数。
第一类 Bessel 函数(表示为
第三类 Bessel 函数(也称为第一类和第二类 Hankel 函数)由 Bessel 函数的线性组合定义,其中
# 参考文献
[1] Abramowitz, M., and I.A. Stegun. Handbook of Mathematical Functions. National Bureau of Standards, Applied Math. Series #55, Dover Publications, 1965.