nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.Math.Core / BesselFunctions

BesselFunctions

Full name Microsoft.VisualBasic.Math.Distributions.BesselFunctions Assembly Microsoft.VisualBasic.Math.Core Members 7

修正贝塞尔函数(modified Bessel function)第一类 I_ν(x) 的实现。

本模块对应 R 语言之中的 besselI(x, nu, expon.scaled = FALSE), 用于 Skellam 分布的概率密度函数计算(参见 dskellam)。

00 Remarks

实现策略:

  1. 中等参数区域(x < 30 + ν)使用幂级数定义 I_ν(x) = Σ_k (x/2)^(2k+ν) / (k! Γ(k+ν+1)), 并在对数域使用 log-sum-exp 累加,以避免中间项上下溢出;
  2. 大参数区域使用 Abramowitz & Stegun 9.7.1 的渐近展开, 该渐近级数是发散的,因此在最小项处截断;
  3. 指数缩放形式 e^{-x} I_ν(x) 通过乘以 e^{-x} 得到, 对应 R 之中 expon.scaled = TRUE 的行为。

01 Syntax

Microsoft.VisualBasic.Math.Distributions.BesselFunctions

02 Methods

NameOverloadsSummary
BesselI 4 向量化入口(Vector 重载)。
BesselISeries 1 使用幂级数定义计算 I_ν(x)(对数域求和)。
BesselIAsymptotic 1 使用渐近展开计算大参数下的 I_ν(x)(Abramowitz & Stegun 9.7.1)。
LogAddExp 1 在对数域安全地计算 log(exp(a) + exp(b))。

03 Members

method BesselI overload 3 #
BesselI(Double, Double, Boolean)

修正贝塞尔函数第一类 I_ν(x)。

Parameters
NameTypeDescription
xDouble

自变量,要求 x >= 0(对于整数阶亦支持 x < 0)。

nuDouble

阶数 ν,要求 ν >= 0(负整数阶会退化为 I_{-n} = I_n)。

exponScaledBoolean

若为 True 则返回指数缩放值 e^{-x} I_ν(x),以避免大 x 时的溢出。

Returns

修正贝塞尔函数值;参数非法时返回 Double。

method BesselI overload 4 #
BesselI(Double(), Double(), Boolean)

按 R 的向量化语义(循环补齐)计算 besselI。

Parameters
NameTypeDescription
xDouble()

自变量向量。

nuDouble()

阶数向量。

exponScaledBoolean

是否返回指数缩放值。

Returns

长度等于两个输入向量长度的最大值的结果向量。

method BesselI #
BesselI(Vector, Vector, Boolean)

向量化入口(Vector 重载)。

method BesselI overload 2 #
BesselI(Vector, Double, Boolean)

标量阶数、向量自变量的便捷入口。

method BesselISeries #
BesselISeries(Double, Double, Boolean)

使用幂级数定义计算 I_ν(x)(对数域求和)。

method BesselIAsymptotic #
BesselIAsymptotic(Double, Double, Boolean)

使用渐近展开计算大参数下的 I_ν(x)(Abramowitz & Stegun 9.7.1)。

method LogAddExp #
LogAddExp(Double, Double)

在对数域安全地计算 log(exp(a) + exp(b))。