# besselk
第二类修正 Bessel 函数
函数库: TyMath
# 语法
K = besselk(nu,z)
K = besselk(nu,z,scale)
# 说明
K = besselk(nu,z) 为数组 z 中的每个元素计算第二类修正 Bessel 函数
K = besselk(nu,z,scale) 指定是否呈指数缩放第一类修正 Bessel 函数以避免溢出或精度损失。如果 scale 为 1,则 besselk 的输出按因子
# 示例
绘制第二类修正 Bessel 函数
定义域。
using TyMath
using TyPlot
z = 0:0.01:5
计算前五个第二类修正 Bessel 函数。I 的每一行包含在 z 中的点上计算的某阶函数的值。
K = zeros(5,501)
for i = 0:4
K[i+1,:] = besselk.(i,z)
end
在同一图窗中绘制所有函数。
hold("on")
for i = 1:5
plot(z,K[i,:])
end
axis([0 5 0 8])
grid("on")
legend([raw"$K_0$",raw"$K_1$",raw"$K_2$",raw"$K_3$",raw"$K_4$"])
title("v∈[0,4]的第二类修正Bessel函数")
xlabel("z")
ylabel(raw"$K_v(z)$")
hold("off")
计算呈指数缩放的修正 Bessel 函数
定义域
using TyMath
using TyBase
using TyPlot
z = LinRange(0,5,100)
scale = 1
Ks = zeros(4,100)
for nu = 0:3
Ks[nu+1,:] = besselk.(nu,z,scale)
end
比较经过缩放的函数和未缩放函数的虚部图。对于 abs(imag(z)) 的大值,未缩放的函数很快上溢超出双精度的限制,不再可计算。经过缩放的函数从计算中消除了这种占主导状态的指数行为,因此与未缩放的函数相比,具有更大的可计算性范围。
hold("on")
ylim([0,3])
xlim([0,5])
for i = 1:4
plot(z,Ks[i,:])
end
legend([raw"$K_0$",raw"$K_1$",raw"$K_2$",raw"$K_3$"])
title("v∈[0,3]的缩放的第二类修正Bessel函数")
xlabel("z")
ylabel(raw"$K_\nu(z) \cdot e^{z}$")
hold("off")

# 输入参数
nu - 方程的阶标量 | 向量 | 矩阵 | N 维数组
方程的阶,指定为标量、向量、矩阵或多维数组。nu 指定 Hankel 函数的阶。nu 和 x 的大小必须相同,或者其中一个可以为标量。
示例: besselk.(3,z)
数据类型: Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt
z - 函数的域标量 | 向量 | 矩阵 | N 维数组
函数的域,指定为标量、向量、矩阵或多维数组。nu 和 z 的大小必须相同,或者其中一个可以为标量。
示例: besselk.(nu,0:3)
数据类型: Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Complex
复数支持: 是
scale - 切换到缩放函数0(默认) | 1
切换到缩放函数,指定为下列值之一:
- 0(默认值) - 无缩放;
- 1 - 按因子
缩放 besselk 的输出。
besselk 的值随着 z 的值增加而快速降低,因此呈指数缩放输出对于 z 的大值很有用;如果不这样处理,结果会很快损失精度或下溢超出双精度的限制。
示例:besselk.(nu,z,1)
# 详细信息
修正 Bessel 函数
以下微分方程(其中 ν 是实数常量)称为修正 Bessel 方程:
它的解称为修正 Bessel 函数。
第一类修正 Bessel 函数(表示为
您可以使用 besseli 计算第一类修正 Bessel 函数。
第二类 Bessel 函数(表示为