2

我试过了boost::math::cyl_bessel_k(x,y) * exp(y)。在大多数情况下,这等于 Matlab 的 scaled besselk(x,y,1)。但在某些情况下(例如 , x=1y=2000besselk(x,y)=0和时boost::math::cyl_bessel_k(x,y)=0,Matlab 的缩放版本besselk(x,y,1)给我不同的值在10^-3. 但boost::math::cyl_bessel_k(x,y) * exp(y)回报-nan。我想为 Matlab 的besselk(x,y,1). 我该如何处理?

4

1 回答 1

1

我在 Boost 中没有看到任何你需要的东西(尽管你可以通过使用较低级别的函数自己实现它)。正如您所发现的,缩放的 Bessel 函数不是简单地通过相乘来计算的exp(z)GSL似乎已包含此功能,例如gsl_sf_bessel_Knu_scaled. 对于“完全等价物”,您可以查看Amos的论文代码,例如CBESK。Matlab 和 Octave 似乎都使用了这个实现。但是,代码是用 Fortran 编写的,因此您需要对其进行翻译或对其进行包装(该项目似乎已经这样做了,因此它可能很有用——还有其他的)。

您也可以使用 Matlab 的编码codegen器并输出一些东西。

于 2014-07-07T18:01:40.923 回答