什么是第一类开尔文函数?
第一类开尔文函数记作 berv(x) 和 beiv(x),它们是贝塞尔函数 Jv 在经过相位旋转的自变量处取值后的实部与虚部:\(\mathrm{ber}_v(x) + i\,\mathrm{bei}_v(x) = J_v\!\left(x\cdot e^{i3\pi/4}\right)\)。这类函数常出现在具有柱对称性和振荡场的问题中,最经典的应用是分析电导体中的趋肤效应(skin effect),此外也见于热传导和弹性力学问题。本计算器可针对任意实数阶 v 和实数自变量 x,返回 berv(x)、beiv(x) 及其一阶导数 ber'v(x) 和 bei'v(x)。
如何使用本计算器
输入阶数 v(任意实数,其中 v = 0 最为常见)和自变量 x(实数),然后点击计算。结果框会显示 berv(x),表格中则列出 beiv(x) 及两个导数值。当 x 不超过约 20 时,级数收敛很快;当 x 非常大时,数值相减会引起精度损失,此时更适合采用渐近展开。
公式详解
这些函数通过上文给出的收敛复幂级数计算:
$$\mathrm{ber}_{\nu}\!\left(x\right) + i\,\mathrm{bei}_{\nu}\!\left(x\right) = \left(\frac{x}{2}\right)^{\nu} e^{\,i\,3\nu\pi/4} \sum_{k=0}^{\infty} \frac{\left(\dfrac{i\,x^{2}}{4}\right)^{k}}{k!\,\Gamma\!\left(\nu+k+1\right)}$$其中 Γ 表示伽马函数(本计算器使用 Lanczos 近似求值)。各项采用递推关系 \(\text{term}_k = \text{term}_{k-1}\cdot(i x^2/4) / [k(\nu+k)]\) 逐项累加,并用两个实数累加器分别记录实部和虚部。导数则利用精确关系式 \(\mathrm{ber}'_v = (\mathrm{ber}_{v+1}+\mathrm{bei}_{v+1})/\sqrt{2} + (v/x)\mathrm{ber}_v\) 和 \(\mathrm{bei}'_v = (\mathrm{bei}_{v+1}-\mathrm{ber}_{v+1})/\sqrt{2} + (v/x)\mathrm{bei}_v\),因此更高一阶的函数同样按上述定义求值。
计算实例(v = 0,x = 1)
当 v = 0 时,级数可简化为 \(\mathrm{ber}_0(x) = \sum (-1)^k (x/2)^{4k}/[(2k)!]^2\) 和 \(\mathrm{bei}_0(x) = \sum (-1)^k (x/2)^{4k+2}/[(2k+1)!]^2\)。在 \(x = 1\) 处可得 \(\mathrm{ber}_0(1) \approx 0.984382\),\(\mathrm{bei}_0(1) \approx 0.249566\),与标准函数表一致(参见 Abramowitz & Stegun 9.9)。
常见问题
x 的有效取值范围是多少?本级数实现方法在大约 \(0 \le x \le 20\) 范围内可靠。超出该范围后,浮点数相减会导致精度下降。
x = 0 时会怎样?当 v = 0 时,\(\mathrm{ber}_0(0) = 1\),\(\mathrm{bei}_0(0) = 0\),两个导数均为 0。当 v > 0 时,函数趋于 0;当 v < 0 时,函数可能发散。
可以使用非整数阶吗?可以。只要 v+1 不是负整数(避免伽马函数的极点),任意实数 v 均受支持。